<?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 - C++</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q
C++]]></description>
		<language>fr</language>
		<lastBuildDate>Mon, 26 Oct 2026 16:21:03 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 - C++</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>Pourrons-nous enfin utiliser les modules C++ en 2026 ?</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186190&amp;goto=newpost</link>
			<pubDate>Thu, 15 Oct 2026 15:58:50 GMT</pubDate>
			<description>*Pourrons-nous enfin utiliser...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Pourrons-nous enfin utiliser les modules C++ en 2026 ? par Mathieu Ropert </font></b><br />
<br />
Tous les 6 à 12 mois, j’essaie d’utiliser les modules C++, je me heurte à un obstacle, je m’en plains peut-être sur les réseaux sociaux, puis je passe à autre chose. Même après avoir regardé de nombreuses conférences sur le sujet, il y a toujours quelque chose qui vient tout gâcher. Ma plus grande réussite à ce jour a été de parvenir à utiliser le module VulkanHpp dans ma bibliothèque de rendu, après quoi tout a commencé à dérailler. Mais après avoir de nouveau fait quelques progrès la semaine dernière (et rencontré de nouveaux obstacles), j’ai le sentiment d’avoir suffisamment d’éléments pour dresser un bilan cohérent.<br />
<br />
À titre de mise en garde, je tiens à préciser que j’ai partagé certaines de mes conclusions sur l’état actuel des modules avec d’autres programmeurs C++ et qu’ils n’étaient pas tous d’accord avec moi. Cependant, je pense que les modules souffrent d’un fort problème de « biais d’expert » qui fait que de nombreux contre-arguments ressemblent à « sur ma machine, ça marche » pour des personnes comme moi qui n’ont pas eu beaucoup d’expérience avec ce sujet et n’ont pas suivi de près le processus de normalisation. Je ne prétends pas être un expert en la matière, mais je m’y connais en systèmes de compilation et je pense avoir passé bien plus de temps à essayer de bidouiller les modules dans mes projets que le programmeur C++ moyen ; je pense donc que cet article peut parler au nom de l’utilisateur passionné moyen (ou plutôt de l’utilisateur en devenir).<br />
<br />
Ah, et je me concentre principalement sur MSVC. Je mentionnerai peut-être brièvement Clang ou GCC, mais mon expérience se limite principalement à Windows.<br />
<br />
<b><font size="3">Les aspects simples</font></b><br />
<br />
Contrairement à ce que vous avez peut-être entendu, les cas d’utilisation simples sont assez faciles à mettre en œuvre, à condition de respecter un ensemble strict de contraintes. Par exemple, comme je l’ai mentionné précédemment, j’ai utilisé le module fourni par VulkanHpp dans ma bibliothèque de rendu et cela fonctionne très bien. Ou plus précisément, cela fonctionnait, jusqu’à ce qu’ils modifient quelque chose en amont, ce qui a entraîné un problème lié à l’ensemble de contraintes auquel j’ai fait allusion. Nous reviendrons sur les détails plus tard. En attendant, voici à quoi cela ressemble dans mon CMake :<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 /></div></td><td valign="top"><pre style="margin: 0">add_library<span style="color: black;">&#40;</span> VulkanHppModule <span style="color: black;">&#41;</span>
target_sources<span style="color: black;">&#40;</span> VulkanHppModule PRIVATE
  FILE_SET CXX_MODULES
  BASE_DIRS $<span style="color: black;">&#123;</span>Vulkan_INCLUDE_DIR<span style="color: black;">&#125;</span>
  FILES $<span style="color: black;">&#123;</span>Vulkan_INCLUDE_DIR<span style="color: black;">&#125;</span>/vulkan/vulkan.cppm
<span style="color: black;">&#41;</span>
target_compile_definitions<span style="color: black;">&#40;</span> VulkanHppModule PUBLIC
  VULKAN_HPP_NO_SETTERS
  VULKAN_HPP_NO_CONSTRUCTORS
