WG21 Meeting Reports

2025 Hagenberg meeting

This week was the C++ Committee meeting, in Hagenberg, Austria 🇦🇹, on which we just finalized the C++26 feature freeze!
The features voted on will be added gradually to the working draft, and will likely be officially released on the next C++ version (C++26), barring any subsequent changes. This was the last meeting for forwarding C++26 features.
The meeting site was the upper austria university of applied science, allowing the students to join the discussions as guests for the discussions. There was also an evening lecture (by organizers, with the participation of Herb, Bjarne and Jens) on which they could learn about the latest status of C++ and future directions! 🧑‍🎓
The hotel was convenient, and the meeting organizers ran the meeting wonderfully, with a lot of attention to details, including providing the menu schedule 🙂 (Thank you!) The hybrid (on-site/online) experience worked as expected. We appreciate that greatly!
We will continue operating hybrid meetings going forward.

Main C++26 Features approved in Hagenberg: 🎉

We also rebased C++26 on C23 by approving: “P3348R1: C++26 should refer to C23 not C17” (thank you, Jonathan Wakely!)

We had 201 attendees attending the Hagenberg meeting: 128 were in person, and 73 were virtual.

 


Language Progress


 


Evolution Working Group (EWG) Progress


 

This week, EWG saw 56 papers and resolved 7 issues. The objective was to finalize C++26 features, “all bugs in”. Meetings going forward will have EWG fixing any bugs for C++26, and reviewing features for C++29.
 

おつかれさまです!🙏
 

📝 Contracts

⏩ contracts are in C++26, polls on the P2900 tracker

 

This week we:

 

📈 Consensus on contracts has increased since the last meeting. 📈
Thank you to all the authors, and everyone who’s provided feedback! Contracts in C++26 are a huge deal for programmers who want to increase their code’s correctness and quality.

 

Papers considered:

📋 Profiles

We reviewed the following papers on profiles:

For profiles, we voted the following:

Pursue a language safety white paper in the C++26 timeframe containing systematic treatment of core language Undefined Behavior in C++, covering Erroneous Behavior, Profiles, and Contracts. Appoint Herb and Gašper as editors.

 

What does this mean?

Many people felt that what profiles are trying to address (security, safety) is hugely critical… yet profiles as they stand today are not ready. The C++26 train is leaving the station, but we want progress, now!
 

<white_paper>

What are White Papers?

White papers are a tool that ISO is now encouraging us to use, whereby we need WG21 plenary approval and SC22 approval, and then we have an approved white paper. The implication: We can get profiles in a white paper, implemented in compilers (behind a flag) before C++26 is finalized.

How does that work? White papers are a lightweight TS, or a heavy paper. The way we manage this is fairly open and we heard concerns which Herb and Gašper will suggest ways to address. For now, we have them as editors, they choose what goes in the white paper, and our hope is that they are trusted by everyone to do so while increasing consensus. EWG will see updates, forward them to CWG, then to plenary, then SC22, with votes at each stop. This is actually lightweight, and will allow rapid improvements and feedback. One way to address issues brought up is to have a git repo on github.com/cplusplus where the white paper is developed, with great commit messages, with periodic reports (say, monthly), and with periodic EWG telecons to review (say, monthly). Herb and Gašper will publish details soon.

Of course, we cannot take implementations for granted. A white paper is a new tool, but we can’t be shipping unstable white papers every week and expect implementations to ship them. But we know white papers will be lower overhead than a TS. We therefore expect that white paper editors will be mindful editors.

What is expected in the white paper? systematic treatment of core language Undefined Behavior in C++, covering Erroneous Behavior, Profiles, and Contracts. This is broad! The final white paper doesn’t need to include all of these, but it’s the scope that was given to them. The idea is to try to comprehensively address security and safety issues, and do so with a comprehensive design. The scope given to the white paper allows aligning these topics, together. Contracts are in C++26, but profiles will likely be usable in a production compiler before contracts are usable behind -std=c++26. This is great for contracts as well! It means that we’ll be able to address perceived shortcomings of contracts with respect to safety rapidly, with direct feedback, in the C++29 timeframe thanks to the white paper.

</white_paper>

 

Why Herb and Gašper? Throughout the years they’ve shown themselves to be mediators, and great at obtaining consensus from groups who have a hard time agreeing. Herb is indefatigable, and has in the last few months put in incredible efforts in advancing a variety of proposals. Gašper goes into details and synthesizes it into consensus, we’ve seen this in action in contracts to help bridge gaps that seemed unbridgeable. The thinking is that they complement each other, and are well trusted by a variety of committee members to fairly take feedback and advance this critical topic.

This is a huge undertaking for both of them. Herb has signed up to dedicate 1.5 to 2 years of his life almost full-time on improving C++ safety and security. Thank you Herb! While Gašper wasn’t here for this meeting, he’s also signed up for significant work. Thank you!

🍱 Various C++26 papers

Paper P2843 “Preprocessing is never undefined” above resolves the following issues:

🪞 Reflection

Reflection: “the renaissance of C++”

Reflection is still in C++26! This week we:

Papers seen:

