13 ms·
The current state of C++ next is maintained in what is called the C++ draft. People (from the committee of experts appointed as national body representatives o
by whateverboat 16d ago
The current state of C++ next is maintained in what is called the C++ draft.
People (from the committee of experts appointed as national body representatives or invited experts) submit proposals which is essentially merge requests to make changes to the C++ draft. A proposal, by the way of it's changes, can either add a feature to C++ or remove features from C++ (kind of like deleted code).
In each C++ meeting, they have a vote for each proposal in the meeting and decide whether that proposal is allowed to act on the C++, thereby determining if the features gets in the draft (if the proposal was proposing a feature) or if the features is kicked out of the draft (if the proposal was advocating for removal of a feature).
Once a proposal has been voted in the draft, only another proposal can remove that feature from the draft.
Every 3 years, they seal the current state of the draft into a standard and send it for voting to the official ISO C++ committee of national bodies (different from committee of experts we mentioned above). And I think each national body has a veto. (that is the vote has to be unanimous, but not sure here).
At this point, first the National bodies can make comments where they can threaten to veto the standard if their comment is not looked at. Then, the committee of experts can either respond to the comment or follow the comment or do whatever.
The official committee (essentially national body members) then votes and can only approve or reject the standard in the whole. So, if they reject of example C++ next now, there will be no C++26.
The whole process from sealing to actual voting takes around a year or so. In the mean time the committee of experts starts working on the next c++ standard from the sealed state forward without waiting for the committee to ratify the current one.
What Bjarne is doing is that he was threatening to get a national body to veto the proposal so that there is no C++26 at all. So, his point was, either accept his paper as it is (which calls for removal of contracts from the C++ draft before it goes to committee of national bodies), or he probably gets US or Denmark or some NB (not sure which) to vote no on the C++ standard (when it eventually goes to the committee of national bodies with the contracts in it, kind of like throwing baby with the bathwater).
- steveklabnik 16d agoThanks for this! I vaguely knew most of it but it's great to hear more details. I think that my misunderstanding here is because I thought that the vote in Croydon back in March was the last chance to veto things, but re-reading https://herbsutter.com/2026/03/29/c26-is-done-trip-report-march-2026-iso-c-standards-meeting-london-croydon-uk/ https://herbsutter.com/2026/03/29/c26-is-done-trip-report-ma... > are now producing the final document to be sent out for its international approval ballot So yeah, I guess in most cases this final ballot is a rubber stamp (not a bad thing, actually, I'd argue it's the way it should be) but maybe this time it is not.
- whateverboat 16d agoYeah, Croydon was the deadline according to the committee's internal process on changing the draft before it is sent for ballot (rubber stamped as you said typically). What Bjarne is asking for is: 1. either an exception to the c++ committee's internal rule about changing the draft after the definitive meeting (in this case croydon) 2. or veto in the national ballot as you said. By the way, didn't realise when I answered this that I was answering to you. Thanks for all the work on Rust! Your views on Rust and C++ are both much appreciated.
- steveklabnik 16d agoYou're welcome! Just to be extra clear about it, while there's clearly some dysfunction going on in WG21, I don't think Rust's process is free of it either. I do think there's a lot of pros to the way Rust does things, but this stuff is just very hard, in general. I wish I had actually written "The elephant in the room" back when the safe c++/profiles stuff was going on, but I never actually did. Oh well. Probably wouldn't have changed much anyway.
- Mond_ 16d agoThis does sound a lot like there's a real risk of C++ imploding, in some form or another. (Arguably, it has been in that state for a while now.) I personally agree that contracts probably shouldn't be in the standard, but this whole situation looks like a mess.
- MFHava 16d ago> And I think each national body has a veto. (that is the vote has to be unanimous, but not sure here). No veto. Every P-member has a vote (abstain/approve/disapprove). Whether C++26 gets published is decided by numerical consensus.
- r0ze-at-hn 16d agoI recently watched the c++ documentary and it was super sobering in how it mirrors this description of the process. https://herbsutter.com/2026/06/04/c-the-documentary-released-today/ https://herbsutter.com/2026/06/04/c-the-documentary-released... The true goal of C++ is the self-preservation and funding of the ISO Committee specification “engine”, while compilers are merely an accidental by-product. Once you see this then suddenly a lot of odd behavior makes sense. For example the committee can’t break ABI because then the old companies wouldn’t fund the new c++ standard, but would fund a committee that maintains/forks the old thing. The complexity / bureaucracy also provides jobs for those involved in many ways including writing new books every year and or consulting. While end consumers might really care about compile speed, modularization, security, and all of the things modern languages give, that is secondary to keeping the committee alive. Younger me would be like, oh no this is horrible someone will fix this! Older me is more sober and understands that once a system is up and running it will continue as is (this being an example of Pournelle’s Iron Law of Bureaucracy). Security by the way of migrations to Rust is causing what the committee sees as the first real threat to its existence as its patrons start adopting more and more Rust. As a result the committee is proposing to break compatibility as a means to keep them around just a little longer. Note: Actually fixing the security issues is not important only giving enough for sponsors to not leave so we will see what actually happens.
- deleted 16d ago[deleted]
- kmeisthax 16d agoBetween how long it took us to get standard library hardening in C++ and seeing what ISO did to the co-founder of MPEG, I'm convinced ISO is fundamentally incapable of actually being responsive to stakeholders, specifically because of the insane national body vetocracy. For context, under Leonardo Chiariglione's stewardship, MPEG attempted to ship a royalty-free codec called Internet Video Coding (IVC) and it was immediately torpedoed by Samsung claiming ownership. In any sane environment you would amend the standard to remove the claimed technology, but ISO specifically does not allow you to do this. There is no obligation for an ISO participant to identify the patents being claimed unless they refuse to offer a license on FRAND terms. Ergo, Samsung just said "we own this and will sell licenses for money", and IVC was dead in the water as a standard[0]. Leonardo attempted to bring this to the attention of ISO, but the actual formal process for this was blocked by... you guessed it, a national body vetoing it. So the patent policy that prohibits ISO from distinguishing between royalty-free and royalty-bearing codecs stayed. Oh, and then they cut MPEG up into six pieces so Leonardo would have nothing to run anymore. C++ was an unusual language in that, for about 10-15 years, the only other competing systems programming language was C - another ISO standard, and the one C++ was originally based off of. The standard answer to "but I want memory safety" was "use a garbage collector"[1]. I distinctly remember hearing interviews with compiler developers talking about how adding even these basic features to C++ would be interminably painful, because you'd inevitably have to debug some deeply nested macro in a library somewhere, so shut up and just enjoy that we gave you Vector<T>.at(). The day Rust becomes an ISO standard is the day it becomes dead to me. [0] IVC was specifically designed to be inferior to the royalty-bearing H.265 standard, as Leonardo himself wanted to keep the royalty-free codecs second-tier. [1] To be clear, there was research into non-GC languages with memory safety - that's where Rust got its ideas from - but it was a very small niche until Mozilla put their feet down and gave legitimacy to something.