<span style="color: black;">&#41;</span>
target_link_libraries<span style="color: black;">&#40;</span> VulkanHppModule PUBLIC Vulkan::Vulkan <span style="color: black;">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Je n’ai même pas eu à écrire ces lignes moi-même, elles figuraient dans la documentation du projet. Tout ce que j’ai vraiment dû personnaliser, ce sont les définitions de compilation si nécessaire (dans ce cas précis, j’ai désactivé les setters et les constructeurs pour m’appuyer à la place sur les initialiseurs désignés de C++ 20).<br />
<br />
Et ça a fonctionné : il m’a suffi d’écrire <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span> vulkan_hpp</span> dans ma bibliothèque de rendu pour utiliser les liaisons C++ de Vulkan. Si je n’avais pas réussi à le faire fonctionner, je serais probablement revenu à l’API C de Vulkan avec mes propres wrappers RAII personnalisés, car les temps de compilation avec les <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> standard étaient exécrables. Cela fonctionnait également de manière récursive (là encore, avec des limitations que j’expliquerai plus tard), ce qui signifie que ma bibliothèque de rendu pouvait inclure l’importation de VulkanHpp dans ses en-têtes publics et que cela se transmettait sans problème lorsqu’elle était intégrée à mes projets utilisant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;renderer/renderer.h&gt;</span></span>.<br />
<br />
Vous avez peut-être lu qu’il fallait un peu bricoler CMake pour faire fonctionner les modules, qu’il fallait utiliser des indicateurs ésotériques tels que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">CMAKE_CXX_SCAN_FOR_MODULES</span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API</span>, mais aucun d’entre eux n’est nécessaire pour le moment, à condition d’utiliser une version récente de CMake (idéalement la 4.x, mais les paramètres par défaut devraient fonctionner à partir de la version 3.28).<br />
<br />
Et voilà : en peu de temps, j’avais remplacé les 9 secondes interminables qu’il fallait pour inclure VulkanHpp par un temps négligeable de quelques millisecondes. Je considère cela comme une belle victoire. Mais c’est là que les ennuis commencent…<br />
<br />
<b><font size="3">IntelliNonSense</font></b><br />
<br />
Voici une anecdote amusante : vous pouvez trouver des comptes-rendus de réunions du SG15 datant de 2019 dans lesquels Microsoft affirme que les modules fonctionnent parfaitement en interne pour l’équipe Edge. Et pourtant, si vous ouvrez un projet utilisant des modules avec Visual Studio 2026, vous êtes accueilli par ce message incroyable :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">C++ IntelliSense support <span style="color: #0000ff;">for</span> C+<span style="color: #cc66cc;">+20</span> Modules is currently experimental.</code><hr />
</div><br />
<br />
Eh oui. Ça fait 7 ans, et ils n’arrivent toujours pas à faire en sorte qu’IntelliSense analyse correctement les directives d’importation. Je sais que le serveur de langage est basé sur EDG et non sur VC++, mais franchement, je m’en fiche. C’est une entreprise valant près de 3 000 milliards de dollars au moment où j’écris ces lignes qui nous dit qu’elle n’arrive pas à faire fonctionner une fonctionnalité une décennie après avoir milité pour la normalisation des modules en s’appuyant sur sa propre réussite interne. Je ne sais pas s’ils ont exagéré leurs affirmations à l’époque, s’ils n’ont pas suffisamment financé l’équipe Visual Studio depuis, ou quoi d’autre, mais on ne peut pas me dire que huit ans n’ont pas suffi pour faire fonctionner la coloration syntaxique avec les modules. Et si c’est le cas, alors peut-être y avait-il quelque chose de profondément erroné dans leur proposition et le comité aurait dû demander à voir les justificatifs avant de voter pour.<br />
<br />
Quoi qu’il en soit, voici comment résoudre le problème :<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="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"><span style="color: #339933;">#if defined( __INTELLISENSE__ )</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;vulkan/vulkan.hpp&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;vulkan/vulkan_raii.hpp&gt;</span>
<span style="color: #339933;">#else</span>
<span style="color: #0000ff;">import</span> vulkan_hpp;
<span style="color: #339933;">#endif</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Cela permet à votre compilateur (et au temps d’itération) de rester sur la voie rapide du module, et IntelliSense peut alors continuer à analyser les fichiers d’en-tête en arrière-plan, ce qui vous offre la mise en évidence et l’autocomplétion. Est-ce une astuce ? Absolument. Mais c’est une astuce que j’utilise depuis 6 mois et qui me permet de me concentrer sur autre chose.<br />
<br />
Maintenant que cela est dit, nous pouvons aborder le véritable problème.<br />
<br />
<b><font size="3">Les modules sont un système « tout ou rien »</font></b><br />
<br />
J’ai laissé entendre dans les sections précédentes que les modules fonctionnent si l’on s’en tient à certaines contraintes strictes. Le problème, c’est que ces contraintes ne sont pas négligeables. En gros, les modules fonctionnent selon un principe « tout ou rien ». Si vous commencez à utiliser des bibliothèques via des directives d’importation, vous ne pouvez pas faire en sorte que la même unité de traduction les intègre via des <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span>. Et cela devient rapidement un problème.<br />
<br />
Voici l’exemple le plus simple pour l’illustrer :<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="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 />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// Works, obviously</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;array&gt;</span>
&nbsp;
<span style="color: #808080;">// Works even if &lt;array&gt; is included before and part of the std module</span>
<span style="color: #0000ff;">import</span> std;
&nbsp;
<span style="color: #808080;">// Error, will yield a million &quot;xxx already declared&quot; failures</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;utility&gt;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
En termes simples, une bibliothèque peut à la fois être importée et incluse, à condition que la directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> apparaisse en premier et l’import en second. Je ne sais toujours pas si cela est imposé par la norme ou s’il s’agit d’une limitation d’implémentation, mais c’est quelque chose que j’ai observé directement sur MSVC et dont d’autres ont également fait mention.<br />
<br />
Dans mon cas d’utilisation précédent, cela ne posait pas de problème, car <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">VulkanHpp</span> n’est importé que par ma bibliothèque de rendu, n’importe rien lui-même et n’est utilisé nulle part ailleurs dans mon arborescence de compilation. Malheureusement, les choses ont pris une mauvaise tournure lorsque la version récente a commencé à intégrer la bibliothèque standard via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span> std</span>. Du coup, il y a soudainement une dépendance transitive qui importe une bibliothèque très courante ; je dois donc désormais m’assurer que ma directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span> vulkan_hpp</span> vient après tout autre <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> de la bibliothèque standard. Et comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">vulkan_hpp</span> est utilisé publiquement dans ma bibliothèque de rendu, celle-ci doit désormais toujours être importée en dernier dans chaque unité de traduction. Sinon, j’obtiens un milliard d’erreurs de compilation liées à des redéclarations ou redéfinitions.<br />
<br />
<b><font size="3">« Il suffit de passer aux modules »</font></b><br />
<br />
La solution recommandée, m’a-t-on dit, consiste à tout transférer dans des modules. Ou du moins, si une bibliothèque commence à utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span> std</span>, à modifier toutes les autres bibliothèques que j’utilise pour qu’elles n’utilisent également que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span> std</span>. Dans le cas de mon projet jouet, cela concernerait au moins TBB et fastgltf. Ironiquement, cela ne semble pas avoir d’impact sur les bibliothèques C++ qui s’appuient uniquement sur la bibliothèque standard C (je pense que ce serait le cas si j’utilisais <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span> std.compat</span> ?). C’est regrettable que cela donne raison aux auteurs de bibliothèques qui refusent d’utiliser la STL.<br />
<br />
Notez que j’ai parlé de « modifier », et non pas simplement d’« activer un bouton ». Car bien que C++20 ait six ans, pratiquement aucune bibliothèque C++ ne propose de définition de module. Boost ne propose des modules que pour quelques bibliothèques triées sur le volet. Les affirmations que j’ai lues selon lesquelles Catch2 fournirait un module semblent n’avoir été qu’une hallucination de l’IA. La seule grande bibliothèque que j’ai pu trouver est <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fmt</span>, qui est une bonne bibliothèque, mais honnêtement, si vous disposez de la prise en charge de C++20, vous avez de toute façon déjà <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;format&gt;</span> à votre disposition.<br />
<br />
Et bien sûr, chaque bibliothèque qui décide de prendre en charge les modules doit proposer une forme de compilation double, car tous ses clients n’utilisent pas encore les modules. Et pour chacune de ses propres dépendances, elle doit décider si elle les intègre via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span>, via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span></span> ou si elle laisse l’utilisateur les configurer (mon opinion actuelle est que la version module devrait toujours utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span></span> et ne pas proposer d’option, afin d’éviter l’enfer combinatoire).<br />
<br />
<b><font size="3">Prise en charge de la compilation double</font></b><br />
<br />
J’ai ensuite essayé de prendre en charge la compilation double pour ma bibliothèque de rendu, et ce n’est pas tout à fait une mince affaire.<br />
<br />
Tout d’abord, comme suggéré précédemment, il faut basculer des #include vers des import lors de la compilation/l’analyse en mode module. Cela implique généralement d’ajouter une définition et de faire quelques manipulations autour de chaque directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> :<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="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 />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#ifndef RENDERER_MODULE</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;array&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;utility&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;vector&gt;</span>
<span style="color: #339933;">#else</span>
<span style="color: #0000ff;">import</span> std;
<span style="color: #339933;">#endif</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Pour les bibliothèques qui ne comportent qu’un seul fichier d’en-tête, ce n’est pas si grave, mais pour les bibliothèques plus complexes composées de plusieurs fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cpp</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.h</span>, cela s’apparente un peu plus à une chasse aux œufs de Pâques. Dans ma branche POC actuelle, j’ai fini par supprimer toutes les directives <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> et les regrouper dans un seul fichier que je peux activer ou désactiver selon que l’on utilise ou non les modules. Cela ralentit la compilation sans modules, car désormais toutes mes unités de traduction chargent une multitude d’en-têtes dont elles n’ont pas personnellement besoin (je te regarde, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;filesystem&gt;</span> &#128544;).<br />
<br />
Ensuite, il faut composer avec le fait que les directives de module ne peuvent pas être exclues via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#ifdef</span></span>. C’est une contrainte de conception. Je ne sais pas exactement pourquoi, mais cela constitue une erreur grave selon la norme. Ce qui signifie que si vous avez un fichier d’implémentation <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cpp</span>, vous ne pouvez pas utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#ifdef</span></span> et ses dérivés pour le déclarer de manière conditionnelle comme faisant partie d’un module. Il reste donc trois options : un hack, un autre hack ou toujours compiler votre bibliothèque en tant que module.<br />
<br />
Commençons par la première astuce. Je ne l’apprécie pas, mais elle montre en quelque sorte la futilité d’essayer de restreindre l’utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#ifdef</span></span> dans la spécification. En effet, cette restriction ne s’applique pas à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span>. Nous pouvons donc simplement la contourner en dupliquant chaque fichier d’implémentation :<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="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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// device_module.cpp</span>
<span style="color: #0000ff;">module</span> renderer;
<span style="color: #339933;">#define RENDERER_MODULE</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;device.cpp&gt;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Cela implique d’utiliser un ensemble différent de fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cpp</span>, que vous compiliez ou non en tant que module, et d’avoir un fichier de liaison supplémentaire pour chaque fichier d’implémentation, mais cela fonctionne. Une autre suggestion, proposée par Daniela Engert, consistait à abandonner complètement la compilation séparée de tous les fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cpp</span> et, à la place, à les intégrer tous dans la section <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">module</span> :<span style="color: #0000ff;">private</span>;</span> de la définition du module à l’aide de directives <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> :<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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">export</span> <span style="color: #0000ff;">module</span> renderer;
<span style="color: #0000ff;">export</span> <span style="color: black;">&#123;</span>
    <span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;renderer/renderer.h&gt;</span>