🧊 constexpr

🐾 Pattern matching

Pattern matching: “We hardly knew ye”

Pattern matching did not get consensus, but it was extremely close. Attendees felt that it wasn’t quite ready for C++26. Let’s get it in C++29!

Main papers which were discussed:

Library parts, not discussed this meeting:

 


Evolution Working Group Incubator Study Group (SG17) Progress


EWGI discussed 7 papers during the day on Wednesday. Of these, 4 were forwarded to EWG, 3 were seen and will be seen again.

Papers Forwarded to EWG

Papers that got feedback and will be seen again by EWGI

 


Core Working Group (CWG) Progress


CWG met during the full week, and reviewed papers targeting C++26, including reflection. We approved the wording for contracts, which were voted in C++26.
We also approved resolutions for CWG2549, CWG2703, CWG2943,
CWG2970, and CWG2990.

As the next meeting (Sofia) is the last meeting for C++26 papers, our primary focus
is on reviewing the wording of papers approved by EWG for C++26. most notably reflection. We will hold telecons to make progress ahead of the next meeting.

Papers reviewed and sent to plenary (apply changes to the C++ Working Paper)

Papers which will need to be seen again by CWG

 


Library Progress


 


Library Evolution Working Group (LEWG) Progress


 

LEWG met during the full week, and reviewed 45 papers. We’ve been working mostly on improvements and fixes to our main features targeting C++26, but we also had a chance to have some smaller neat additions!

Main Topics Discussed

(for topics already forwarded, we discussed improvements / fixes)

 

Papers forwarded to LWG

Reflection

Senders Receivers

Safety

Other Features

 

Papers / issues sent from LWG seen by LEWG

Papers that got feedback and will be seen again by LEWG

 

Papers that did not get consensus

Policies discussion

We will resume our discussion about policies in Sofia!

Information about policies can be found in: “P2267R1: Library Evolution Policies (The rationale and process of setting a policy for the Standard Library)”.

We will discuss the following topics:

Worth noting that Evolution Work Group (EWG) have also introduced policies, and have accepted: “SD-10: Language Evolution (EWG) Principles” during Wroclaw.

 

Evening Sessions

In addition to the work meeting, we had two evening sessions during the week (initiated by WG21 members).
Evening sessions are informative sessions, during which we do not take any binding votes.

They are meant for either reviewing topics relevant to the committee in more depth than possible during the work sessions (such is the case for “Relocatability”) , or for introducing topics which are not procedurally related but are relevant to WG21 (such is the case for “Perspectives on Contracts”).

 

Thank you to all our authors and participants, for a great collaboration in a productive and useful review process, and see you (in-person or online) in Sofia!◝(ᵔᵕᵔ)◜

 


Library Evolution Working Group Incubator Study Group (SG18) Progress

LEWGI/SG18 did not meet in person during Hagenberg (to allow more time to focus on C++26 design freeze) but will be holding regular telecons, usually only looking at one paper and giving the author feedback so that their paper is in the best possible shape for consideration by LEWG or various other study groups. SG18 planning on meeting in person in Sofia.

 


Library Working Group (LWG) Progress


LWG met in person throughout the week and reviewed multiple papers.

 

Papers forwarded to plenary

 

Papers that require more LWG review time

 

Issues Reviewed by LWG

Papers forwarded to other groups (CWG/LEWG)

Note: Issues finalized during a meeting are tentatively ready but voted on during the next meeting (in this case, Hagenberg).

 


Study Group Progress


 


Concurrency and Parallelism Study Group (SG1) Progress


Papers forwarded to LEWG/EWG

Papers that will be seen again by SG1

 


Networking Study Group (SG4) Progress


SG4 met in Hagenberg to discuss “P3482R0: Design for C++ networking based on IETF TAPS” - a paper proposing a design for networking library based on senders/receivers. The paper shows a promising direction for secure-by-default networking in C++, and SG4 encouraged the author to continue work in P3842’s direction.

 


Numerics Study Group (SG6) Progress


The numerics group met for half a day, which was less than planned. We reviewed 5 papers.

Papers reviewed

 


Compile-time Programming Study Group (SG7) Progress


SG7 saw three papers proposing improvements to reflection targeting C++29:

 

Papers that were forwarded to EWG / LEWG

 

Papers reviewed (require more work)

 


Ranges Study Group (SG9) Progress


SG9 met on Monday and Tuesday.

Papers that were forwarded to LEWG

`return views::transform(this->my_container, [](auto elem) { return … });`

 

Papers reviewed (require more work)

(we expect the following papers to be forwarded at the next meeting)

While discussing “P3555R0: An infinite range concept”, which adds a concept to detect infinite ranges, we realized that infinite ranges don’t even exist to begin with, even though the standard library has some of them.

Turns out that:

`views::iota(0) | views::take(10), for (auto x : views::iota(0)) { … break; }`

and arguably even:

`views::iota(0);`

are technically all undefined behavior! ( views::iota(0) is an invalid range as the sentinel is not reachable in finitely many steps, and passing invalid ranges to standard library functions like | , .begin() , or ~iota_view() `` is undefined behavior.) We’re going to spend the next couple years or so tackling this tricky problem to make it well-defined.

