Am 23. Oktober kam der Entwurf für C++26 nach zwölfwöchiger Abstimmungsphase mit dem Vermerk Disapproved aus seiner DIS-Abstimmung (Draft International Standard) zurück. Soweit Beteiligte das überblicken, ist noch nie zuvor ein C++-Standard an dieser Stufe gescheitert – und nach Angaben von Robert Seacord, der das C-Komitee leitet und das Ergebnis am Folgetag auf LinkedIn bekanntgab, möglicherweise auch kein Sprachstandard im ISO-Unterkomitee SC22.
Die Zahlen
Eine DIS-Abstimmung muss zwei Hürden gleichzeitig nehmen: zwei Drittel der abgegebenen Stimmen müssen Ja sein, höchstens ein Viertel darf Nein sein. C++26 verfehlte beides. Nötig waren 14 Ja-Stimmen, erreicht wurden 12; erlaubt waren bis zu fünf Nein-Stimmen, gezählt wurden neun. Jede der beiden Verfehlungen allein hätte gereicht.
Neun nationale Gremien stimmten mit Nein – Dänemark, Finnland, Iran, Italien, Japan, Luxemburg, Rumänien, Spanien und Schweden –, jeweils mit technischen Kommentaren. Frankreich, Irland, Polen und die Vereinigten Staaten enthielten sich. Die Kommentare selbst bleiben nach ISO-Regeln zwölf Wochen lang unter Verschluss; vollständig öffentlich wird das Protokoll also erst Mitte Januar 2027.
Contracts sind der Streitpunkt
Die Kommentare sind nicht lesbar, die Spur aber schon: Jede vor der Abstimmung aktenkundige Position zeigte auf dasselbe Feature. Contracts erlauben es einer Funktion zu erklären, was beim Eintritt und beim Austritt gelten muss, und Bedingungen im Funktionskörper zu prüfen.
```cpp double checked_sqrt(double x) pre(x >= 0.0) post(r: r >= 0.0) { const double root = std::sqrt(x); contract_assert(!std::isnan(root)); return root; } ```
Kaum jemand hat etwas gegen die Idee – gegen Dokumentation, die der Compiler versteht und die nicht veraltet wie ein Kommentar. Der Streit dreht sich um die Semantik. Der Entwurf definiert vier Auswertungsmodi: `ignore`, `observe`, `enforce` und `quick-enforce`, und überlässt die Wahl der Implementierung. In GCC 16 ist derselbe Contract also entweder eine Prüfung, die im Release-Build verschwindet, oder eine Laufzeitgarantie, die das Programm beendet. Die ablehnenden Länder argumentieren, eine Prüfung, die ein Build weglassen darf, sei überhaupt kein Contract, und das Feature habe vor der Standardisierung zu wenig Produktionserfahrung gesehen. Contracts wurden 2019 aus ähnlichen Gründen aus C++20 entfernt; eine Studiengruppe verbrachte danach rund vier Jahre mit dem Design.
Diese Vorgeschichte ist die zweite Hälfte der Beschwerde. WG21 – das C++-Komitee – schickte C++26 mit Contracts mit mehr als der nötigen Zwei-Drittel-Mehrheit in die Abstimmung. Die DIS-Stimme gaben nationale Gremien ab, deren Delegationen nicht immer aus den Leuten bestehen, die diese Debatte mitgeführt haben; ein Papier, P4238R1, hatte sie ausdrücklich gebeten, wegen des Designs und der Art seiner Annahme mit Nein zu stimmen. Mitglieder beschreiben das Ergebnis als Bruch jenes Vertrauens, auf dem die Norm "wir haben verloren, wir akzeptieren das" beruht.
Der Kollateralschaden
Die Ablehnung trifft nicht nur Contracts. Alles andere im Entwurf hängt mit daran fest: Reflection zur Compile-Zeit, `std::execution` als Standardmodell für asynchronen Code und die Härtung der Standardbibliothek, die sich teilweise auf Contracts stützt.
Vier Auswege, keiner schnell
Die ISO-Regeln erlauben vier Wege: ein überarbeiteter Entwurf in eine neue DIS-Abstimmung mit kürzeren acht Wochen; die Rückkehr zum Committee Draft für eine weitere Kommentarrunde; die Veröffentlichung als Technical Specification; oder die Streichung des Projekts. Alle vier brauchen eine Mehrheit in WG21 – also in dem Gremium, das C++26 mit Contracts befürwortet hat –, und beide Lager haben Jahre Arbeit in ihre Position investiert. Contracts zu entfernen, um den Rest freizubekommen, ist der schnellste Weg und der, den mehrere prominente Mitglieder inzwischen empfehlen; sechzehn Unterstützer haben stattdessen ein Papier für eine neue Abstimmung ohne Änderungen unterzeichnet. Das nächste Treffen findet vom 16. bis 21. November in Búzios in Brasilien statt, und dies ist der einzige Punkt, der zählt.
Der Name klärt sich von selbst: Wer 2027 veröffentlicht, nennt es naheliegenderweise "C++27". C++23 kam so spät, dass es offiziell ISO/IEC 14882:2024 heißt.
Was das für Code bedeutet, der heute geschrieben wird
Nichts wird zurückgenommen. Compiler implementieren den Arbeitsentwurf: GCC 16 akzeptiert `-std=c++26` und liefert Contracts als experimentelles Feature, Clang kennt `-std=c++2c`, seine Contracts-Implementierung ist aber noch nicht zusammengeführt. Das bleibt Entwurfscode – und wer `pre`, `post` oder `contract_assert` benutzt, baut auf genau dem Teil, der jetzt strittig ist. Wird Contracts entfernt, um den Standard freizubekommen, sind Quellcodeänderungen zu erwarten.
Die tiefere Lehre betrifft nicht die Syntax. Sie betrifft die Schwierigkeit, einer Sprache mit vier Jahrzehnten Code, mehreren Compilern und Nutzern mit gegensätzlichen Bedürfnissen beizubringen, "prüfe, dass das Argument positiv ist": Für die einen muss eine Prüfung kostenlos entfernbar sein, für die anderen ist eine Prüfung, die entfernt werden kann, keine Garantie. Das Komitee konnte beides nicht erfüllen – und die nationalen Gremien haben das an der einen Stelle gesagt, an der die Antwort bindend ist.