<span style="color: black;">&#125;</span>
<span style="color: #0000ff;">module</span> :<span style="color: #0000ff;">private</span>;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;renderer/bindless.cpp&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;renderer/buffer.cpp&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;renderer/command_buffer.cpp&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;renderer/device.cpp&gt;</span>
<span style="color: #808080;">// ...</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Certains de mes lecteurs pourraient objecter : « mais cela placerait toute l’implémentation dans la même unité de traduction, comme dans les compilations Unity ». Ce serait exact. C’est pourquoi je préfère ne pas utiliser cette solution non plus. J’ai déjà eu affaire à des compilations Unity par le passé et je les considère toujours comme un « hack » qui va à l’encontre des attentes traditionnelles concernant les déclarations <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">static</span></span> et les espaces de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">namespace</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span></span>.<br />
<br />
<b><font size="3">Des modules presque toujours ?</font></b><br />
<br />
J’ai donc choisi de toujours compiler ma bibliothèque sous forme de module. De cette manière, je peux placer des déclarations de module dans mes fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cpp</span> sans problème. L’astuce consiste à utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C++&quot;</span></span> de C++20. De la même manière que les noms déclarés avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C&quot;</span></span> utilisent une liaison C rétrocompatible et un mangling de noms, le fait d’encadrer les déclarations <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">export</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span></span> avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C++&quot;</span></span> génère des symboles utilisant une ABI compatible avec les déclarations <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> (par défaut, avec les modules, chaque symbole est préfixé par le nom de son module, ce qui rend impossible sa détection par l’éditeur de liens dans des contextes non modulaires).<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="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 />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">export</span> <span style="color: #0000ff;">module</span> renderer;
<span style="color: #808080;">// Don't mangle as a module for backward compatibility with non modules includes</span>
<span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C++&quot;</span>
<span style="color: black;">&#123;</span>
	<span style="color: #0000ff;">export</span> <span style="color: black;">&#123;</span>
        <span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;renderer/renderer.h&quot;</span>
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
De cette manière, la bibliothèque n’a pas besoin d’être compilée différemment selon que les utilisateurs recourent à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span></span> ou à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span>. Cela ne pose évidemment problème que pour les bibliothèques qui produisent des symboles exportés. Les bibliothèques composées uniquement d’en-têtes n’ont pas à s’en soucier.<br />
<br />
Le fait de n’avoir qu’une seule version de compilation signifie que la bibliothèque n’utilise plus sa propre variante <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span>. Il est conseillé de conserver quelques tests utilisant la bibliothèque à la fois via le chemin <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">import</span></span> et via le chemin <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#include</span></span> tant que vous prenez en charge les deux (ce qui, je suppose, prendra un certain temps compte tenu du rythme d’adoption des modules).<br />
<br />
<b><font size="3">Alors, dois-je utiliser les modules ?</font></b><br />
<br />
Le passage aux modules implique un coût initial important. Devoir faire passer toutes vos dépendances aux modules représente une charge de travail non négligeable et, malheureusement, le soutien des responsables de bibliothèques est pour l’instant limité. Même ceux qui déclarent utiliser les modules semblent, pour l’instant, recourir à des fourches de leurs bibliothèques tierces. Je ne sais pas s’ils n’ont pas eu envie de contribuer ou de maintenir des correctifs, ou s’ils ont soumis des correctifs qui ont été rejetés, mais cela n’est pas très encourageant. Les sondages de Meeting C++ ne montrent pas un taux d’adoption élevé pour une fonctionnalité vieille de six ans. Il s’agit peut-être d’un problème de l’œuf et de la poule (personne ne passe aux modules en raison du manque de prise en charge des bibliothèques, et les responsables de bibliothèques ne s’en préoccupent pas en raison du manque d’utilisateurs des modules).<br />
<br />
J’envisage de proposer des correctifs pour les bibliothèques que j’utilise, mais j’avoue que même après avoir écrit cet article, je ressens encore un peu le syndrome de l’imposteur et je me demande si ma contribution serait utile. Il y a si peu d’expertise, d’expérience et de documentation sur les modules qu’il n’est pas évident de savoir ce qui constitue ou non une bonne pratique. J’ai compris le fonctionnement des nouveaux mots-clés principalement par essais et erreurs, ce qui me fait penser que la plupart des projets ne disposeront pas d’un relecteur qualifié pour évaluer la qualité d’un correctif proposé.<br />
<br />
En attendant, la solution de facilité consiste à faire comme je l’ai fait au départ avec VulkanHpp et à limiter l’utilisation des modules aux bibliothèques qui sont lourdes à analyser mais faciles à placer en fin de chemin #include/import pour un gain rapide ; malheureusement, cela s’effondre rapidement à grande échelle en raison du facteur viral.<br />
<br />
Addendum : Jens Weller m’a signalé l’existence de « Are We Modules Yet ? », un site web qui répertorie les projets proposant des modules. Curieusement, fastgltf fournit bien un module, mais celui-ci n’est ni compilé ni installé par vckpg, ce qui explique que je ne l’aie pas vu. Je pense que les bibliothèques devraient toujours ajouter les définitions de modules à leur liste d’installation plutôt que de les dissimuler derrière un paramètre de compilation, afin que cela ne devienne pas un problème pour le gestionnaire de paquets.<br />
<br />
<i>Licensed under CC BY-NC-SA 4.0</i><br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://mropert.github.io/2026/04/13/modules_in_2026/" target="_blank">Can we finally use C++ Modules in 2026?</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://cpp.developpez.com/actu/376082/Cplusplus26-Concept-et-templates-variables-comme-parametre-template-par-Sandor-Dargo/" target="_blank">C++26 : Concept et templates variables comme paramètre template, par Sandor Dargo</a><br />
<br />
:fleche: <a href="https://cpp.developpez.com/actu/352226/Le-Cplusplus-doit-etre-du-Cplusplus-une-opinion-qui-est-le-fruit-de-23-annees-d-experience-en-Cplusplus-par-David-Sankel/" target="_blank">Le C++ doit être du C++ : Une opinion qui est le fruit de 23 années d'expérience en C++, par David Sankel</a><br />
<br />
:fleche: <a href="https://cpp.developpez.com/actu/381618/Cplusplus26-est-pret-la-nouvelle-norme-apporte-des-ameliorations-en-matiere-de-securite-memoire-et-serait-la-version-la-plus-aboutie-depuis-Cplusplus11-Elle-introduit-les-contrats-et-la-bibliotheque-std-execution/" target="_blank">C++26 est prêt : la nouvelle norme apporte des améliorations en matière de sécurité mémoire et serait la version « la plus aboutie » depuis C++11. Elle introduit les contrats et la bibliothèque std::execution</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>Mathieu Ropert</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186190/c-cpp/cpp/pourrons-enfin-utiliser-modules-cpp-2026-a/</guid>
		</item>
		<item>
			<title>Compteur compile time qui ne fonctionne plus. (gcc à changé ses règles ?)</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186125&amp;goto=newpost</link>
			<pubDate>Tue, 13 Oct 2026 08:36:18 GMT</pubDate>
			<description><![CDATA[Salut un membre m'avait codé...]]></description>
			<content:encoded><![CDATA[<div>Salut un membre m'avait codé un compteur compile time mais ici il ne fonctionne plus il reste toujours à 0 : <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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#ifndef ODFAEG_COMPILETIME_COUNTER</span>
<span style="color: #339933;">#define ODFAEG_COMPILETIME_COUNTER</span>
<span style="color: #0000ff;">namespace</span> odfaeg <span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">namespace</span> core <span style="color: black;">&#123;</span>
        <span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">auto</span>, <span style="color: #0000ff;">auto</span>&gt;
        <span style="color: #0000ff;">struct</span> ADLType <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">friend</span> <span style="color: #0000ff;">consteval</span> <span style="color: #0000ff;">auto</span> ADLFunc<span style="color: black;">&#40;</span>ADLType, <span style="color: #0000ff;">auto</span>...<span style="color: black;">&#41;</span>;
        <span style="color: black;">&#125;</span>;
&nbsp;
        <span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">auto</span> InstanceIdentifier, <span style="color: #0000ff;">auto</span> x&gt;
        <span style="color: #0000ff;">struct</span> InjectDefinitionForADLFunc <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">friend</span> <span style="color: #0000ff;">consteval</span> <span style="color: #0000ff;">auto</span> ADLFunc<span style="color: black;">&#40;</span>ADLType&lt;InstanceIdentifier, x&gt;, <span style="color: #0000ff;">auto</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>;
&nbsp;
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">auto</span> InstanceIdentifier, <span style="color: #0000ff;">auto</span> x = <span style="color: #cc66cc;">0</span>, <span style="color: #0000ff;">auto</span> = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>&gt;
        <span style="color: #0000ff;">constexpr</span> <span style="color: #0000ff;">auto</span> ExtractThenUpdateCurrentState<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>-&gt;<span style="color: #0000ff;">decltype</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">constexpr</span> <span style="color: black;">&#40;</span><span style="color: #0000ff;">requires</span> <span style="color: black;">&#123;</span> ADLFunc<span style="color: black;">&#40;</span>ADLType&lt;InstanceIdentifier, x&gt;<span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>; <span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
                <span style="color: #0000ff;">return</span> ExtractThenUpdateCurrentState&lt;InstanceIdentifier, x + <span style="color: #cc66cc;">1</span>&gt;<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
            <span style="color: #0000ff;">else</span> 
                InjectDefinitionForADLFunc&lt;InstanceIdentifier, x&gt;<span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
            <span style="color: #0000ff;">return</span> x;
        <span style="color: black;">&#125;</span>        
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">auto</span> InstanceIdentifier, <span style="color: #0000ff;">auto</span> x = <span style="color: #cc66cc;">0</span>, <span style="color: #0000ff;">auto</span> = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>&gt;
        <span style="color: #0000ff;">constexpr</span> <span style="color: #0000ff;">auto</span> ExtractCurrentState<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>-&gt;<span style="color: #0000ff;">decltype</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">return</span> x;
        <span style="color: black;">&#125;</span>
        <span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">auto</span> InstanceIdentifier, <span style="color: #0000ff;">auto</span> x = <span style="color: #cc66cc;">0</span>, <span style="color: #0000ff;">auto</span> = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>&gt;
        <span style="color: #0000ff;">constexpr</span> <span style="color: #0000ff;">auto</span> ResetCurrentState<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>-&gt;<span style="color: #0000ff;">decltype</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
        <span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">auto</span> InstanceIdentifier = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>&gt;
        <span style="color: #0000ff;">struct</span> Compteur <span style="color: black;">&#123;</span>
            <span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">auto</span> x = ExtractThenUpdateCurrentState&lt;InstanceIdentifier&gt;<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>&gt;
            <span style="color: #0000ff;">consteval</span> <span style="color: #0000ff;">auto</span> next<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> <span style="color: #0000ff;">return</span> x; <span style="color: black;">&#125;</span> 
            <span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">auto</span> x = ExtractCurrentState&lt;InstanceIdentifier&gt;<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>&gt;
            <span style="color: #0000ff;">consteval</span> <span style="color: #0000ff;">auto</span> value<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> <span style="color: #0000ff;">return</span> x; <span style="color: black;">&#125;</span>  
            <span style="color: #0000ff;">template</span> &lt;<span style="color: #0000ff;">auto</span> x = ResetCurrentState&lt;InstanceIdentifier&gt;<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>&gt;
            <span style="color: #0000ff;">void</span> reset<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span>
&nbsp;
            <span style="color: black;">&#125;</span>
        <span style="color: black;">&#125;</span>;
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>
<span style="color: #339933;">#endif</span></pre></td></tr></table></code><hr />
</div> le requires on dirait me revoie toujours false pour l'ADL fonction.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>Laurent7601</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186125/c-cpp/cpp/compteur-compile-time-ne-fonctionne-plus-gcc-change-regles/</guid>
		</item>
		<item>
			<title><![CDATA[Différence à l'usage entre une bibliothèque dynamique et une bibliothèque d'importation !]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185431&amp;goto=newpost</link>
			<pubDate>Wed, 02 Sep 2026 13:18:02 GMT</pubDate>
			<description>Salut à tous. 
 
Quel est la...</description>
			<content:encoded><![CDATA[<div>Salut à tous.<br />
<br />
Quel est la différence à l'usage entre une bibliothèque dynamique et une bibliothèque d'importation !<br />
Je parle aussi bien du 'C' que du 'C++'.<br />
Je trouve que l'usage de la bibliothèque d'importation est très proche de celle de la bibliothèque statique.<br />
Quand à la bibliothèque dynamique, je trouve cela plutôt lourd pour un usage non pertinent.<br />
<br />
Peut on me donner un exemple d'usage où la bibliothèque dynamique serait mieux que la bibliothèque d'importation ?</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>Artemus24</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185431/c-cpp/cpp/difference-l-usage-entre-bibliotheque-dynamique-bibliotheque-d-importation/</guid>
		</item>
		<item>
			<title><![CDATA[L'IA va t elle remplacer le développement en C++?]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185139&amp;goto=newpost</link>
			<pubDate>Thu, 13 Aug 2026 18:57:55 GMT</pubDate>
			<description>Bonjour 
Je poste ici car...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
Je poste ici car l'impact de l'IA varie en fonction du langage, et j'aurai aimé connaitre l'impact sur la communauté C en particulier.<br />
Sur des forums généralistes, je lis souvent que les devs n'ont aujourd'hui plus besoin de programmer.<br />
Quand j'ai demandé &quot;L'IA va-t-elle remplacer les devs&quot; on m'a répondu: &quot;ta question a 3 ans de retard hein, elle a déjà remplacé 90% des devs. Perso ça fait 6 mois que je ne code plus&quot;.<br />
<br />
Qu'en est il réellement? Avez vous senti un changement notable? Le métier de développeur C est il mort? <br />
J'ai une formation en développement et j'ai toujours rêvé de faire du C, mais voir ce qui se trame me rend perplexe sur mon futur métier...<br />
<br />
Merci de votre attention</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>Maubius</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185139/c-cpp/cpp/l-ia-va-t-remplacer-developpement-cpp/</guid>
		</item>
		<item>
			<title>Mod pour MAME</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183198&amp;goto=newpost</link>
			<pubDate>Tue, 14 Apr 2026 08:02:00 GMT</pubDate>
			<description>Bonjour, 
 
Je souhaite...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
Je souhaite ajouter une fonctionnalité à MAME:<br />
Lorsque un jeux de tuiles est affiché (touche F4), ajouter la possibilité de le sauvegarder dans un fichier PNG via la touche F12) tout en gardant les informations de transparence.<br />
<br />
J'ai repris le code source de Steve Moody (<a rel="nofollow" href="https://eab.abime.net/showthread.php?t=41610&amp;page=3" target="_blank">https://eab.abime.net/showthread.php?t=41610&amp;page=3</a>) pour l'intégrer au code source,<br />
voir la classe gfx_writer sur mon github (<a rel="nofollow" href="https://github.com/Deedolith/mame-gfxsave/tree/refs/heads/gfx-save/src/frontend/mame/ui" target="_blank">https://github.com/Deedolith/mame-gf...ontend/mame/ui</a>).<br />
<br />
Cela fonctionne bien, par contre je n'ai pas compris comment détecter les pixels transparents.<br />
La documentation de MAME indique comment gérer la transparence, mais d'après ce que j'ai compris, cela concerne l'affichage sur un écran, aucune idée si cela peut être adapté pour un bitmap:<br />
<a rel="nofollow" href="https://wiki.mamedev.org/index.php?title=Using_MAME%27s_tilemap_system" target="_blank">https://wiki.mamedev.org/index.php?t...tilemap_system</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>deedolith</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183198/c-cpp/cpp/mod-mame/</guid>
		</item>
		<item>
			<title>Avis sur vieux livres C++ offerts</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182653&amp;goto=newpost</link>
			<pubDate>Sun, 15 Mar 2026 14:34:00 GMT</pubDate>
			<description>Bonjour à tous, 
Un voisin...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
Un voisin qui déménage m'a offert sa collection de livres d'informatiques. Comme j'ai un projet personnel en C++ cette année, je souhaite votre avis sur la pertinence des ces ouvrages pas particulièrement récents :<br />
<br />
<ul><li style="">C++ en action de D. Ryan Stephens  (2006)</li><li style="">Professional Multicore Programming: Design and Implementation for C++ Developers (2008)</li><li style="">C++ Template Metaprogramming de David Abrahams (2004)</li><li style="">Beyond the C++ Standard Library: An Introduction to Boost (2005)</li><li style="">undle of Algorithms in C++, Parts 1-5: Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms (2002)</li><li style="">Modern C++ Design: Generic Programming and Design Patterns Applied (2001)</li><li style="">Secure Programming Cookbook for C and C++ (2003)</li><li style="">The Boost Graph Library: User Guide and Reference Manual (2002)</li><li style="">La programmation orientée de Hugues Bersini (2008)</li><li style="">Standards de programmation en C++ de Herb SUTTER et Andrei ALEXANDRESCU</li></ul><br />
J'ai un peu étudié le C++ il y a longtemps, je ne sais pas si les librairies, et la pratique du C++ ont tellement évoluées que ces livres sont périmés ou à éviter. Par contre pour mon projet j'aurai à travailler sur des graphes.<br />
Votre avis ?</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>Quami</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182653/c-cpp/cpp/avis-vieux-livres-cpp-offerts/</guid>
		</item>
		<item>
			<title><![CDATA[Incompréhension erreur "invalid conversion from 'DWORD' {aka 'long unsigned int'} to 'DWORD* (*)()"]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181073&amp;goto=newpost</link>
			<pubDate>Sat, 20 Dec 2025 15:35:37 GMT</pubDate>
			<description><![CDATA[Bonjour j'ai un problème de...]]></description>
			<content:encoded><![CDATA[<div>Bonjour j'ai un problème de compilation.<br />
<br />
J'ai isolé mon problème avec le petit source suivant :<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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;windows.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">void</span> ToCallVoid<span style="color: black;">&#40;</span>DWORD <span style="color: #0080ff;">errno</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span> <span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> Caller<span style="color: black;">&#40;</span>DWORD <span style="color: #0080ff;">errno</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
	ToCallVoid<span style="color: black;">&#40;</span><span style="color: #0080ff;">errno</span><span style="color: black;">&#41;</span>;
	<span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> wmain <span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">wchar_t</span> **argv, <span style="color: #0000ff;">wchar_t</span> **envp<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</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><br />
<br />
J'ai l'erreur suivante :<br />
<br />
<div style="margin: 20px; margin-top: 5px"><pre class="alt2" style="border: 1px inset; padding: 5px">.\src\testp.cpp:6:20: error: invalid conversion from 'DWORD' {aka 'long unsigned int'} to 'DWORD* (*)()' {aka 'long unsigned int* (*)()'} [-fpermissive]
    6 |         ToCallVoid(errno);
      |                    ^~~~~
      |                    |
      |                    DWORD {aka long unsigned int}
.\src\testp.cpp:3:23: note: initializing argument 1 of 'void ToCallVoid(DWORD* (*)())'
    3 | void ToCallVoid(DWORD errno) { }
      |                       ^</pre></div>J'utilise : <b>c++.exe</b> (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r3) 15.2.0<br />
<br />
J'ai essayé différentes options de compilation mais toujours le même résultat.<br />
Le plus simple : <b>c++.exe -o .\src\testp.cpp.obj -c .\src\testp.cpp</b><br />
donne bien la même erreur.<br />
<br />
Quelqu'un a-t-il une explication ?</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>jmblib</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181073/c-cpp/cpp/incomprehension-erreur-invalid-conversion-from-dword-aka-long-unsigned-int-to-dword/</guid>
		</item>
		<item>
			<title>Problème SDL_ttf et Code Blocks</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180754&amp;goto=newpost</link>
			<pubDate>Wed, 03 Dec 2025 10:08:11 GMT</pubDate>
			<description><![CDATA[Bonjour, 
J'utilise Code...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
J'utilise Code Blocks 20.03 (compilateur GNU GCC compiler) avec la librairie graphique SDL2 (SDL-devel-2.0.3-mingw). Je veux faire de l'affichage de texte et utilise SDL2_ttf-devel-2.0.18-mingw.<br />
Mes 3 premières lignes sont #include &lt;SDL2/SDL.h&gt;  #include &lt;SDL2/SDL_ttf.h&gt;  ou #include &lt;SDL_ttf.h&gt; et #include &lt;stdio.h&gt;.<br />
Quand je click sur Build pour vérifier mon programme j'ai &quot;fatal erreur: SDL.h : No such file or directory&quot; que cela soit dans la prog main.cpp ou SDL_ttf.h alors que ce dernier fichier est dans : Project - Build options - Projet Texte -linker settings (dans plusieurs endroits) comme le montre le fichier Projet Texte linker settings.jpg.<br />
J'ai aussi mes 3 fichiers comme le montre Projet Texte Search dir.jpg que cela sur linker avec lib ou compiler avec include et mon fichier SDL2.dll est mis dans le répertoire de mon projet.<br />
Est-ce que je pourrais avoir une solution pour résoudre ce problème?<br />
Merci.</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/p672309d1764756374/c-cpp/cpp/probleme-sdl_ttf-code-blocks/projet-texte-linker-setting.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p672310d1764756390/c-cpp/cpp/probleme-sdl_ttf-code-blocks/projet-texte-search-dir.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>slmh1</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180754/c-cpp/cpp/probleme-sdl_ttf-code-blocks/</guid>
		</item>
		<item>
			<title>sstream et saisie cin</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180677&amp;goto=newpost</link>
			<pubDate>Fri, 28 Nov 2025 00:26:33 GMT</pubDate>
			<description>Bonjour, 
 
pourquoi b est...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
pourquoi b est toujours à 0 ?<br />
<br />
une idée&#8239;?<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 /></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;string&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;sstream&gt;</span>
&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>
  std::cout&lt;&lt;<span style="color: #FF0000;">&quot;a= &quot;</span>;
  <span style="color: #0000ff;">int</span> a;
  std::string saisie;
  std::stringstream geek;
  std::cin&gt;&gt;saisie;
  geek&lt;&lt;saisie;
  geek&gt;&gt;a;
  geek.flush<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
  std::cout&lt;&lt;<span style="color: #FF0000;">&quot;b= &quot;</span>;
  <span style="color: #0000ff;">int</span> b;
  std::cin&gt;&gt;saisie;
  geek&lt;&lt;saisie;
  geek&gt;&gt;b;
  std::cout&lt;&lt;a&lt;&lt;<span style="color: #FF0000;">' '</span>&lt;&lt;b&lt;&lt;std::endl;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</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 /></div></td><td valign="top"><pre style="margin: 0">$ ./a.out 
a= <span style="color: #cc66cc;">56</span>
b= <span style="color: #cc66cc;">12</span>
<span style="color: #cc66cc;">56</span> <span style="color: #cc66cc;">0</span></pre></td></tr></table></code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f19/c-cpp/cpp/">C++</category>
			<dc:creator>emmesse</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180677/c-cpp/cpp/sstream-saisie-cin/</guid>
		</item>
	</channel>
</rss>
