Analyse: Bei C++ ist das Undenkbare geschehen – C++26 wurde abgelehnt
Am 23. Oktober ist das Undenkbare geschehen. Eigentlich war es eine reine Formsache: C++26 stand den National Bodies (NB) der ISO zur Wahl. Annahme, Ablehnung oder Enthaltung sind stets die Optionen. Kommentare sind ebenfalls erlaubt. Seit 1998 lief dieser Prozess geräusch- und reibungslos. Nicht so am 23. Oktober 2026. Nach zwölfwöchiger Abstimmungsphase liegt das Resultat vor: Disapproved!
Andreas Fertig ist erfahrener C++-Trainer und Berater, der weltweit Präsenz- sowie Remote-Kurse anbietet. Er engagiert sich im C++-Standardisierungskomitee und spricht regelmäßig auf internationalen Konferenzen. Mit C++ Insights (https://cppinsights.io) hat er ein international anerkanntes Tool entwickelt, das C++-Programmierenden hilft, C++ noch besser zu verstehen.
Ich möchte an dieser Stelle erwähnen, dass ich Mitglied des C++-Standardisierungskomitees bin und mit Kolleginnen und Kollegen die Stimme für Deutschland bilde. Die ISO-Regeln besagen, dass verschiedene Abstimmungen ISO-intern sind und Ergebnisse beziehungsweise deren Zusammensetzung nicht veröffentlicht werden dürfen. Dieser Artikel ist meine persönliche Sichtweise.
Der Stand
Soweit mir bekannt, ist es das erste Mal in der Geschichte von C++, dass eine DIS-Abstimmung (Draft International Standard) mit Nein endete. Bei meiner Abfrage im ISO-System konnte ich nur eine andere DIS-Abstimmung finden, die nicht positiv verabschiedet wurde: ISO/IEC DIS 26926 C++/CLI Language Specification vom 9. August 2006. Eventuell reichen meine Rechte für die Suche nicht aus, um alles zu sehen, aber es sollten alle ISO-Programmiersprachen sichtbar sein. Das traurige Ende von ISO/IEC DIS 26926: Das Projekt wurde gestoppt. Dies vorab, um die Tragweite dieser Abstimmung klarzumachen.
Im Folgenden werde ich verschiedene Termini aus dem ISO-Alltag verwenden. Auf der Seite zu den Prozeduren des C++-Komitees gibt es einen Überblick über die verschiedenen Stufen eines ISO-Standards. DIS ist die vorletzte. Wie die Übersicht ebenfalls zeigt, ist eine Zweidrittelmehrheit notwendig. Zudem darf höchstens ein Viertel der abgegebenen Stimmen auf Nein lauten. Diese Hürde nahm C++26 nicht.
Aus den von den NBs abgegebenen Kommentaren lässt sich der Grund für das Nein recht gut ablesen: Contracts oder Verträge. Hier ist eine Anzahl von NBs, vereinfacht gesagt, der Ansicht, dass dieses Feature bisher nicht in einem Release-fähigen Zustand ist.
Der Prozess
Jetzt wird es kompliziert. Das C++-Standardisierungskomitee, auch bekannt als WG21, folgt den ISO-Regeln, hat aber auch einige zusätzliche Regeln. Eine lautet(e), dass Meinungen immer dann angehört werden, wenn es neue Informationen gibt. Wenn das Komitee eine Meinung hört und nach einer Abstimmung ein Feature dennoch nicht wie gewünscht umsetzt, respektiert die Person das Ergebnis und die Tatsache, dass viele andere Leute anderer Meinung sind.
Die Abstimmung auf NB-Level kann sich aber auch aus anderen Personen zusammensetzen, und es ist den National Bodies freigestellt, anders abzustimmen.
Der bisherige Modus war, dass NBs nur dann gegen einen Standard stimmen, wenn es neue Informationen gibt oder Fehler im Prozess oder Ähnlichem erkannt wurden. Das hat sich am 23. Oktober 2026 geändert.
Die Situation ist kompliziert: Die National Bodies, die C++26 ohne Contracts wollen, argumentieren, dass es neue Informationen gibt. Ich selbst tue mich schwer, diese Sichtweise zu teilen. Ein neues Paper mit alten Argumenten ist für mich keine neue Information.
Die Geschichte von Contracts in C++
Das Feature Contracts steht schon lange auf der Wunschliste. 2018 nahm das Komitee in Rapperswil Contracts für C++20 in anderer Form in den Working Draft auf. 2019 war ich in Köln dabei, als das Feature wieder aus C++20 entfernt wurde. Als Resultat entstand eine Studiengruppe, die sich von 2020 bis etwa 2024 mit dem Thema Contracts und seinen Aspekten beschäftigte. Danach übergab die Studiengruppe ihre Arbeit und ihre Vorschläge an die Evolution Working Group (EWG), das Herzstück für Spracherweiterungen. Diese hat das Thema dann weiter über mehrere Treffen diskutiert, bevor es mit einer Mehrheit in C++26 aufgenommen wurde.
Im nächsten Schritt stimmte WG21 im März 2026 über den C++26-Draft ab, also mit Contracts. Der Draft erreichte eine große Mehrheit, wenn auch nicht ohne Gegenstimmen.
Und damit sind wir in der nächsten Phase, dem DIS. Hier gab es nun genug Neinstimmen, die eine Zweidrittelmehrheit verhinderten.
Wie geht es weiter?
Das große Problem: Wie geht es weiter? Die ISO hat selbstverständlich einen Prozess dafür. Dieser bietet verschiedene Optionen:
- Einen geänderten Draft zu einer neuen DIS-Abstimmung geben,
- einen geänderten Draft an das Komitee geben – das wäre die Phase Committee Draft (CD),
- einen geänderten Draft als Technical Specification veröffentlichen oder
- das Projekt streichen.
Alle Möglichkeiten bedeuten eine Verzögerung beim nächsten C++-Standard. Ob er dann noch C++26 heißen wird, ist ebenfalls offen, aber eine wesentlich kleinere Baustelle.
Alle vier Optionen brauchen eine Mehrheit innerhalb von WG21. Diese Arbeitsgruppe hat aber dafür gestimmt, C++26 mit Contracts in die nächste Abstimmungsphase zum Release zu geben. Und zwar mit mehr als nur der erforderlichen Zweidrittelmehrheit. Das Feature kam nicht aus dem Nichts, sondern wurde über Jahre durch Arbeit und möglicherweise auch persönliches Engagement von vielen Leuten erarbeitet. Schwer vorstellbar, dass diese Gruppe ihre Arbeit, für die sie mehrfach Zustimmung erhielt, einfach aufgibt. Gleiches gilt für die Gruppe, die mit Contracts unzufrieden ist. Sie hat ebenfalls Arbeit investiert, teilweise auch in alternative Implementierungen. Es ist schwer vorstellbar, dass sich ihr Nein bei der DIS-Abstimmung ändert, wenn Contracts im Standard bleiben.
Selbst das Streichen von C++26 benötigt eine Mehrheit in WG21. Dieser Schritt würde laut meinem Verständnis bedeuten, dass der Standard zurück zu C++23 wandert und es ohne eine einzige Änderung weiter zu C++29 geht. Das würde die Arbeit von zahlreichen Personen betreffen. WG21 wäre im Anschluss damit beschäftigt, Features in C++29 aufzunehmen, die bereits erfolgreich in C++26 gelandet sind. Da das immer nur über ein Paper geht, hinter dem mindestens eine Person steht, die es vertritt, könnten hierbei Features entfallen, wenn die Motivation oder Zeit fehlt.
Gewissheit über das Abstimmungsverhalten gibt es natürlich nur, wenn der jeweilige Weg beschritten wird.
Der Weg nach vorn ist damit aktuell leider mehr als ungewiss. Eventuell ist das auch die Erklärung dafür, warum ISO/IEC DIS 26926 das Ende dieser Aktivität bedeutet hat. Es braucht einen Konsens, um nach vorn zu gehen. Für einen Konsens ist immer Vertrauen erforderlich. Dieses Vertrauen wurde leider gerade erschüttert.
Der nächste C++-Standard und damit auch die Zukunft von C++ befinden sich aktuell in einer Sackgasse.
Zumindest steht das nächste Treffen kurz bevor: Es beginnt am 16. November im brasilianischen Búzios. Oberstes Ziel wird es sein, den Knoten zu lösen. Sehr wahrscheinlich wird dies auch Auswirkungen auf C++29 haben. Faktisch gibt es aktuell keinen Grund, an diesem Projekt zu arbeiten.
Meine persönliche Meinung: ein Desaster
Normalerweise sind meine Artikel technisch fokussiert und ohne persönliche Meinung. Den durchgefallenen DIS empfinde ich als riesengroßes Desaster, und es tut mir für die gesamte C++-Community leid. Unabhängig davon, ob jemand Contracts mag, wichtig findet oder große Schwächen sieht: Das Thema wurde über Jahre bearbeitet und hat in der Form mehrfach eine Mehrheit erhalten. Durch das Stimmen mit Nein ist ein etabliertes System erschüttert worden, das vor allem auf Vertrauen und respektvoller Zusammenarbeit beruhte.
Jeder ISO-Standard ist nur eine Menge an Kompromissen. Jeder verliert mal und jeder gewinnt auch mal. Insgesamt wird ein Resultat produziert, bei dem alle Beteiligten ihr Bestes gegeben haben. Bei der DIS-Abstimmung wollten die verlierenden Parteien ihren Verlust nicht akzeptieren. Ob die Gruppe wieder Vertrauen aufbauen kann, bestimmt maßgeblich, wie es weitergehen kann.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.