Skip to main content
CybersecurityVulnerability Management

C++26 Development Stalls Over Contracts Dispute

Cluttered development workspace with laptop, papers, and coffee cups, conveying stagnation.

“The P2900 contracts and extensions aim to change the nature of C++ and are an existential threat to C++, adding complexity and bloat,” said Bjarne Stroustrup and his colleagues in a paper last August — words that have now helped stall the next C++ standard at the finish line.

ISO ballot results for C++26 DIS

The Draft International Standard (DIS) of C++26 failed its ISO ballot in October, a rare late-stage setback for the language. The ballot recorded 13 votes in favor, 9 against, and 12 abstentions, and did not meet the ISO requirement of having no more than 25 percent negative votes. Contracts — a feature that would introduce preconditions, postconditions and assertions into C++ — were the principal cause of the nay votes.

Bjarne Stroustrup's objection to P2900 Contracts

Stroustrup and his co-authors argue the revised proposal (P2900) “aim[s] to change the nature of C++” and that the implementation included in the draft is “messy, outdated, not sufficiently tested,” and could be provided as a library instead. Contracts — Design by Contract style checks familiar from Ada and Eiffel — were previously removed from C++20 because of concerns about dangerous defaults; the debate over their reintroduction has persisted for more than a decade.

Andreas Fertig and committee backlash

Not all committee members agree with Stroustrup’s take. Andreas Fertig, a member of the C++ standardization committee, wrote that the Contracts topic “has been worked on for years and has received a majority vote multiple times in its current form.” Fertig said a late veto harms the collaborative system that underpins ISO C++ development and accused Stroustrup and his allies of refusing to accept a loss, writing that “the losing parties refused to accept their loss. The question that primarily determines how to move forward is whether the group can rebuild trust.”

Harry Bott and the C++ Alliance view on process

Harry Bott, CEO of the C++ Alliance — which maintains the open source EDG C++ compiler front end — rejected the idea that the ballot setback is a process failure. “The draft being sent back isn’t a failure of the process—it’s the process working as intended,” he wrote to The Register. Bott added that the episode should be used to strengthen the process so “C++ can continue to evolve in a way developers can rely on.”

WG21's options in Búzios, Brazil

WG21, the ISO C++ working group, is meeting next week in Búzios, Brazil, for what Thibault Ricord-Marchal called a confronto final. Ricord-Marchal outlined three concrete paths the group faces: carve Contracts out of the specification so the rest of C++26 can ship (a difficult step because it requires undoing library hardening already done with Contracts); move Contracts into a separate technical specification to continue work there; or perform a minor revision and vote again in hopes of reversing the ballot result.

How technologists, security teams, and projects adopting Rust are responding

  • Technologists and security teams will be tracking Contracts closely because the feature is explicitly pitched to catch programming errors via preconditions, postconditions and assertions — a defensive capability that addresses long-standing concerns about accidental security holes in C++.
  • Some projects have already sought safer defaults by adopting Rust, and the Contracts debate is directly tied to that trend: the source calls the “easy” creation of security holes in C++ the “elephant in the room,” which has contributed to migrations away from C++.
  • Implementers and compiler maintainers, represented in part by the C++ Alliance and the EDG front end, face a practical trade-off: either accept the additional work of removing Contracts from the draft (and undoing hardening that relied on them) or continue refining Contracts in a separate track while shipping the rest of the standard.

The dispute has a simple, consequential outcome: because the DIS failed at an unusually late stage, the language risks missing its expected release this year and may be informally called “C++27” if it ships next year — officially “ISO/IEC 14882:2027.” WG21’s meeting in Búzios will decide whether the committee splits the work, reboots the Contracts proposal, or pushes a revised draft back to ballot. The decision will test whether the committee can repair trust and reconcile deep technical disagreement without sidelining months or years of work.

Original Register story