C++26 est la première version du langage à se faire recaler au vote de l'ISO
Le vote qui devait faire de C++26 la nouvelle version officielle du langage s'est terminé jeudi 22 octobre, et C++26 a été recalé !
Une grande première dans l'histoire du langage : jusqu'ici, toutes ses versions avaient été validées par ce vote.
Depuis C++14, le C++ sort une nouvelle version tous les trois ans, nommée d'après l'année où le comité en termine le texte. Tant que C++26 n'a pas passé ce vote, la dernière version officielle du langage reste C++23. Le comité prépare déjà C++29, prévue trois ans après C++26.
Ce rejet tient à un désaccord qui secoue la communauté du C++ : les contrats.
Cette grosse nouveauté de C++26 permet d'écrire, dans la déclaration d'une fonction, des conditions vérifiées à l'exécution. Bjarne Stroustrup, le créateur du langage, s'oppose lui-même à la version retenue.
Le résultat a été publié samedi par Robert Seacord, qui dirige le comité chargé du langage C à l'Organisation internationale de normalisation (ISO), celle qui publie les normes officielles du C comme du C++. Il y parle d'une journée un peu triste pour la communauté C++, que les contrats ont beaucoup divisée, et espère qu'elle saura se réconcilier pour passer à la suite.
Un pays, une voix
Le C++ est écrit par le comité WG21, un groupe d'experts de l'ISO. Fin mars, à Londres, ce comité avait bouclé le travail technique sur C++26, qui s'annonçait comme la plus grosse mise à jour du langage depuis C++11, il y a quinze ans.
Ce texte apporte trois grosses nouveautés : les contrats, la réflexion, qui permet au code d'examiner ses propres types pendant la compilation (lister les membres d'une classe, par exemple), et une bibliothèque standard plus sûre, qui vérifie notamment qu'on ne lit pas au-delà de la fin d'un tableau.
Le texte était prêt, mais pour devenir une norme officielle de l'ISO, il lui restait à passer le vote des pays.
Le dernier mot revient aux organismes nationaux de normalisation, à raison d'un vote par pays. La France a donc voix au chapitre, par l'AFNOR, qui la représente à l'ISO (le résultat publié ne détaille pas le vote de chaque pays).
Les règles de l'ISO posent deux conditions à l'adoption d'une norme, et C++26 n'en a rempli aucune. Il devait d'abord obtenir les deux tiers des voix des pays qui participent aux travaux, sans compter les abstentions. Il n'en a eu que 60 %, avec 12 pays pour et 8 contre.
La seconde condition porte sur tous les pays qui se sont prononcés, participants ou non : les voix contre ne doivent pas dépasser un quart des votes. Elles ont atteint 41 %.
Le revers est d'autant plus surprenant qu'en mars, les experts du comité, ceux qui écrivent le langage, avaient approuvé ce texte sans difficulté, par 114 voix contre 12.
Les contrats, la nouveauté qui fâche
Les contrats, tels que les décrit le texte de C++26, permettent d'écrire, directement dans la déclaration d'une fonction, ce qu'elle attend de celui qui l'appelle et ce qu'elle garantit en retour. Le programme vérifie ces conditions à l'exécution et, comme le recommande ce texte, s'arrête avec un message d'erreur si l'une d'elles n'est pas respectée.
L'informaticien français Bertrand Meyer a popularisé le principe dans les années 80 avec son langage Eiffel (cocorico), et des langages comme Ada ou D le proposent déjà.
La macro assert fait déjà ce genre de vérification, mais depuis le corps de la fonction, où personne d'autre ne la voit. Les contrats, eux, s'écrivent dans la déclaration, à la vue de ceux qui appellent la fonction, du compilateur, de l'IDE et des outils d'analyse de code.
Timur Doumler, l'un des auteurs de la proposition, donne cet exemple :
T& operator[] (size_t index)
pre (index < size()); // précondition : l'index doit exister
void clear()
post (empty()); // postcondition : le conteneur est vide après l'appel
Après pre et post, un troisième mot-clé, contract_assert, joue le rôle d'assert à l'intérieur du corps de la fonction.
Vous choisissez à la compilation le comportement de toutes ces vérifications. Le programme peut les ignorer, les exécuter en signalant chaque erreur sans s'arrêter, ou les exécuter et s'arrêter à la première erreur.
Le créateur du C++ dans le camp du non
Début août, Bjarne Stroustrup et quatre autres membres du comité ont publié le papier P4334R0, qui présente les contrats comme une menace existentielle pour le C++ (rien que ça). Venant du créateur du langage, ça fait son petit effet.
Ils leur reprochent d'abord de pouvoir être désactivés à la compilation. Selon eux, c'est justement l'approche des années 80 : on active les vérifications pendant les tests et on les retire en production, là où le code tourne pour de vrai.
Ils leur préfèrent des vérifications toujours actives, y compris en production : celles de la bibliothèque standard, par exemple, ne ralentiraient les programmes que de 0,3 %, d'après des mesures faites par Google en production.
Les cinq auteurs jugent aussi les contrats incomplets et pas assez éprouvés : ceux qui portent sur les fonctions virtuelles, par exemple, sont renvoyés à C++29. Ils se disent pourtant favorables à l'idée et proposent une version plus simple, écrite comme une bibliothèque plutôt qu'avec de nouveaux mots-clés ajoutés au langage.
Ils reprochent enfin au comité d'avoir tranché en comptant les voix, sans tenir compte de l'opposition de deux éditeurs de compilateurs, dont Microsoft.
Leur but est de retirer les contrats de C++26, pas de bloquer le reste du texte. Un autre papier, cosigné par l'un d'eux, estime que renvoyer C++26 au comité ne coûterait que quelques mois, et que les contrats pourraient revenir dans C++29 une fois complétés.
En face, seize membres du comité, dont Timur Doumler, leur ont répondu vendredi 23 octobre, une fois le vote terminé, pour demander que les contrats restent dans C++26.
Ils rappellent que les contrats sont en chantier au comité depuis 2004, qu'ils ont été adoptés en février 2025 par 100 voix contre 14, et que chaque objection a été examinée au fil de six réunions, de 2024 à 2026.
Si les contrats sortent de C++26, leurs défenseurs ne croient pas à un retour rapide dans C++29 : une première version des contrats avait déjà été retirée de C++20 en 2019. Il a d'ailleurs fallu six ans pour en faire adopter une version plus modeste.
Ils reprochent surtout à quelques opposants d'être allés plaider leur cause directement auprès des pays pendant le vote, avec le papier de Stroustrup et une pétition publique, lancée par l'un de ses coauteurs. Selon eux, ces opposants cherchent à obtenir des pays ce que le comité leur a refusé.
Bonjour l'ambiance.

