C++26 Disapproved
In an unprecedented move, the C++26 standard's final draft (DIS) has been "Disapproved" by ISO National Bodies, a first in the language's history. This shock rejection, primarily due to the contentious 'Contracts' feature, throws the future of C++ standardization into disarray. The Hacker News community is abuzz with speculation about the procedural breakdown, the nature of C++'s increasing complexity, and the broader implications for trust within technical standards bodies.
The Lowdown
The C++ world is reeling from a historic turn of events: the proposed C++26 standard, specifically its Draft International Standard (DIS), has been unexpectedly "Disapproved" by ISO National Bodies. This outcome marks a significant departure from typical protocol, as it's the first time a C++ DIS ballot has failed since 1998, and only the second programming language DIS in ISO history to not be approved.
The primary culprit behind this unprecedented rejection is the 'Contracts' feature, which a sufficient number of National Bodies deemed not ready for release. The author, a member of the C++ Standardization Committee, offers an insider's perspective, highlighting the severity of the situation and the procedural intricacies:
- The DIS stage is the penultimate step in ISO standardization, requiring a two-thirds majority for approval, which C++26 failed to achieve.
- 'Contracts' has a long, troubled history, having been included and then removed from C++20 before undergoing years of development and being voted into C++26 by the Evolution Working Group and then WG21 by large majorities.
- The unexpected 'no' votes at the DIS stage, despite previous internal committee approvals, represent a breakdown of established trust and consensus-building processes.
- Four potential paths forward exist (revised DIS, revised CD, Technical Specification, or project cancellation), all leading to significant delays and requiring a new majority consensus within WG21, a group that had already approved the 'Contracts' feature.
- The author views this as a "massive disaster" that has shaken the foundation of respectful collaboration and compromise within the C++ community.
With a critical meeting scheduled just days after the article's publication, the C++ standardization body faces an immediate challenge to resolve the impasse, which will likely have profound implications not only for C++26 (or its eventual successor) but also for the long-term trajectory of C++29 and future language evolution.
The Gossip
Contractual Quandaries: What Are They, Anyway?
Many commenters expressed confusion about the 'Contracts' feature, which was the main reason for the C++26 disapproval. While some users were unfamiliar, others clarified that 'Contracts' are essentially advanced pre- and post-conditions for functions, akin to improved assertions. This led to a discussion about whether this feature genuinely enhances C++'s safety or simply adds more complexity to an already intricate language.
Standards Standoff & Shaken Trust
The unprecedented failure of the C++26 DIS ballot prompted a wider discussion on procedural integrity and the erosion of trust within standardization bodies. Some commenters saw this as a "bellwether event" reflecting a societal trend of diminishing consensus. Others posited that the disapproval might stem from political maneuvering or a push by "heavy money parts" (e.g., Microsoft) within the committee for features like 'Contracts' against significant dissent, leading to an effective, albeit delayed, veto by national bodies.
Memory Safety Musings & C++'s Core Issues
The discussion branched into C++'s perennial challenge: memory safety. One user provocatively suggested using the C++26 delay to prioritize memory safety, sparking debate on whether 'Contracts' are actually a memory safety solution (generally, they are not) and whether the push for such features distracts from more fundamental language improvements. A humorous comment reminded everyone that Lisp had "solved" memory safety back in 1959.