C++20 to be Bjarne around Christmas: Standard approved, on track for EOY release


With the technical work for C++20 completed in February, the standard has now been technically approved, meaning that formal publication can be expected to happen around the end of 2020. 

ISO C++ committee chair Herb Sutter took to his blog at the weekend to inform the programming language’s community that the Draft International Standard ballot for C++20 has been passed – unanimously – on Friday. 

“As always, we are not counting on ISO’s publication speed to call it C++20, it’s C++20 because WG21 completed technical work in February,” Sutter wrote. 

“If for some reason ISO needs until January to get it out the door and assigns it a 2021 publication date, the standard will still be referred to as C++20.” The latter is mainly due to it already being the industry name, which Sutter sees verified by the number of search hits for the term, which currently comes in at around 350,000 results.

Looking ahead, the schedule for the next standard iteration still stands, although travel restrictions and meeting bans might lead to it shipping with less features than expected. “The pandemic disruptions have impacted all our lives,” Sutter wrote, “and reduced the time and energy WG21 participants have for standards work as well as our capacity to make progress face to face three times a year, and this has slowed down development of features we’re working on now that will land in { C++23, C++26, C++29 }.”

Currently, the first week of June 2021 is seen as the earliest possibility to get back to in-person meetings, since standardisation organisations INCITS and ISO SC22 both have corresponding bans in place. However, those are subject to further extension, which is why the groups responsible for moving various aspects of the programming language forward have started meeting virtually, with plenaries to approve changes planned to take off in November.

For now, the focus for C++23 is on the library facilities the committee has identified as “must-work-on-first” items. The major point on that list is support for coroutines. Devs will already have heard about this feature, since it indeed made its way into C++20, but a lack of coroutine-aware types in the standard library means they can’t actually be used right now. 

Once that’s off the plate, another important item is modularisation or more specifically “a specification of how the functionality of the standard library is exposed as modules”, now that the language has learned the Module concept. The C++ team also looks to “deliver” executors which it has been working on for a while to improve asynchronicity, and help with audio and networking scenarios. 

The latter has been deemed especially tricky, which is why lowering the barrier of writing C++ applications made the “must” list as well.  A technical specification to extend the standard library accordingly has already been available since 2017 and went through some iterations, making it a good starting point for networking standardisation. One of the goals with this is to provide developers with an easier way of writing cross-platform http code that needs no additional libraries to be built. After those main issues have been tackled, reflection, pattern matching, and contracts are key areas the C++ committee hopes to make progress on before looking into completely new additions.

Though some of the “must” items will surely prove tricky to get right until 2023, especially with the lack of in-person meetings, not completing them isn’t planned to have any effects on the release plan. The “overall plan for C++23” states in that context that “C++23 will ship on time” – “what is ready to ship can ship; what is not, will need to take the next train or a separate ship vehicle.” The next release train will leave in 2026.