Trip report: June 2026 ISO C++ standards meeting (Brno, Czechia) – Sutter’s Mill
Skip to content
Herb Sutter
C++
2026-06-132026-06-13
7 Minutes
tl;dr … A few highlights
Adopted this week in draft C++29: Complete catalog of all undefined behavior (UB) in C++. Contract pre/post support for virtual functions. Defaulting (=default) for postfix increment/decrement. Designated initializers for base classes. Python-style .lookup(key) for associative containers. And more…
Other significant progress: Progress on various features targeting C++29, including systematically addressing UB and adding safety profiles for C++.
Next six months: Telecon line-by-line review of a proposal to systematically address all undefined behavior in C++. Progress adding C++ memory safety subsetting profiles. Both aim for inclusion in C++29.
Overview
A few minutes ago, the ISO C++ committee completed the first meeting of C++29 in beautiful Brno, Czechia (hybrid online via Zoom).
This meeting was hosted by Mendel University in Brno . Thank you to everyone involved, including especially Hana Dusíková who took the lead in making the arrangements! Our hosts arranged for high-quality facilities for our six-day meeting from Monday through Saturday.
We had about 200 attendees, split about 55%/45% on-site/on-line, formally representing 28 nations. At each meeting we regularly have new guest attendees who have never attended before, and this time there were 25 new guest attendees, mostly on-site, in addition to new attendees who are official national body representatives. To all of them, once again welcome!
The committee currently has 22 active subgroups, 11 of which met in 6 parallel tracks throughout the week. Some groups ran all week, and others ran for a few days or a part of a day, depending on their workloads. You can find a brief summary of ISO procedures here.
Adopted for C++29: Core language changes/features
These links are to the most recent public version of each paper. If a paper was tweaked at the meeting before being approved, the link tracks and will automatically find the updated version as soon as it’s uploaded to the public site.
Several of the adopted language and library additions are already supported today in major C++ implementations. “Adopted for C++29” doesn’t mean “have to wait until 2029 or later to start seeing some support in real compilers / standard libraries.”
In addition to fixing a list of issues, the core language adopted 19 papers, including the following…
P3596R3 “Undefined Behavior and IFNDR Annexes” by Joshua Berne, Timur Doumler, Jens Maurer, and Shafik Yaghmour . This paper adds to the C++ standard two Annexes that thoroughly catalog and document each case of undefined behavior (UB) in C++, including cases marked as “ill-formed, no diagnostic required” or “IF-NDR.” This catalog is intended to aid in mitigating or eliminating cases of UB including by profiles.
This was, pardon my French, a "[metric] ton" of work over the course of several years. Thanks Shafik, Joshua, Timur, Jens, and everyone who helped them compile this detailed catalog so that now we can next systematically do something about these UB cases!
The next step is a case-by-case review starting next month with the aim to systematically address them for C++29, possibly as soon as within the next year (more on this below).
Here in C++, we face reality without fear or favor. In case it needs saying again: "Yes, Virginia, there is a vibrant living modern programming language named C++." (Except, unlike the original, this version is the truth for adults.)
P3097R3 “Contracts for C++: Virtual functions” by Timur Doumler, Joshua Berne, and Gašper Ažman . Quoting from the paper:
“The assertions of an overriding function are independent of those in the overridden function. In a virtual function call, the precondition and postcondition assertions of both the statically chosen function and the final overrider are evaluated. This approach evolves earlier proposals by supporting a broader range of use cases found in existing code, integrating more naturally with C++26 contract-evaluation semantics and contract-violation handling, and providing a better fit for the C++ language than the more restrictive models in languages like Eiffel and D.”
Adding this feature addresses one of the major complaints about contracts in C++26, which was that the initial version of contracts did not include virtual function support. Now, less than three months after C++26 was technically finalized, draft standard C++(29) contracts do support virtual functions. This demonstrates that the committee is serious about building out C++26 contracts in C++29. Thanks, Timur and Joshua and Gašper!
P3668R4 “Defaulting Postfix Increment and Decrement Operations” by Matthew Taylor and Alex . This paper adds =default support for postfix increment and decrement operators to opt into the canonical definition that defers to the prefix versions, without us having to...