C++26 fails its ISO DIS ballot: committee members say contracts caused it, next step in November
The C++26 draft was disapproved when the ISO ballot closed on 23 October 2026; committee members point to contracts and the WG21 meets 16 to 21 November.
· 6 min read
Written by AI from the sources linked below. How we use AI
On this page
The ISO ballot on C++26 closed on 23 October 2026 with the draft disapproved, which two members of the standards committee say has not happened to a C++ standard before. The cause, according to both, is the contracts feature. The draft, including reflection, std::execution and library hardening, is now stuck until the committee decides how to repair it, and its next full meeting is in Brazil from 16 to 21 November.
An earlier version of this article, which was held for checking, put the ballot at "12 of 20 Yes votes". We could not confirm that figure and have removed it: the people we cite below say ISO rules allow publishing the overall outcome of a vote but not how each national body voted.
Key points
- The C++26 Draft International Standard (DIS) ballot closed on 23 October 2026 and the result was "Disapproved" (Robert Seacord, convenor of the C committee, as quoted by Train IT).
- Two committee members, Andreas Fertig and a Train IT author who sits on the Polish national body, say it is the first failed ballot for a C++ draft.
- A DIS needs at least two-thirds of the voting members in favour and no more than a quarter of all votes negative. Fertig writes that the two-thirds majority was not reached; neither source gives vote counts.
- Both authors expect the No votes to be about contracts, but the national-body comments are not public yet; ISO must publish a full report within 12 weeks, so by mid-January 2027.
- The WG21 committee meets in Búzios, Brazil, on 16 to 21 November 2026 and has four ISO routes open to it, from a revised ballot to cancelling the project.
What happened
C++ standards are approved by national standards bodies. After the committee finished the C++26 draft, the draft went to a twelve-week vote of those bodies. Andreas Fertig, who sits on the German delegation and says he writes in a personal capacity, reports that the options are approval, rejection or abstention, with comments allowed. The vote ended on 23 October.
Robert Seacord, the convenor of the C committee, announced the outcome on LinkedIn on 24 October with the words "Unfortunately it was Disapproved", as quoted by Train IT. Fertig, in a post dated 3 November, writes that, as far as he knows, this is the first time a C++ DIS ballot has failed. He searched ISO's system and found one other DIS that was not approved, ISO/IEC DIS 26926, the C++/CLI language specification from August 2006, and that project was halted. He adds that his search privileges may not show everything.
The reason is "quite clear" from the comments the national bodies submitted, he says: contracts. A number of national bodies believe the feature is not ready. Train IT's author, who is a member of the Polish national body, writes that he is convinced the No votes were about contracts, because that is where the opposition was on record before the vote, and adds that this will be certain only when the comments are published.
Background
Contracts let a function state preconditions, postconditions and assertions in code. The Train IT series shows an example with pre ( x >= 0.0 ), post ( r : r >= 0.0 ) and contract_assert. The draft defines four evaluation semantics, ignore, observe, enforce and quick-enforce, and leaves the choice to the implementation; in GCC 16 a compiler flag picks one. Much of the dispute, according to Train IT, is whether a contract assertion is a check the build may drop or a guarantee the program can rely on.
The feature has a history. Fertig says he was in the room in Cologne in 2019 when an earlier form of contracts was added to C++20 and, in the same meeting, removed again. A study group worked on the topic from about 2020 to 2024, then the Evolution Working Group discussed it over several meetings and voted it into C++26. In March 2026 the full committee, WG21, voted the C++26 draft, contracts included, forward with a large majority "though not without dissenting votes", Fertig writes. Train IT notes that both objections raised at the Croydon plenary that sent the draft to ballot concerned contracts, and that several national-body comments on the earlier committee draft asked for removal. A paper, P4238R1, asked national bodies to vote No over the contracts design and how it advanced.
How the vote works
Train IT sets out the rule: a DIS passes only if at least two-thirds of the voting (P-)members are in favour and no more than a quarter of all votes are negative. A draft that misses either condition is disapproved. ISO's policy allows sharing the overall outcome, whether or not the acceptance criteria were met, but not how any national body voted.
The ISO/IEC Directives (clause 2.6.5 of Part 1, as cited by Train IT) require a full report within 12 weeks of the vote's end, containing the result, the chair's decision and the full comment text. For a ballot that closed on 23 October that falls in mid-January 2027 at the latest. At the committee-draft stage WG21 published such a report as N5028; Train IT does not know whether it will do so again.
Prior unanimity is also part of the story. Train IT quotes Daveed Vandevoorde, a member of the WG21 Direction Group, as writing that no earlier C++ draft got even a single vote against.
What it means
For developers the immediate effect is uncertainty. The result changes when an ISO-approved C++26 will exist, and what it will contain; neither source says it changes what compilers already implement. The draft also carries reflection, std::execution and library hardening, so a delay affects features many people want that have nothing to do with contracts.
The two accounts disagree on what to do. Fertig argues that no route is easy. All four options require a majority in WG21, he writes, and WG21 had earlier voted the draft with contracts forward by more than two-thirds. He considers it hard to imagine the result changing without contracts being removed, while also noting that cancelling C++26 would mean returning to C++23 and moving to C++29. He calls the result "a massive disaster" in his personal opinion and says the losing side "refused to accept their loss". Train IT's author, by contrast, says he would like contracts to stay, but could live with them leaving C++26 if that lets the rest ship quickly.
The proposals on the table also differ. P4433R0, written by sixteen supporters of contracts before the result was known, asks WG21 to seek another ballot without changing or removing contracts and to reject comments calling for removal unless they bring new technical information. It argues that removal "is not realistic" because it would be a major change and library hardening would have to be redesigned (as summarised by Train IT). On the other side, J. Daniel Garcia, an author of P4238R1, wrote under Seacord's post that the short-term fix is to remove one problematic feature. Vandevoorde's recommendation, per Train IT, will be to remove contracts while keeping library hardening.
What we don't know yet
- How each national body voted, and the exact tally. ISO does not allow publishing the breakdown, so any specific vote count you may see circulating is unconfirmed.
- The content of the comments. They are due in the ISO report by mid-January 2027.
- Which course ISO's SC22 chair picks. Train IT saw no announcement when it wrote.
- Whether a revised draft is a matter of months or longer. P4238R1 estimates months rather than years, which P4433R0 disputes.
- Whether the standard will still be called C++26. Train IT notes C++23 was published as ISO/IEC 14882:2024 and nobody calls it C++24; Vandevoorde is quoted as doubting a final draft can be voted out in 2026 and says that if it happens in 2027, "C++27 would make sense".
What to watch next
The WG21 meeting in Búzios from 16 to 21 November is the first of the whole committee since the result; P4433R0 asks for a poll there on seeking another ballot unchanged, while others want contracts removed, and some earlier national-body comments asked for a technical specification or white paper instead. After that, watch for the SC22 chair's choice of course, the 12-week ISO report, and whether the eight-week vote on a revised enquiry draft (shorter than the twelve-week one) is scheduled.
Sources
Written by
The official account of the people who run audiotale.net: announcements, conversation starters and the newsroom's drafts. Posts written with AI say so. Every other account here is a real person.
Read next
Leap seconds end: the CGPM votes to make UTC continuous from 20 May 2027
The General Conference on Weights and Measures voted on 15 October to stop adding leap seconds and let UTC drift up to one hour from Earth's rotation.
audiotale.net team6 min read
Dependabot now updates APM agent skills in apm.yml: setup, pin types and limits
GitHub added Dependabot version updates for Agent Package Manager on 3 November 2026; here is how to enable it, what each pin type does and what is skipped.
audiotale.net team6 min read
Safari 27.3 beta Adaptive Dark Mode: how it recolours light sites and how to opt in or out
Safari 27.3 can darken websites that have no dark theme; here is how it works, the color-scheme declaration that controls it, and what to test.
audiotale.net team6 min read