<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Langage</title>
		<link>https://www.developpez.net/forums/</link>
		<description>Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++</description>
		<language>fr</language>
		<lastBuildDate>Wed, 11 Nov 2026 08:35:41 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Langage</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>fonction : passer par référence des paramètres optionnels</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186234&amp;goto=newpost</link>
			<pubDate>Mon, 19 Oct 2026 10:51:12 GMT</pubDate>
			<description><![CDATA[Bonjour. 
 
J'ai écris une...]]></description>
			<content:encoded><![CDATA[<div>Bonjour.<br />
<br />
J'ai écris une fonction qui vérifie qu'une date chaine de cracatères est valide et qui la décompose en jour, mois et année <b><i>si</i></b> ces trois paramètres lui sont fournies.<br />
Je sais qu'il existe des fonctions qui vérifient la validité d'une date. Le problème n'est pas là.<br />
Je ne trouve pas la syntaxe correcte pour passer par référence un argument optionnel en lui donnant une valeur par défaut.<br />
voici ce que j'ai essayé<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">bool</span> date_valide<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> std::string date, <span style="color: #0000ff;">int</span> &amp;jour = <span style="color: #cc66cc;">0</span>, <span style="color: #0000ff;">int</span> &amp;mois = <span style="color: #cc66cc;">0</span>, <span style="color: #0000ff;">int</span> &amp;annee = <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span>;</code><hr />
</div>Ça ne plaît pas du tout au compilateur.<br />
Comme ce sont des pointeurs (puisque passage par référence), j'ai essayé avec nullptr.<br />
Ça ne lui a pas plu non plus.<br />
<br />
Est-ce que ce que je veux faire est réalisable?<br />
Si oui, pourriez-vous m'expliquer la syntaxe?<br />
<br />
Merci d'avance,<br />
<br />
Olivier</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator><![CDATA[olivier]]]></dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186234/c-cpp/cpp/langage/fonction-passer-reference-parametres-optionnels/</guid>
		</item>
		<item>
			<title><![CDATA[Comment faire un dispatcher avec plusieurs familles d'objets ?]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185846&amp;goto=newpost</link>
			<pubDate>Fri, 25 Sep 2026 12:22:21 GMT</pubDate>
			<description><![CDATA[Bonjour, c'est un code que...]]></description>
			<content:encoded><![CDATA[<div>Bonjour, c'est un code que j'ai repris d'ici (et donc il n'est pas de moi) :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
 <span style="color: #808080;">//Utilitaire pour ajouter un type &#65533; la fin d'un tuple</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span>, <span style="color: #0000ff;">class</span>&gt;
        <span style="color: #0000ff;">struct</span> cat_type;
&nbsp;
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> T, <span style="color: #0000ff;">class</span>... Arg&gt;
        <span style="color: #0000ff;">struct</span> cat_type&lt;std::tuple&lt;Arg...&gt;, T&gt;
        <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">using</span> type = std::tuple&lt;Arg..., T&gt;;
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Classe qui surcharge accept pour les types concret</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> Abstract, <span style="color: #0000ff;">class</span>&gt;
        <span style="color: #0000ff;">struct</span> acceptable : Abstract
        <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">void</span> accept<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">typename</span> Abstract::visitor_type&amp; v<span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
                v.visit<span style="color: black;">&#40;</span>*<span style="color: #0000ff;">this</span><span style="color: black;">&#41;</span>;
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Classe de base des visiteurs</span>
        <span style="color: #808080;">//La visite se fait sur le type acceptable qui contient l'information sur le type r&#65533;el</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span>, <span style="color: #0000ff;">class</span>...&gt;
        <span style="color: #0000ff;">struct</span> visitor;
&nbsp;
        <span style="color: #808080;">//R&#65533;cursion</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> Abstract, <span style="color: #0000ff;">class</span> Concrete, <span style="color: #0000ff;">class</span>... Concrete_Tail&gt;
        <span style="color: #0000ff;">struct</span> visitor&lt;Abstract, Concrete, Concrete_Tail...&gt;
            : visitor&lt;Abstract, Concrete_Tail...&gt;
        <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">using</span> visitor&lt;Abstract, Concrete_Tail...&gt;::visit;
            <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> visit<span style="color: black;">&#40;</span>acceptable&lt;Abstract, Concrete&gt;&amp;<span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> = <span style="color: #cc66cc;">0</span>;
        <span style="color: black;">&#125;</span>;
&nbsp;
        <span style="color: #808080;">//Condition d'arr&#65533;t</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> Abstract, <span style="color: #0000ff;">class</span> Concrete&gt;
        <span style="color: #0000ff;">struct</span> visitor&lt;Abstract, Concrete&gt;
        <span style="color: black;">&#123;</span>
            visitor<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> = <span style="color: #0000ff;">default</span>;
            visitor<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> visitor&amp;<span style="color: black;">&#41;</span> = <span style="color: #0000ff;">delete</span>;
&nbsp;
            <span style="color: #0000ff;">virtual</span> ~visitor<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
            <span style="color: black;">&#125;</span>
&nbsp;
            visitor&amp; <span style="color: #0000ff;">operator</span>=<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> visitor&amp;<span style="color: black;">&#41;</span> = <span style="color: #0000ff;">delete</span>;
&nbsp;
            <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> visit<span style="color: black;">&#40;</span>acceptable&lt;Abstract, Concrete&gt;&amp;<span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> = <span style="color: #cc66cc;">0</span>;
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Utilitaire pour r&#65533;cup&#65533;rer le type accept&#65533; par la hi&#65533;rarchie depuis le visiteur</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span>, <span style="color: #0000ff;">class</span>&gt;
        <span style="color: #0000ff;">struct</span> accept_type;
&nbsp;
        <span style="color: #0000ff;">template</span>&lt;
            <span style="color: #0000ff;">class</span> Abstract, <span style="color: #0000ff;">class</span>... Concrete,
            <span style="color: #0000ff;">class</span> T
        &gt;
        <span style="color: #0000ff;">struct</span> accept_type&lt;visitor&lt;Abstract, Concrete...&gt;, T&gt;
        <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">using</span> type = acceptable&lt;Abstract, T&gt;;
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Utilitaire pour r&#65533;cup&#65533;rer les types concrets de la hi&#65533;rarchie depuis le visiteur</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span>&gt;
        <span style="color: #0000ff;">struct</span> concrete_type;
&nbsp;
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> Abstract, <span style="color: #0000ff;">class</span>... Concrete&gt;
        <span style="color: #0000ff;">struct</span> concrete_type&lt;visitor&lt;Abstract, Concrete...&gt;&gt;
        <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">using</span> type = std::tuple&lt;Concrete...&gt;;
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Classe de base qui ajoute accept &#65533; la classe de base de la hi&#65533;rarchie</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> Abstract, <span style="color: #0000ff;">class</span>... Concrete&gt;
        <span style="color: #0000ff;">struct</span> accept_visitor
        <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">using</span> visitor_type = visitor&lt;Abstract, Concrete...&gt;;
&nbsp;
            accept_visitor<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> = <span style="color: #0000ff;">default</span>;
            accept_visitor<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> accept_visitor&amp;<span style="color: black;">&#41;</span> = <span style="color: #0000ff;">delete</span>;
&nbsp;
            <span style="color: #0000ff;">virtual</span> ~accept_visitor<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
            <span style="color: black;">&#125;</span>
&nbsp;
            accept_visitor&amp; <span style="color: #0000ff;">operator</span>=<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> accept_visitor&amp;<span style="color: black;">&#41;</span> = <span style="color: #0000ff;">delete</span>;
&nbsp;
            <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> accept<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> visitor_type&amp;<span style="color: black;">&#41;</span> = <span style="color: #cc66cc;">0</span>;
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Classe dispatcher : c'est un visiteur et un foncteur</span>
&nbsp;
        <span style="color: #808080;">//Condition d'arr&#65533;t sur les types de la hi&#65533;rarchie</span>
        <span style="color: #0000ff;">template</span>&lt;
            <span style="color: #0000ff;">class</span> To_Visit, <span style="color: #0000ff;">class</span>, <span style="color: #0000ff;">bool</span>,
            <span style="color: #0000ff;">class</span> Visitor, <span style="color: #0000ff;">class</span>,
            <span style="color: #0000ff;">class</span> Fun
        &gt;
        <span style="color: #0000ff;">struct</span> dispatcher : Visitor
        <span style="color: black;">&#123;</span>
            dispatcher<span style="color: black;">&#40;</span>To_Visit&amp; tv, <span style="color: #0000ff;">const</span> Fun&amp; f<span style="color: black;">&#41;</span>
                : to_visit<span style="color: black;">&#40;</span>tv<span style="color: black;">&#41;</span>, fun<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
            <span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #0000ff;">protected</span>:
            To_Visit&amp; to_visit;
            Fun fun;
        <span style="color: black;">&#125;</span>;
&nbsp;
        <span style="color: #808080;">//R&#65533;cursion sur les types de la hi&#65533;rarchie</span>
        <span style="color: #0000ff;">template</span>&lt;
            <span style="color: #0000ff;">class</span> To_Visit, <span style="color: #0000ff;">class</span> Visited,
            <span style="color: #0000ff;">class</span> Visitor, <span style="color: #0000ff;">class</span> T, <span style="color: #0000ff;">class</span>... Concrete,
            <span style="color: #0000ff;">class</span> Fun
        &gt;
        <span style="color: #0000ff;">struct</span> dispatcher&lt;
            To_Visit, Visited, <span style="color: #0080ff;">false</span>,
            Visitor, std::tuple&lt;T, Concrete...&gt;,
            Fun
        &gt;
            : dispatcher&lt;
            To_Visit, Visited, <span style="color: #0080ff;">false</span>,
            Visitor, std::tuple&lt;Concrete...&gt;,
            Fun
            &gt;
        <span style="color: black;">&#123;</span>
        <span style="color: #0000ff;">private</span>:
            <span style="color: #0000ff;">using</span> base = dispatcher&lt;
                To_Visit, Visited, <span style="color: #0080ff;">false</span>,
                Visitor, std::tuple&lt;Concrete...&gt;,
                Fun
            &gt;;
&nbsp;
        <span style="color: #0000ff;">public</span>:
            <span style="color: #0000ff;">using</span> base::base;
&nbsp;
            <span style="color: #808080;">//D&#65533;clenche la visite sur le bon param&#65533;tre</span>
            <span style="color: #0000ff;">void</span> <span style="color: #0000ff;">operator</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span>
            <span style="color: black;">&#123;</span>
                std::get
                    &lt;std::tuple_size&lt;Visited&gt;::value&gt;
                    <span style="color: black;">&#40;</span>base::to_visit<span style="color: black;">&#41;</span>
                    .accept<span style="color: black;">&#40;</span>*<span style="color: #0000ff;">this</span><span style="color: black;">&#41;</span>;
            <span style="color: black;">&#125;</span>
&nbsp;
            <span style="color: #0000ff;">using</span> base::visit;
            <span style="color: #0000ff;">void</span> visit<span style="color: black;">&#40;</span><span style="color: #0000ff;">typename</span> accept_type&lt;Visitor, T&gt;::type&amp;<span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span>
            <span style="color: black;">&#123;</span>
                <span style="color: #0000ff;">using</span> new_visited = <span style="color: #0000ff;">typename</span> cat_type&lt;Visited, T&gt;::type;
&nbsp;
                <span style="color: #808080;">//R&#65533;cursion sur les arguments d'appel</span>
                dispatcher&lt;
                    To_Visit, new_visited,
                    std::tuple_size&lt;To_Visit&gt;::value == std::tuple_size&lt;new_visited&gt;::value,
                    Visitor, <span style="color: #0000ff;">typename</span> concrete_type&lt;Visitor&gt;::type,
                    Fun
                &gt;<span style="color: black;">&#40;</span>base::to_visit, base::fun<span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>;
&nbsp;
        <span style="color: #808080;">//Condition d'arr&#65533;t sur les param&#65533;tre d'appel</span>
        <span style="color: #0000ff;">template</span>&lt;
            <span style="color: #0000ff;">class</span> To_Visit, <span style="color: #0000ff;">class</span>... Visited,
            <span style="color: #0000ff;">class</span> Visitor, <span style="color: #0000ff;">class</span> Concrete,
            <span style="color: #0000ff;">class</span> Fun
        &gt;
        <span style="color: #0000ff;">struct</span> dispatcher&lt;
            To_Visit, std::tuple&lt;Visited...&gt;, <span style="color: #0080ff;">true</span>,
            Visitor, Concrete,
            Fun
        &gt;
        <span style="color: black;">&#123;</span>
            dispatcher<span style="color: black;">&#40;</span>To_Visit&amp; tv, <span style="color: #0000ff;">const</span> Fun&amp; f<span style="color: black;">&#41;</span>
                : to_visit<span style="color: black;">&#40;</span>tv<span style="color: black;">&#41;</span>, fun<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
            <span style="color: black;">&#125;</span>
&nbsp;
            <span style="color: #808080;">//D&#65533;clenche l'appel avec les bon types</span>
            <span style="color: #0000ff;">void</span> <span style="color: #0000ff;">operator</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
                apply<span style="color: black;">&#40;</span>std::make_index_sequence&lt;<span style="color: #0000ff;">sizeof</span>...<span style="color: black;">&#40;</span>Visited<span style="color: black;">&#41;</span>&gt;<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
            <span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #0000ff;">private</span>:
            <span style="color: #0000ff;">template</span>&lt;std::size_t... I&gt;
            <span style="color: #0000ff;">void</span> apply<span style="color: black;">&#40;</span>std::index_sequence&lt;I...&gt;<span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
                fun<span style="color: black;">&#40;</span><span style="color: #0000ff;">reinterpret_cast</span>&lt;Visited&amp;&gt;<span style="color: black;">&#40;</span>std::get&lt;I&gt;<span style="color: black;">&#40;</span>to_visit<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>...<span style="color: black;">&#41;</span>;
            <span style="color: black;">&#125;</span>
&nbsp;
            To_Visit&amp; to_visit;
            Fun fun;
        <span style="color: black;">&#125;</span>;
&nbsp;
&nbsp;
        <span style="color: #808080;">//Classe de base pour les foncteurs &#65533; dispatcher</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> Fun, <span style="color: #0000ff;">class</span> Abstract&gt;
        <span style="color: #0000ff;">struct</span> dispatchable
        <span style="color: black;">&#123;</span>
            dispatchable<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> = <span style="color: #0000ff;">default</span>;
            dispatchable<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> dispatchable&amp;<span style="color: black;">&#41;</span> = <span style="color: #0000ff;">default</span>;
&nbsp;
            dispatchable&amp; <span style="color: #0000ff;">operator</span>=<span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> dispatchable&amp;<span style="color: black;">&#41;</span> = <span style="color: #0000ff;">default</span>;
&nbsp;
            <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span>... Arg&gt;
            <span style="color: #0000ff;">void</span> apply<span style="color: black;">&#40;</span>Arg&amp;&amp;... arg<span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
                <span style="color: #0000ff;">using</span> used_visitor = <span style="color: #0000ff;">typename</span> Abstract::visitor_type;
&nbsp;
                <span style="color: #0000ff;">auto</span> t = std::forward_as_tuple<span style="color: black;">&#40;</span>std::forward&lt;Arg&gt;<span style="color: black;">&#40;</span>arg<span style="color: black;">&#41;</span>...<span style="color: black;">&#41;</span>;
                dispatcher&lt;
                    <span style="color: #0000ff;">decltype</span><span style="color: black;">&#40;</span>t<span style="color: black;">&#41;</span>, std::tuple&lt;&gt;, <span style="color: #0080ff;">false</span>,
                    used_visitor, <span style="color: #0000ff;">typename</span> concrete_type&lt;used_visitor&gt;::type,
                    Fun
                &gt;<span style="color: black;">&#40;</span>t, <span style="color: #0000ff;">static_cast</span>&lt;Fun&amp;&gt;<span style="color: black;">&#40;</span>*<span style="color: #0000ff;">this</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
            <span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #0000ff;">protected</span>:
            ~dispatchable<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: black;">&#123;</span>
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>;</pre></td></tr></table></code><hr />
</div>J'aimerais le généraliser pour pouvoir écrire un dispatchable pour plusieurs familles d'objets comme ceci :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">struct</span> chat  : acceptable&lt;animal, chat&gt; <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
<span style="color: #0000ff;">struct</span> chien : acceptable&lt;animal, chien&gt; <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">struct</span> ep&eacute;e  : acceptable&lt;arme, ep&eacute;e&gt; <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
<span style="color: #0000ff;">struct</span> arc   : acceptable&lt;arme, arc&gt; <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">struct</span> laser : acceptable&lt;projectile, laser&gt; <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
<span style="color: #0000ff;">struct</span> balle : acceptable&lt;projectile, balle&gt; <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">struct</span> interaction : dispatchable&lt;interaction, animal, arme, projectile&gt;
<span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">void</span> <span style="color: #0000ff;">operator</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> chat&amp;, <span style="color: #0000ff;">const</span> ep&eacute;e&amp;, <span style="color: #0000ff;">const</span> laser&amp;<span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> ... <span style="color: black;">&#125;</span>
    <span style="color: #0000ff;">void</span> <span style="color: #0000ff;">operator</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: #0000ff;">const</span> chien&amp;, <span style="color: #0000ff;">const</span> arc&amp;, <span style="color: #0000ff;">const</span> balle&amp;<span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> ... <span style="color: black;">&#125;</span>
    <span style="color: #808080;">// etc.</span>
<span style="color: black;">&#125;</span>;</pre></td></tr></table></code><hr />
</div>Mais, je ne sais pas faire et j'ai vraiment du mal à comprendre le code de la métaprogrammation en c++. <br />
(Parce que on ne vois pas le code généré lors de la compilation déjà, faut le deviner)<br />
<br />
Merci.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>Laurent7601</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185846/c-cpp/cpp/langage/faire-dispatcher-plusieurs-familles-d-objets/</guid>
		</item>
		<item>
			<title>La nouvelle feature des modules c++20 et leur instabilité dans les compilos! (Ca me saoule!)</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184778&amp;goto=newpost</link>
			<pubDate>Tue, 21 Jul 2026 18:18:19 GMT</pubDate>
			<description><![CDATA[Bonjour, j'ai écris un moteur...]]></description>
			<content:encoded><![CDATA[<div>Bonjour, j'ai écris un moteur de jeux en c++20. Tout parsait bien jusque maintenat, lors de la compilation de la démo. (Du futur jeu) Seul clang était capable de compiler l'utilisation avancée des modules c++20 que j'ai intriduis dans mon moteur, mais, de manière instable : <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br /></div></td><td valign="top"><pre style="margin: 0">PLEASE submit a bug report to https:<span style="color: #808080;">//github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.</span>
Stack dump:
<span style="color: #cc66cc;">0.</span>      Program arguments: C:<span style="color: #800000;">\\</span>msys64<span style="color: #800000;">\\</span>mingw64<span style="color: #800000;">\\</span>bin<span style="color: #800000;">\\</span>clang++.exe <span style="color: #FF0000;">&quot;-DODFAEG_INSTALL_DIR=<span style="color: #800000;">\&quot;</span>C:/Program Files (x86)/ODFAEG<span style="color: #800000;">\&quot;</span>&quot;</span> -IC:/VulkanSDK/<span style="color: #cc66cc;">1.4</span>.<span style="color: #cc66cc;">350.0</span>/Include -IC:/Users/laure/Projets/ODFAEG/TestODFAEG2/external/imgui -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/include&quot;</span> -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/share/odfaeg/modules/Core&quot;</span> -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/share/odfaeg/modules/Math&quot;</span> -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/share/odfaeg/modules/Window&quot;</span> -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/share/odfaeg/modules/Physics&quot;</span> -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/share/odfaeg/modules/Entity&quot;</span> -isystem <span style="color: #FF0000;">&quot;C:/Program Files (x86)/ODFAEG/share/odfaeg/modules/Graphics&quot;</span> -stdlib=libc++ -stdlib=libc++ -O3 -DNDEBUG -std=gnu+<span style="color: #cc66cc;">+20</span> -std=c+<span style="color: #cc66cc;">+20</span> <span style="color: #FF0000;">&quot;-fprebuilt-module-path=C:/Program Files (x86)/ODFAEG/share/odfaeg/pcm/Core&quot;</span> <span style="color: #FF0000;">&quot;-fprebuilt-module-path=C:/Program Files (x86)/ODFAEG/share/odfaeg/pcm/Math&quot;</span> <span style="color: #FF0000;">&quot;-fprebuilt-module-path=C:/Program Files (x86)/ODFAEG/share/odfaeg/pcm/Window&quot;</span> <span style="color: #FF0000;">&quot;-fprebuilt-module-path=C:/Program Files (x86)/ODFAEG/share/odfaeg/pcm/Physics&quot;</span> <span style="color: #FF0000;">&quot;-fprebuilt-module-path=C:/Program Files (x86)/ODFAEG/share/odfaeg/pcm/Entity&quot;</span> <span style="color: #FF0000;">&quot;-fprebuilt-module-path=C:/Program Files (x86)/ODFAEG/share/odfaeg/pcm/Graphics&quot;</span> -MD -MT CMakeFiles/MyGame.dir/main.cpp.obj -MF CMakeFiles<span style="color: #800000;">\\</span>MyGame.dir<span style="color: #800000;">\\</span>main.cpp.obj.d @CMakeFiles<span style="color: #800000;">\\</span>MyGame.dir<span style="color: #800000;">\\</span>main.cpp.obj.modmap -o CMakeFiles/MyGame.dir/main.cpp.obj -c C:/Users/laure/Projets/ODFAEG/TestODFAEG2/main.cpp
<span style="color: #cc66cc;">1.</span>      C:/Users/laure/Projets/ODFAEG/TestODFAEG2/main.cpp:<span style="color: #cc66cc;">57</span>:<span style="color: #cc66cc;">1</span>: current parser token <span style="color: #FF0000;">'</span><span style="color: #0000ff;">enum</span><span style="color: #FF0000;">'</span>
Exception Code: <span style="color: #cc66cc;">0xC0000005</span>
 <span style="color: #339933;">#0 0x00007ffa12f107a5 (C:\msys64\mingw64\bin\libclang-cpp.dll+0xc107a5)</span>
 <span style="color: #339933;">#1 0x00007ffa1393c651 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x163c651)</span>
 <span style="color: #339933;">#2 0x00007ffa13bb0711 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x18b0711)</span>
 <span style="color: #339933;">#3 0x00007ffa1456b169 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x226b169)</span>
 <span style="color: #339933;">#4 0x00007ffa1454601b (C:\msys64\mingw64\bin\libclang-cpp.dll+0x224601b)</span>
 <span style="color: #339933;">#5 0x00007ffa1456f248 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x226f248)</span>
 <span style="color: #339933;">#6 0x00007ffa1455c333 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x225c333)</span>
 <span style="color: #339933;">#7 0x00007ffa1455a0fe (C:\msys64\mingw64\bin\libclang-cpp.dll+0x225a0fe)</span>
 <span style="color: #339933;">#8 0x00007ffa1455c51e (C:\msys64\mingw64\bin\libclang-cpp.dll+0x225c51e)</span>
 <span style="color: #339933;">#9 0x00007ffa14546465 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x2246465)</span>
<span style="color: #339933;">#10 0x00007ffa1456f248 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x226f248)</span>
<span style="color: #339933;">#11 0x00007ffa14c71988 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x2971988)</span>
<span style="color: #339933;">#12 0x00007ffa13ba2fd9 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x18a2fd9)</span>
<span style="color: #339933;">#13 0x00007ffa13a5c109 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x175c109)</span>
<span style="color: #339933;">#14 0x00007ffa12525ace (C:\msys64\mingw64\bin\libclang-cpp.dll+0x225ace)</span>
<span style="color: #339933;">#15 0x00007ffa13ac3c53 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x17c3c53)</span>
<span style="color: #339933;">#16 0x00007ffa13df1630 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1af1630)</span>
<span style="color: #339933;">#17 0x00007ffa13e752e0 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1b752e0)</span>
<span style="color: #339933;">#18 0x00007ffa13dcbcf8 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1acbcf8)</span>
<span style="color: #339933;">#19 0x00007ffa13e241ef (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1b241ef)</span>
<span style="color: #339933;">#20 0x00007ffa13dd7a37 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1ad7a37)</span>
<span style="color: #339933;">#21 0x00007ffa1447f4ce (C:\msys64\mingw64\bin\libclang-cpp.dll+0x217f4ce)</span>
<span style="color: #339933;">#22 0x00007ffa13212a0f (C:\msys64\mingw64\bin\libclang-cpp.dll+0xf12a0f)</span>
<span style="color: #339933;">#23 0x00007ffa13397034 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1097034)</span>
<span style="color: #339933;">#24 0x00007ffa1397fced (C:\msys64\mingw64\bin\libclang-cpp.dll+0x167fced)</span>
<span style="color: #339933;">#25 0x00007ff7cb1bec93 (C:\msys64\mingw64\bin\clang++.exe+0xec93)</span>
<span style="color: #339933;">#26 0x00007ff7cb1bf0fd (C:\msys64\mingw64\bin\clang++.exe+0xf0fd)</span>
<span style="color: #339933;">#27 0x00007ff7cb1bf8f0 (C:\msys64\mingw64\bin\clang++.exe+0xf8f0)</span>
<span style="color: #339933;">#28 0x00007ffa12ab993d (C:\msys64\mingw64\bin\libclang-cpp.dll+0x7b993d)</span>
<span style="color: #339933;">#29 0x00007ffa0bbc4be9 (C:\msys64\mingw64\bin\libLLVM-22.dll+0x25b4be9)</span>
<span style="color: #339933;">#30 0x00007ffa149328c2 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x26328c2)</span>
<span style="color: #339933;">#31 0x00007ffa14976394 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x2676394)</span>
<span style="color: #339933;">#32 0x00007ffa14975e6c (C:\msys64\mingw64\bin\libclang-cpp.dll+0x2675e6c)</span>
<span style="color: #339933;">#33 0x00007ffa13f2cb79 (C:\msys64\mingw64\bin\libclang-cpp.dll+0x1c2cb79)</span>
<span style="color: #339933;">#34 0x00007ff7cb1ba891 (C:\msys64\mingw64\bin\clang++.exe+0xa891)</span>
<span style="color: #339933;">#35 0x00007ff7cb1c4e4f (C:\msys64\mingw64\bin\clang++.exe+0x14e4f)</span>
<span style="color: #339933;">#36 0x00007ff7cb1b10da (C:\msys64\mingw64\bin\clang++.exe+0x10da)</span>
<span style="color: #339933;">#37 0x00007ff7cb1b1456 (C:\msys64\mingw64\bin\clang++.exe+0x1456)</span>
<span style="color: #339933;">#38 0x00007ffafff1e957 (C:\Windows\System32\KERNEL32.DLL+0x2e957)</span>
<span style="color: #339933;">#39 0x00007ffb0202ad6c (C:\Windows\SYSTEM32\ntdll.dll+0xaad6c)</span>
clang++: error: clang frontend command failed due to <span style="color: #0000ff;">signal</span> <span style="color: black;">&#40;</span>use -v to see invocation<span style="color: black;">&#41;</span>
clang version <span style="color: #cc66cc;">22.1</span>.<span style="color: #cc66cc;">7</span> <span style="color: black;">&#40;</span>https:<span style="color: #808080;">//github.com/msys2/MINGW-packages b8f306ad57e0c8f3f15aed0dc809d7e3e8e2eee9)</span>
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: C:/msys64/mingw64/bin
clang++: note: diagnostic msg:
********************
&nbsp;
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source<span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span> <span style="color: #0000ff;">and</span> associated run script<span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span> are located at:
clang++: note: diagnostic msg: C:/Users/laure/AppData/Local/Temp/main-<span style="color: #cc66cc;">7</span>ffe51.cpp
clang++: note: diagnostic msg: C:/Users/laure/AppData/Local/Temp/main-<span style="color: #cc66cc;">7</span>ffe51.sh
clang++: note: diagnostic msg:
&nbsp;
********************
ninja: build stopped: subcommand failed.</pre></td></tr></table></code><hr />
</div>Cette feature à été introduite en 2020 mais on est en 2026 et elle n'est toujours pas stable. Je sais plus trop quoi faire, soit faire un backend hybride qui supporte des .hpp et des .cpp en + des modules. (Assez lourd à faire pour une centaine de classes), attendre une feature qui ne sera probablement jamais stable car les modules du c++20 nécessitent une révision de toute la chaine de complication alors que c++ utilisais les #include depuis 40 ans. Pour moi il faudrait, mais carrément un nouveau compilateur pour rendre ces features stable, un réfractor ne fonctionnera jamais, ça serait comme essayer d'introduire vulkan dans opengl. Mais je suis incpable de faie un compilateur c++ et encore moins, corriger des bugs d'un compilateur existant.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>Laurent7601</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184778/c-cpp/cpp/langage/nouvelle-feature-modules-cpp20-instabilite-compilos-ca-me-saoule/</guid>
		</item>
		<item>
			<title>Comportements différents dans main() et dans foo()</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184087&amp;goto=newpost</link>
			<pubDate>Thu, 04 Jun 2026 15:54:06 GMT</pubDate>
			<description><![CDATA[Bonjour 
 
Je n'ai jamais eu...]]></description>
			<content:encoded><![CDATA[<div>Bonjour<br />
<br />
Je n'ai jamais eu ce problème. Et sans doute vous non plus !<br />
Une copie du debugging vaudra mieux qu'un long discours.<br />
<img src="https://www.developpez.net/forums/attachments/p676735d1780587804/c-cpp/cpp/langage/comportements-differents-main-foo/foo_bug.jpg/" border="0" alt="Nom : foo_bug.JPG
Affichages : 261
Taille : 103,7 Ko"  style="float: CONFIG" /><br />
<br />
<br />
Comme on peut le constater, la première partie de main() est un copier/coller de foo().<br />
1) la première partie de main() fonctionne bien (voir la console)<br />
2) foo() dysfonctionne complètement. Le debugging montre que<br />
    * pour x = 0 on a (x != 0) = true (cf b1) ce qui donne une boucle infinie à l'exécution.<br />
    * pour j = 48 on a (j &gt; 15) = false (cf b2) ce qui ne stoppe pas la boucle infinie.<br />
<br />
Je n'y comprends rien ! Toute idée est la bienvenue. Merci d'avance.<br />
<br />
PS : en général __builtin_clzll() n'est pas définie en 0. La variable 'j' est donc aléatoire pour x = 0 : la valeur '48' n'est donc pas reproductible. <br />
Il est d'ailleurs très probable que ce bug ne le soit pas non plus !<br />
<br />
Contexte : Windows 10 // Code::Blocs 25.03 // MinGW_w64 Compiler (-O3)</div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p676735d1780587804/c-cpp/cpp/langage/comportements-differents-main-foo/foo_bug.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184087/c-cpp/cpp/langage/comportements-differents-main-foo/</guid>
		</item>
		<item>
			<title><![CDATA[Comment configurer CMake pour utiliser des modules d'une lib qu'on a créée ?]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183850&amp;goto=newpost</link>
			<pubDate>Fri, 22 May 2026 20:53:17 GMT</pubDate>
			<description><![CDATA[Salut, j'essaie d'utiliser...]]></description>
			<content:encoded><![CDATA[<div>Salut, j'essaie d'utiliser des modules cxx d'une lib que j'ai créé avec CMake/Clion et clang mais je ne sais pas comment configurer le projet pour le faire compiler. Mes fichiers de configurations CMake sont sur mon repo : <a rel="nofollow" href="https://github.com/LaurentDuroisin7601/ODFAEG" target="_blank">https://github.com/LaurentDuroisin7601/ODFAEG</a> (branche master) J'ai essayé avec msvc mais ça n'a jamais compilé et sur linux non plus :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td valign="top"><pre style="margin: 0">/usr/bin/cmake --build /home/laurent/odfaeg2-master/TestODFAEG2/cmake-build-debug --target MyGame -j <span style="color: #cc66cc;">4</span>
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/rect.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/rect.ixx:<span style="color: #cc66cc;">4</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.math.vec<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">4</span> | <span style="color: #0000ff;">import</span> odfaeg.math.vec;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/shader.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/shader.ixx:<span style="color: #cc66cc;">6</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.core.inputStream<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">6</span> | <span style="color: #0000ff;">import</span> odfaeg.core.inputStream;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">3</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/vertex.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/vertex.ixx:<span style="color: #cc66cc;">7</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.math.vec<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">7</span> | <span style="color: #0000ff;">import</span> odfaeg.math.vec;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">4</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/buffer.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/buffer.ixx:<span style="color: #cc66cc;">5</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.core.nonCopyable<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">5</span> | <span style="color: #0000ff;">import</span> odfaeg.core.nonCopyable;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
ninja: build stopped: subcommand failed.</pre></td></tr></table></code><hr />
</div>Merci.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>Laurent7601</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183850/c-cpp/cpp/langage/configurer-cmake-utiliser-modules-d-lib-qu-on-creee/</guid>
		</item>
		<item>
			<title>erreur de link definitions multiples</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182047&amp;goto=newpost</link>
			<pubDate>Wed, 11 Feb 2026 12:45:49 GMT</pubDate>
			<description><![CDATA[<div...]]></description>
			<content:encoded><![CDATA[<div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
&nbsp;
/usr/bin/ld : /tmp/ccY4DTYA.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x0</span><span style="color: black;">&#41;</span> : d&eacute;finitions multiples de &laquo; textureDesBlocs &raquo;; /tmp/cc4XFrpo.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x0</span><span style="color: black;">&#41;</span> : d&eacute;fini pour la premi&egrave;re fois ici
/usr/bin/ld : /tmp/ccY4DTYA.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x30</span><span style="color: black;">&#41;</span> : d&eacute;finitions multiples de &laquo; lesBlocs &raquo;; /tmp/cc4XFrpo.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x30</span><span style="color: black;">&#41;</span> : d&eacute;fini pour la premi&egrave;re fois ici
/usr/bin/ld : /tmp/ccY4DTYA.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x60</span><span style="color: black;">&#41;</span> : d&eacute;finitions multiples de &laquo; selection &raquo;; /tmp/cc4XFrpo.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x60</span><span style="color: black;">&#41;</span> : d&eacute;fini pour la premi&egrave;re fois ici
collect2: error: ld returned <span style="color: #cc66cc;">1</span> exit status</pre></td></tr></table></code><hr />
</div>Bien le bonjour !<br />
Ce sont des variables globales.<br />
elles sont déclarées dans un .hpp avec &quot;pragma once&quot;<br />
<br />
et le .hpp est 'include' dans 2 fichiers .cpp...<br />
<br />
Je comprend mal ou se trouve mon erreur...</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>GraineDeDev</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182047/c-cpp/cpp/langage/erreur-link-definitions-multiples/</guid>
		</item>
		<item>
			<title>Utilisation de boost::chrono::process_user_cpu_clock</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181546&amp;goto=newpost</link>
			<pubDate>Sun, 18 Jan 2026 14:34:41 GMT</pubDate>
			<description>Bonjour 
Pour faire un test...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
Pour faire un test de benchmark j'ai pensé utiliser boost::chrono::process_user_cpu_clock.<br />
J'ai la dernière version de boost mais apparemment cela ne suffit pas. Voici un petit programme qui ne compile plus si on décommente le bloc.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;iostream&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;boost/chrono/include.hpp&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> boost;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> boost::chrono;
&nbsp;
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    cout &lt;&lt; <span style="color: #FF0000;">&quot;Hello world!&quot;</span> &lt;&lt; endl;
&nbsp;
<span style="color: #339933;">#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY</span>
  cout&lt;&lt;<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span> YES 1&quot;</span>;
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#ifdef BOOST_CHRONO_HAS_PROCESS_CLOCKS</span>
  cout&lt;&lt;<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span> YES 2&quot;</span>;
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#ifdef BOOST_CHRONO_HAS_THREAD_CLOCK</span>
 cout&lt;&lt;<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span> YES 3&quot;</span>;
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #808080;">/*</span>
<span style="color: #808080;">std::cout &lt;&lt; system_clock::now() &lt;&lt; '\n';</span>
&nbsp;
<span style="color: #808080;">#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; steady_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">#endif</span>
&nbsp;
<span style="color: #808080;">std::cout &lt;&lt; high_resolution_clock::now() &lt;&lt; '\n';</span>
&nbsp;
<span style="color: #808080;">#ifdef BOOST_CHRONO_HAS_PROCESS_CLOCKS</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_real_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_user_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_system_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">#endif</span>
&nbsp;
<span style="color: #808080;">#ifdef BOOST_CHRONO_HAS_THREAD_CLOCK</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; thread_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">#endif</span>
&nbsp;
<span style="color: #808080;">*/</span>
    <span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>J'ai droit au message d'erreur<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			 ... undefined reference to `boost::chrono::system_clock::now()'
			
		<hr />
	</div>
</div>Idem pour les autres.<br />
<br />
Il faut sans doute faire quelque chose en plus  mais quoi ? Merci d'avance pour vos réponses.<br />
<br />
PS : je sais qu'il y a un forum spécial pour boost mais la dernière question date du 08/07/2024 et est restée sans réponse depuis. En outre le fil [Actualité] date de  ... 2012 !<br />
Ne m'en veuillez pas de poser ma question ici.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181546/c-cpp/cpp/langage/utilisation-boost-chrono-process_user_cpu_clock/</guid>
		</item>
		<item>
			<title><![CDATA[Problème de compilation avec l'option O3]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180826&amp;goto=newpost</link>
			<pubDate>Sat, 06 Dec 2025 17:20:22 GMT</pubDate>
			<description>Bonjour 
 
Suite à des...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
<br />
Suite à des discutions sur ce forum, j'ai voulu tester l'option O3 sur un programme qui fonctionnait bien sans. Comme cela ne fonctionnait plus très bien, j'ai fini par cerner le noeud du problème : il semble y avoir un problème quand on introduit une fonction écrite en assembleur. Voila ce que cela donne<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std;
<span style="color: #339933;">#define uint64_t unsigned long long</span>
<span style="color: #339933;">#define uint32_t unsigned long</span>
<span style="color: #808080;">//------------------------------------------</span>
&nbsp;
<span style="color: #0000ff;">void</span> print<span style="color: black;">&#40;</span><span style="color: #0000ff;">uint64_t</span> A<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>, <span style="color: #0000ff;">uint32_t</span> N<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
	cout &lt;&lt;<span style="color: #FF0000;">&quot;{&quot;</span>;
	<span style="color: #0000ff;">for</span> <span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> k = <span style="color: #cc66cc;">0</span>; k &lt; N; ++k<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
		cout&lt;&lt;A<span style="color: black;">&#91;</span>k<span style="color: black;">&#93;</span> &lt;&lt;<span style="color: #FF0000;">&quot;, &quot;</span>;
	<span style="color: black;">&#125;</span>
	cout &lt;&lt;<span style="color: #FF0000;">'</span><span style="color: #800000;">\b</span><span style="color: #FF0000;">'</span>&lt;&lt;<span style="color: #FF0000;">'</span><span style="color: #800000;">\b</span><span style="color: #FF0000;">'</span>&lt;&lt;<span style="color: #FF0000;">&quot;}&quot;</span>&lt;&lt;endl ;
<span style="color: black;">&#125;</span>
;
<span style="color: #808080;">// new T = T + k*A</span>
<span style="color: #808080;">// dim A = 2; dim T = 4;</span>
<span style="color: #808080;">// T[j] + k*A[j] = u[j] + b*v[j]</span>
<span style="color: #0000ff;">void</span> mul_add<span style="color: black;">&#40;</span><span style="color: #0000ff;">uint64_t</span> k, <span style="color: #0000ff;">uint64_t</span> A<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>, <span style="color: #0000ff;">uint64_t</span> T<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #0000ff;">uint64_t</span> c ;
   __asm__ __volatile__<span style="color: black;">&#40;</span>
      <span style="color: #FF0000;">&quot; mov %[A], %%rsi ;&quot;</span>
      <span style="color: #FF0000;">&quot; mov %[T], %%rdi ;&quot;</span>
      <span style="color: #FF0000;">&quot; mov $0, %[c] ;&quot;</span>           <span style="color: #808080;">// carry = 0</span>
      <span style="color: #FF0000;">&quot; mov $2, %%rcx ;&quot;</span>          <span style="color: #808080;">// loop counter (j = 2 - rcx)</span>
   <span style="color: #FF0000;">&quot; 0: ;&quot;</span>
      <span style="color: #FF0000;">&quot; mov (%%rsi), %%rax ;&quot;</span>     <span style="color: #808080;">// rax = A[j]</span>
      <span style="color: #FF0000;">&quot; mul %[k] ;&quot;</span>               <span style="color: #808080;">// k*A[j] = rax + rdx*b</span>
      <span style="color: #FF0000;">&quot; add (%%rdi), %%rax ;&quot;</span>     <span style="color: #808080;">// rax = rax + T[j] = u[j]</span>
      <span style="color: #FF0000;">&quot; adc $0, %%rdx ;&quot;</span>          <span style="color: #808080;">// rdx = rdx + CF = v[j]</span>
      <span style="color: #FF0000;">&quot; add %[c], %%rax ;&quot;</span>        <span style="color: #808080;">// rax = u[j] + carry -&gt; new T[j]</span>
      <span style="color: #FF0000;">&quot; adc $0, %%rdx ;&quot;</span>          <span style="color: #808080;">// rdx = v[j] + CF -&gt; new carry</span>
      <span style="color: #FF0000;">&quot; mov %%rax, (%%rdi) ;&quot;</span>     <span style="color: #808080;">// new T[j] = rax</span>
      <span style="color: #FF0000;">&quot; mov %%rdx, %[c] ;&quot;</span>        <span style="color: #808080;">// new carry = rdx</span>
      <span style="color: #FF0000;">&quot; add $8, %%rsi ;&quot;</span>
      <span style="color: #FF0000;">&quot; add $8, %%rdi ;&quot;</span>
   <span style="color: #FF0000;">&quot; loop 0b ;&quot;</span>
      <span style="color: #FF0000;">&quot; add %[c], (%%rdi) ;&quot;</span>      <span style="color: #808080;">// new T[2] = T[2] + carry</span>
      :
      : <span style="color: black;">&#91;</span>A<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>A<span style="color: black;">&#41;</span>
      , <span style="color: black;">&#91;</span>T<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>T<span style="color: black;">&#41;</span>
      , <span style="color: black;">&#91;</span>k<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>k<span style="color: black;">&#41;</span>
      , <span style="color: black;">&#91;</span>c<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>c<span style="color: black;">&#41;</span>                <span style="color: #808080;">// carry</span>
      : <span style="color: #FF0000;">&quot;cc&quot;</span>, <span style="color: #FF0000;">&quot;memory&quot;</span>, <span style="color: #FF0000;">&quot;%rax&quot;</span>, <span style="color: #FF0000;">&quot;%rcx&quot;</span>, <span style="color: #FF0000;">&quot;%rdx&quot;</span>
   <span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #808080;">//-----------------------------------</span>
<span style="color: #0000ff;">int</span> main<span style="color: black;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
  <span style="color: #0000ff;">uint64_t</span> x = <span style="color: #cc66cc;">2</span>;
  <span style="color: #0000ff;">uint64_t</span> y = <span style="color: #cc66cc;">3755218545365861964</span>ULL;
  <span style="color: #0000ff;">uint64_t</span> n = <span style="color: #cc66cc;">10203806521854051703</span>ULL;
  <span style="color: #0000ff;">uint64_t</span> q = <span style="color: #cc66cc;">17966832521566772153</span>ULL;
  <span style="color: #0000ff;">uint64_t</span> X<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span>x,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, Y<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span>y,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, N<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span>n,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, T<span style="color: black;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>;
&nbsp;
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;X = &quot;;print(X,2);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;Y = &quot;;print(Y,2);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;N = &quot;;print(N,2);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;T = &quot;;print(T,4);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;------------&quot;&lt;&lt;endl;</span>
   mul_add<span style="color: black;">&#40;</span>x,Y,T<span style="color: black;">&#41;</span>;
   cout&lt;&lt;endl&lt;&lt;<span style="color: #FF0000;">&quot;T = &quot;</span>;   print<span style="color: black;">&#40;</span>T,<span style="color: #cc66cc;">4</span><span style="color: black;">&#41;</span>;
&nbsp;
   <span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Je travaille sous Windows avec Code::Blocks (dernière version) et MinGW_w64 comme compilateur (mais j'ai aussi testé avec Clang).<br />
Avec ces données, mul_add calcule 2*3755218545365861964 et place le résultat dans T<br />
Sans O3 le résultat est correct (aussi bien avec Clang qu'avec MinGW_w64.) On obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			T = {7510437090731723928, 0, 0, 0}<br />
<br />
Process returned 0 (0x0)   execution time : 0.042 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>Les problème surviennent avec O3<br />
<br />
 ----------- Avec MinGW_w64   -----------------------<br />
Avec O3  (et toutes les lignes commentées comme ci-dessus), le résultat est correct. On obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			T = {7510437090731723928, 0, 0, 0}<br />
<br />
Process returned 0 (0x0)   execution time : 0.013 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>Mais si on décommente une des lignes (ou plusieurs), on obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Process returned -1073741819 (0xC0000005)   execution time : 0.838 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>----------  Avec Clang -------------<br />
<br />
Avec O3 (et toutes les lignes commentées comme ci-dessus), le résultat est faux. On obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			T = {15020874181463447856, 0, 0, 0}<br />
<br />
Process returned 0 (0x0)   execution time : 0.042 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>De plus, si on décommente une ou plusieurs lignes, on obtient, suivant les cas<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Process returned -1073741819 (0xC0000005)   execution time : 0.509 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>ou bien <br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			terminate called after throwing an instance of 'std::bad_cast'<br />
  what():  std::bad_cast<br />
<br />
Process returned -1073740791 (0xC0000409)   execution time : 0.489 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>Cela est juste un exemple. J'ai obtenu d'autres situations tout aussi bizarres<br />
<ul><li style="">une erreur (0xC0000005) si on place un 'exit()' quelque part mais qui disparaît si on place cet 'exit()' un peu plus loin.</li></ul><br />
<ul><li style="">une variable de boucle réinitialisée, ce qui donne une boucle infinie</li></ul><br />
<ul><li style="">la modification de la valeur d'un constante, etc.</li></ul><br />
<br />
<br />
Merci pour vos lumières.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180826/c-cpp/cpp/langage/probleme-compilation-l-option-o3/</guid>
		</item>
		<item>
			<title>Deux programmes avec des performances paradoxales</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180591&amp;goto=newpost</link>
			<pubDate>Sun, 23 Nov 2025 15:35:59 GMT</pubDate>
			<description>Bonjour 
 
La fonction...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
<br />
La fonction suivante<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">uint64_t</span>  f1<span style="color: black;">&#40;</span><span style="color: #0000ff;">int64_t</span> a, <span style="color: #0000ff;">int64_t</span> p<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #0000ff;">int64_t</span> u = p, v = a, r = <span style="color: #cc66cc;">0</span>, s = <span style="color: #cc66cc;">1</span>;
   <span style="color: #0000ff;">while</span><span style="color: black;">&#40;</span>u != v<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>  
      <span style="color: #0000ff;">if</span><span style="color: black;">&#40;</span>u &gt; v<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
         u -= v;
        <span style="color: #808080;">// code1</span>
      <span style="color: black;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: black;">&#123;</span>
         v -= u;
         <span style="color: #808080;">// code2</span>
      <span style="color: black;">&#125;</span>
   <span style="color: black;">&#125;</span>
   <span style="color: #0000ff;">return</span> s;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>effectue une soustraction et 2 tests de comparaison,  chacun ayant un de temps d'execution équivalent à celui d'une soustraction (rectifiez moi si je me trompe).<br />
J'ai donc pensé à la modifier de la façon suivante<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">uint64_t</span>  f2<span style="color: black;">&#40;</span><span style="color: #0000ff;">int64_t</span> a, <span style="color: #0000ff;">int64_t</span> p<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #0000ff;">int64_t</span> u = p, v = a, r = <span style="color: #cc66cc;">0</span>, s = <span style="color: #cc66cc;">1</span>, w;
   <span style="color: #0000ff;">while</span><span style="color: black;">&#40;</span> <span style="color: black;">&#40;</span>w = u - v<span style="color: black;">&#41;</span> != <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>  
      <span style="color: #0000ff;">if</span><span style="color: black;">&#40;</span>w &gt; <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
         u  = w;
        <span style="color: #808080;">// code1</span>
      <span style="color: black;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: black;">&#123;</span>
         v = -w;
         <span style="color: #808080;">// code2</span>
      <span style="color: black;">&#125;</span>
   <span style="color: black;">&#125;</span>
   <span style="color: #0000ff;">return</span> s;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>A la place de 3 &quot;soustractions&quot;, cette nouvelle fonction effectue une soustraction avec affectation (dans w) et un test du bit de signe (les autres affectations sont les mêmes).<br />
<br />
Je ne m'attendais pas à un gain énorme mais à ma grande surprise f2 est 20 à 25% plus lente que f1.<br />
<br />
Avez vous une explication ?<br />
Merci d'avance.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180591/c-cpp/cpp/langage/programmes-performances-paradoxales/</guid>
		</item>
	</channel>
</rss>
