⏱️ Reading time: 9 min

C++26 has just become the first draft in the language’s history to be rejected by an ISO ballot. The result arrived on October 23, 2026: twelve of the twenty countries with voting rights said yes, eight short of the required minimum, and nine of twenty-two voted against, almost double the allowed limit. The C++26 DIS ballot failed on two separate counts, and either one alone would have been enough to sink the draft.

📑 En este artículo
  1. TL;DR
  2. What Is C++26
  3. What Happened in the C++26 DIS Ballot
  4. Context and History of the Draft
  5. Technical Details: How the Votes Are Counted
  6. Impact and Analysis
  7. What’s Next for C++26
  8. Frequently Asked Questions
    1. What Is a DIS Ballot in ISO?
    2. Why Don’t Iran and Nigeria Count the Same Way in the C++26 DIS Ballot?
    3. Does This Mean Contracts Will Never Make It Into C++?
    4. What Happens to Reflection and std::execution Now?
    5. When Will the Full Comments From the Countries That Voted Against It Be Released?
  9. References

Robert Seacord, convener of the C committee, confirmed the result the next day on LinkedIn. According to him, no SC22 standard (the ISO body that groups C, C++, and related languages) had ever failed this type of ballot before.

TL;DR

  • The C++26 DIS ballot failed on October 23, 2026, with 12 of 20 yes votes (60%), far short of the required 66.7%.
  • Nine of 22 countries voted against (41%), exceeding ISO’s maximum allowed limit of 25%.
  • It’s the first C++ draft to fail a DIS ballot, according to Robert Seacord, convener of the C committee.
  • Denmark, Spain, Italy, Japan, and Sweden are among the nine countries that rejected the draft.
  • Reflection, contracts, std::execution, and library hardening are now on hold until the committee’s next revision.

What Is C++26

C++26 is the draft for the next revision of the international C++ standard, developed by WG21, the ISO/IEC JTC1/SC22 working group that defines C++. It includes contracts, reflection, std::execution, and library hardening, and was set to become the official standard after passing the C++26 DIS ballot, the same way C++20 and C++23 did.

DIS stands for Draft International Standard: it’s the second-to-last stage of ISO’s process before publishing a standard. A draft that passes this ballot moves into the final editing phase; one that fails goes back to committee to resolve the issues raised by the countries that voted against it.

What Happened in the C++26 DIS Ballot

ISO’s process requires meeting two conditions at the same time to approve a DIS, and both failed. According to the breakdown published by Train IT, the first condition requires that at least two-thirds of the P-members (the full voting member countries) say yes. C++26 got 12 of 20, a 60% that falls short of the required 66.7%.

The second condition caps negative votes at 25% of all the bodies that voted, regardless of whether they’re P-members or observers. Nine of 22 bodies voted against, a 41% that nearly doubles the limit. Neither rule counts abstentions, which is why the same group of voters produces two different percentages.

ConditionRequirementActual Result
Yes votes from P-membersAt least 2/3 (66.7%)12 of 20 (60%)
Negative votes from all bodiesMaximum 25%9 of 22 (41%)

Nine countries voted against and accompanied their vote with technical comments, as the process requires: Denmark, Finland, Iran, Italy, Japan, Luxembourg, Romania, Spain, and Sweden. France and Ireland abstained but still submitted comments, bringing the total to eleven bodies that left written observations. Poland and the United States abstained without comments.

Context and History of the Draft

Contracts isn’t a last-minute addition: it was part of C++20 and got pulled from the standard before publication because the committee couldn’t agree on the design. Since then, the proposal was reworked for C++26 under P5000R1 from WG21’s Direction Group, the same group where Daveed Vandevoorde described C++’s clean voting record up to now.

That track record is part of what makes this rejection newsworthy. Vandevoorde wrote that no previous C++ draft had ever received a single vote against it, which turns this C++26 DIS ballot into a break from the norm, not a minor variation on the usual process.

📌 Note: Poland decides its ISO position through an internal technical committee, KT 331. This time the motion to reject the draft and submit comments didn’t get the votes it needed, so the country ended up abstaining without being able to attach any observations.
ISO’s DIS ballots require technical comments from every country that rejects a draft. Foto de Joshua Woroniecki en Unsplash

Technical Details: How the Votes Are Counted

The mechanism behind the rejection isn’t just arithmetic: it’s about who counts and who doesn’t under each rule. SC22 distinguishes between P-members, full members whose vote does count toward the two-thirds threshold, and O-members, observers who can vote but aren’t included in that count. Iran is an O-member and voted against: that vote does count toward the 25% negative-vote limit, but not toward the two-thirds calculation.

Nigeria illustrates the opposite case. The official result doesn’t assign it P-member or O-member status in SC22, and it voted yes. That vote counts toward the denominator of the second rule, which is why it’s 22 bodies and not 20, but it doesn’t add to the P-member approval threshold. Two votes entering through different doors of the same process explain why 20 and 22 aren’t the same number in the results table.