Papers that did not get consensus


Low Latency Study Group (SG14) Progress


SG14 did not meet during the Hagenberg meeting. We continue to hold monthly telecons to discuss low latency, gaming, and embedded related papers.

 


Tooling Study Group (SG15) Progress


SG15 met for one session during Hagenberg to discuss how we plan to ship our deliverables now that we’re not doing the Ecosystem IS. We decided to use the relatively new whitepaper process which has a significantly lower overhead than an IS, but some clarifications on the process are needed.

Papers reviewed


Text and Unicode Study Group (SG16) Progress


SG16 did not meet in person during Hagenberg but continues to hold virtual meetings at its usual twice monthly cadence. As always, SG16 meeting summaries continue to be posted at SG16 GitHub, though the SG16 chair has fallen behind in his duties, and so complete summaries will be posted in due time. 🙂

 


Contracts Study Group (SG21) Progress (requires input from SG21 chair)

SG21 met for 1 day in Hagenberg.

Papers reviewed


C / C++ Liaison Group (SG22) Progress


SG22 did not meet in person during Hagenbert. We continue to run telecons by demand and provide feedback through the mailing list.

 


Safety & Security Group (SG23) Progress


SG23 met for a day in Hagenberg on Tuesday, with attendance affected by the discussions elsewhere on Contracts and Profiles

 

Papers forwarded to EWG/LEWG

Papers reviewed

 


C++ Release Schedule


 

NOTE: This is a plan not a promise. Treat it as speculative and tentative.

See P1000, P0592, P2000 for the latest plan.

 

Meeting Location Objective
2023 Summer Meeting Varna 🇧🇬 First meeting of C++26.
2023 Fall Meeting Kona 🇺🇸 Design major C++26 features.
2024 Winter Meeting Japan 🇯🇵 Design major C++26 features.
2024 Summer Meeting St. Louis 🇺🇸 Design major C++26 features.
2024 Fall Meeting Wrocław 🇵🇱 C++26 major language feature freeze.
2025 Winter Meeting Hagenberg 🇦🇹 C++26 feature freeze. C++26 design is feature-complete.
2025 Summer Meeting Sofia 🇧🇬 Complete C++26 CD wording. Start C++26 CD balloting (“beta testing”).
2025 Fall Meeting Kona 🇺🇸 C++26 CD ballot comment resolution (“bug fixes”).
2026 Winter Meeting 🗺️ C++26 CD ballot comment resolution (“bug fixes”), C++26 completed.
2026 Summer Meeting 🗺️ First meeting of C++29.
2026 Fall Meeting 🗺️ Design major C++29 features.
2027 Winter Meeting 🗺️ Design major C++29 features.
2027 Summer Meeting 🗺️ Design major C++29 features.
2027 Fall Meeting 🗺️ C++29 major language feature freeze.

 


Status of Major C++ Feature Development


 

NOTE: This is a plan not a promise. Treat it as speculative and tentative.

 

Updates since the last Reddit trip report are in bold.

Feature Status Depends On Current Target (Conservative Estimate) Current Target (Optimistic Estimate)
Senders Plenary approved   C++26 C++26
Networking Require rebase on Senders Senders C++29 C++29
Linear Algebra Plenary approved   C++26 C++26
SIMD Plenary approved   C++26 C++26
Contracts Forwarded to CWG, LWG   C++26 C++26
Reflection Forwarded to CWG, LWG   C++26 C++26
Pattern Matching EWG (discussed in Wroclaw)   C++29 C++29
Profiles, Syntax EWG (discussed in Wroclaw) Currently Targeting WP WP C++29
Transactional Memory SG5 approval Currently Targeting WP WP WP

 

Last Meeting’s Reddit Trip Report.

 

If you have any questions, ask them in this thread!

Report issues by replying to the top-level stickied comment for issue reporting.

 

/u/InbalL, Library Evolution (LEWG) Chair, Israeli National Body Chair

/u/jfbastien, Evolution (EWG) Chair

/u/erichkeane, Evolution Working Group Incubator (SG17, EWGI) Chair, Evolution (EWG) Vice Chair

/u/nliber, Library Evolution Incubator (SG18) Vice Chair, Library Evolution (LEWG) Vice Chair, Admin Chair, US National Body Vice Chair

/u/hanickadot, Compile-Time programming (SG7) Chair, Evolution (EWG) Vice Chair, Czech National Body Chair

/u/FabioFracassi, Library Evolution Vice Chair

/u/c0r3ntin, Library Evolution (LEWG) Vice Chair

/u/je4d, Networking (SG4) Chair, Reflection (SG7) Vice Chair

/u/V_i_r, Numerics (SG6) Chair

/u/foonathan, Ranges (SG9) Vice Chair

/u/bigcheesegs, Tooling (SG15) Chair

/u/tahonermann, Unicode (SG16) Chair

/u/mtaf07, Contracts (SG21) Chair

/u/timur_audio, Contracts (SG21) Vice Chair

/u/eddie_nolan

… and others …