Ce que ça change pour les devs C++
Si vous écrivez du C++, rien ne change dans l'immédiat.
Les compilateurs n'attendent pas le feu vert de l'ISO pour implémenter les nouveautés : GCC 16, sorti fin avril, propose déjà les contrats et la réflexion, à titre expérimental. Clang, lui, ne gère encore ni les contrats ni la réflexion.
Le vote devait faire du texte de C++26 une norme officielle. Sa publication par l'ISO, attendue dans la foulée, est donc suspendue.
Le comité se retrouve en novembre à Búzios, au Brésil, où il devra répondre à chacun des commentaires envoyés par les pays avec leur vote.
La décision reviendra ensuite à l'ISO, sur recommandation du comité. Selon les règles de l'ISO, elle peut soumettre un texte révisé à un nouveau vote de huit semaines : les défenseurs des contrats veulent les y garder tels quels, le camp de Stroustrup les en retirer.
Ces règles permettent même d'abandonner C++26 purement et simplement, une issue qu'aucun des deux camps ne réclame.
Pour tester les contrats vous-même, GCC 16 les active avec l'option -std=c++26 (la réflexion demande en plus -freflection), et Compiler Explorer le propose en ligne, sans rien installer.
À propos de l'auteur
Nicolas Lecointre
Fondateur des Joies du Code, je suis l'actualité et la culture des développeurs depuis 2012. Ancien développeur, je me consacre aujourd'hui entièrement au média.
Offres d'emploi
À lire également
Tech Show Paris 2026 : DevOps Live et quatre autres salons pour un seul badge gratuit, les 18 et 19 novembre
Les 18 et 19 novembre 2026, Tech Show Paris souffle sa 10ème bougie à Paris Expo Porte de Versailles, avec la recette qui fait sa marque : un seul badge...
Articles similaires
Margaret Hamilton, la pionnière du code des missions Apollo et du génie logiciel, est décédée à 90 ans
C++26 est officiellement finalisé : la plus grosse mise à jour du langage depuis C++11
Python 3.15 vient de sortir : imports lazy, frozendict et UTF-8 par défaut
Margaret Hamilton, la pionnière du code des missions Apollo et du génie logiciel, est décédée à 90 ans
Mold, le linker ultra-rapide pour Linux, a été réécrit en Rust
Plus de contenu
Quand je lance un build et qu'il échoue à 95%
À chaque fois que je commence à corriger un bug
Quand je me pointe au daily et que je découvre que tout le monde est en vacances sauf moi
Quand je dois reprendre un vieux code que j'avais pas du tout commenté
Quand je tombe sur une boucle infinie
Quand j’obtiens enfin les droits d’admin
Quand on me montre un framework qui va m'éviter des semaines de dev
Quand je rejoins une visio en retard et que personne d'autre n'est connecté
Quand je lance un build et qu'il échoue à 95%
À chaque fois que je commence à corriger un bug
Quand je me pointe au daily et que je découvre que tout le monde est en vacances sauf moi
Quand je dois reprendre un vieux code que j'avais pas du tout commenté
Quand je tombe sur une boucle infinie