flowchart TD
A["C++26 DIS ballot"] --> B["Rule 1: 2/3 of P-members voting Yes"]
A --> C["Rule 2: less than 25% voting No"]
B --> D["Actual result: 12 of 20, 60%"]
C --> E["Actual result: 9 of 22, 41%"]
D --> F["Does not reach the 66.7% minimum"]
E --> G["Exceeds the 25% limit"]
F --> H["Draft rejected"]
G --> H

One of the pieces blocked by this result is the contracts syntax that had been under testing for months in workshops and in libraries like mp-units. Here’s how a function with a precondition and a postcondition looks under the current proposal:

int dividir(int a, int b)
    pre(b != 0)
    post(r: r == a / b)
{
    return a / b;
}

Without this syntax in the standard, every compiler and every framework keeps handling preconditions its own way: with manual asserts, custom macros, or third-party libraries that aren’t interchangeable between projects.

There’s no direct way to verify this result from the outside: SC22’s official minutes aren’t public, only delegates from national bodies can access them on the committee’s site. The only thing anyone can verify today is Seacord’s LinkedIn post and Train IT’s summary; the complete minutes, with the full text of each country’s comments, won’t be available until the formal report.

WG21 also manages reflection, std::execution, and library hardening within the same draft. Foto de Mohammad Rahmani en Unsplash

Impact and Analysis

The blow doesn’t fall on contracts alone. Reflection, std::execution, and library hardening traveled in the same draft, so they’re tied to the same delay even though no country specifically objected to those pieces. That’s the cost of bundling major features into a single C++26 DIS ballot: a rejection over one chapter stalls all the others.

The author of the blog that documented the result, who teaches contracts in C++ workshops and uses the C++26 version in his mp-units library, was explicit about his stance once the ballot closed: he’d rather contracts stay in the standard even if the design needs more negotiation, because documenting preconditions in a function’s signature keeps that documentation from going stale without anyone noticing.

💭 Key takeaway: Failing just one of the two conditions would have been enough to sink the entire draft; C++26 failed both at once, by wide margins on each.

What’s Next for C++26

ISO’s rules, in clause 2.6.5 of Part 1 of its directives, require publishing a complete report within 12 weeks of the ballot’s closing date. For a closing date of October 23, 2026, that maximum deadline falls in mid-January 2027. That report has to include the result, the committee chair’s decision, and the full text of each country’s comments.

At the committee draft stage, WG21 had already published that kind of report as document N5028. It’s not yet confirmed whether the committee will repeat the format for this ballot, but the precedent suggests it will.

In the meantime, the committee has to decide how to respond to the nine countries that voted against it: it can rewrite the flagged sections, split the draft into pieces that get voted on separately, or resubmit the same text for another round. None of these options is quick, and each one pushes back the date when C++26 becomes an official standard.

If you work with modern C++, read Train IT’s full breakdown and follow WG21’s documents on open-std.org before the official report comes out in January 2027.

📬 Get new articles by email

We only email about big articles (1-2 a month).

Frequently Asked Questions

What Is a DIS Ballot in ISO?

It’s the Draft International Standard phase, the stage before a standard gets published. In it, ISO’s national member bodies vote on whether the text is ready to become the official standard or needs to go back to committee.

Why Don’t Iran and Nigeria Count the Same Way in the C++26 DIS Ballot?

Iran is an O-member, an observer, and its negative vote counts toward the 25% limit on votes against, but not toward the two-thirds threshold for P-members. Nigeria has neither P-member nor O-member status in SC22, but its yes vote does count toward the 22-body denominator in the second rule.

Does This Mean Contracts Will Never Make It Into C++?

No. The rejection sends the draft back to committee to resolve the issues raised by the nine countries that voted against it. Contracts has already come back once before, after being dropped from C++20, so a second attempt is the most likely outcome.

What Happens to Reflection and std::execution Now?

They’re tied to the same delay as contracts because they traveled in the same C++26 draft, even though no country voted against them specifically.

When Will the Full Comments From the Countries That Voted Against It Be Released?

ISO’s rules require publishing the complete report within 12 weeks of the ballot’s closing date, meaning by mid-January 2027 at the latest.

References

📱 Like this content? Follow @programacion on Telegram for daily tech content in Spanish: quick summaries, fresh content every day.

Featured image: Foto de Markus Spiske en Unsplash

Did it work for you? Got a different error? Say so below: questions get answered and help the next reader.

Leave a comment
Categories: Programming

Andrés Morales

Developer and AI researcher. Writes about language models, frameworks, developer tooling, and open source releases. Covers ML papers, the tech startup ecosystem, and programming trends.

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

You can include code inside <code>…</code> or, for several lines, <pre><code>…</code></pre>.

This site uses Akismet to reduce spam. Learn how your comment data is processed.