Library Evolution Report:
2020-10-27 to 2021-02-16

Published Proposal,

(CODE University of Applied Sciences)
(Argonne National Laboratory)
Issue Tracking:
ISO/IEC JTC1/SC22/WG21 14882: Programming Language — C++

This report summarizes the activities of C++'s Library Evolution group from 2020-10-27 to 2021-02-16. It is split into two sections; one focused on execution (process, logistics, and operations) and one focused on technical work (papers we processed, etc).

Readers are encouraged to also look at:

Prior Library Evolution reports:

1. Execution

1.1. Telecons

Since 2020-04, Library Evolution has held a 90 minute telecon twice a week to review papers. Typically, 1 or 2 papers are reviewed at each telecon.

The agenda for upcoming telecon reviews can be found here. For details on how to participate in telecon reviews, please view the calendar on documents.isocpp.org or contact Bryce Adelstein Lelbach.

More details on how we use telecons can be found in [P2145R1].

2020-10-27 to 2021-02-16 Since 2020-04-06
# of Telecons 14 43
# of Papers Reviewed On Telecons 28 66
Mean Telecon Attendance 30.6 31.4
Total # of Attendees 128 152
Mean Telecons Per Attendee 5.4 8.8
Median Telecons Per Attendee 2.5 3

1.2. Mailing List Reviews

In addition to telecons, we review some papers via mailing list discussions.

Mailing list reviews are critical to our operations, as they allow us to increase our paper-processing bandwidth without increasing the frequency or duration of telecons. Additionally, certain classes of papers tend to be particularly well suited for mailing list reviews, such as new proposals which tend need feedback, not decision making.

We conduct 2 to 3 mailing list reviews concurrently, and each review lasts for a few weeks.

The agenda for upcoming mailing list reviews can be found here. For details on how to participate in mailing list reviews, please contact Bryce Adelstein Lelbach.

More details on how we use mailing lists can be found in [P2145R1].

2020-10-27 to 2021-02-16 Since 2020-04-06
# of Papers Reviewed On The Mailing List 9 23

1.3. Paper Queues and Backlog

Queue # of Papers
Active 51
Ready for Mailing List Review 11
Scheduled for Mailing List Review 10
Ready for Meeting Review 4
Scheduled for Meeting Review 12
Ready for Electronic Poll 1
Scheduled for Electronic Poll 9

The above information is as of the publication of this paper. For up to date counts and more details on the various queues of papers being handled by Library Evolution, please see the paper queries page.

1.4. Electronic Polling

In 2020-10, we began the polling period for our first slate of Library Evolution electronic straw polls. The outcomes of those polls can be found in [P2262R0].

In 2021-01, we began another round of electronic polling, which is still ongoing. The polls can be found in [P2289R0].

We believe electronic straw polls are the best option for Library Evolution to make decisions given our current process. They ensure that all stakeholders have an opportunity to participate.

More details on electronic polling can be found in [P2195R0].

1.5. Prioritization

In conjunction with Library, we’ve prioritized all the papers that have been forwarded to Library, using the priority levels identified in [P0592R4] (Plan and Priorities for C++23). See the prioritized list of papers for details.

1.6. Chair Guide

We have developed a Library Evolution chairing guide, which can be found on the Library Evolution GitHub wiki

1.7. Staff

Library Evolution is organized by a team, not a single individual:

Team leadership has a number of benefits:

We hold a regular staff meeting every two weeks to discuss our operations and make plans for the future.

Additionally, the following noble individuals take minutes for Library Evolution, and deserve accolades:

2. Technical

2.1. Plenary Approved Priorities

A plenary of the C++ Committee approved [P0592R4] (Plan and Priorities for C++23). This section describes the status of the priority Standard Library features described in that plan.

Plenary Approved Priority Status
Executors Under revision. Next review expected in Spring 2021.
Coroutines Library Support Parts under review. Parts need authors and papers.
Networking At risk for C++23. Needs to advance to Library Evolution by Spring 2021.
Standard Library Modules At risk for C++23. Needs authors and papers.

2.1.1. Executors

In 2020-11, we concluded a series of electronic polls on Executors. The outcomes of those polls can be found in [P2262R0].

The Executors authors are in the process of revising [P0443R14] according to the outcomes of those polls. We expect to resume a Library Evolution review of Executors in Sp of 2021 once the revised paper is published.

Additionally, we reviewed the following papers relating to Executors:

2.1.2. Coroutines Library Support

A revision of [P2168R1] (std::generator) was recently received and will be reviewed in 2021-03.

Otherwise, no further work on the Coroutines Library Support has occurred since Spring 2020 due to a lack of new papers and a lack of revisions of existing papers.

Some of the other work on Coroutines Library Support depends on Executors and may be blocked for now.

2.1.3. Networking

Work on Networking has been proceeding in the Networking Study Group, not Library Evolution. This work depends on Executors, but large parts of it should be able to proceed independent of Executors.

This plenary-approved priority is at risk of missing C++23 unless it advances to Library Evolution by Spring 2021.

2.1.4. Standard Library Modules

No further work on Standard Library Modules occurred since the Spring 2020 due to a lack of new papers and a lack of revisions of existing papers.

This plenary-approved priority is at risk of missing C++23 unless authors actively drive the work.

2.2. Other Highlights

2.2.1. Ranges

We reviewed [P2214R0] (A Plan for C++23 Ranges), a joint effort from a series of authors to propose a roadmap for future Ranges additions. Library Evolution was generally supportive of the direction proposed by the paper.

We also conducted a final review of [P2210R1] (Superior String Splitting), and advanced it to electronic polling. It was advanced after the start of the current electronic polling period, so it will not be polled until Spring 2021.

Addtionally, we reviewed the following Ranges papers at telecons:

We are making a lot of progress in this area because there are many active and experienced authors collaborating on this work. Feedback from Library Evolution is promptly addressed and the authors are regularly present at Library Evolution telecons, so review of this work proceeds smoothly. It is likely that a good portion of this work will be able to advance to Library in Spring 2021.

2.2.2. Formatting and Printing

We conducted a final review of [P2216R2] (std::format improvements) and started electronic polling on it in 2021-01. [P2216R2] does contain breaking changes, however no current implementation exists, so there is no existing usage that will actually be affected.

Work progresses rapidly on [P2093R2] (Formatted Output), thanks to a highly responsive author. We have seen multiple revisions of this paper in the past year and it is likely that it will be ready to advance to Library in Spring 2021.

Additionally, a few papers proposing additions or fixes to std::format were reviewed:

2.2.3. Text and Unicode

Work on Text and Unicode primarily occurs in the Text and Unicode Study Group, however a few papers are advancing to Library Evolution.

We conducted a mailing list and telecon review of [P1885R3] (Naming Text Encodings to Demystify Them). We expect to see the paper again.

2.2.4. Freestanding

We conducted a final review of [P1642R5] (Freestanding [utilities], [ranges], and [iterators]) and started electronic polling on it in 2021-01.

2.3. Other Work

The following papers were reviewed at Library Evolution telecons and in 2021-01 we started electronic polls to forward them to Library Working Group (see [P2289R0] for details):

The following papers were reviewed at Library Evolution telecons:

The following papers were reviewed on the mailing list:


Informative References

Ryan McDougall, Matt Calabrese. any_invocable. 3 September 2020. URL: https://wg21.link/p0288r7
Matthias Kretz. Integrating simd with parallel algorithms. 13 January 2020. URL: https://wg21.link/p0350r4
Jared Hoberock, Michael Garland, Chris Kohlhoff, Chris Mysen, H. Carter Edwards, Gordon Brown, D. S. Hollman. A Unified Executors Proposal for C++. 15 September 2020. URL: https://wg21.link/p0443r14
Matt Bentley. Introduction of std::colony to the standard library. 15 January 2021. URL: https://wg21.link/p0447r12
Peter Sommerlad. A strstream replacement using span<charT> as buffer. 21 January 2019. URL: https://wg21.link/p0448r2
Ville Voutilainen. To boldly suggest an overall plan for C++23. 25 November 2019. URL: https://wg21.link/p0592r4
Zhihao Yuan. auto(x): decay-copy in the language. 15 December 2020. URL: https://wg21.link/p0849r6
Chris Kennelly, Andrew Hunter. Size feedback in operator new. 1 March 2020. URL: https://wg21.link/p0901r6
Chris Kennelly, Mark Zeren. basic_string::resize_default_init. 7 October 2019. URL: https://wg21.link/p1072r5
Attila Fehér, Alisdair Meredith. Add Test Polymorphic Memory Resource to the Standard Library. 7 October 2019. URL: https://wg21.link/p1160r1
Corentin Jabot, Eric Niebler, Casey Carter. ranges::to: A function to convert any range to a container. 12 October 2020. URL: https://wg21.link/p1206r2
Aaryaman Sagar. Remove return type deduction in std::apply. 7 October 2018. URL: https://wg21.link/p1317r0
Corentin Jabot. Iterators pair constructors for stack and queue. 18 January 2021. URL: https://wg21.link/p1425r2
Hans Boehm. Byte-wise atomic memcpy. 14 December 2020. URL: https://wg21.link/p1478r6
Ben Craig. Freestanding Library: Easy [utilities], [ranges], and [iterators]. 12 July 2020. URL: https://wg21.link/p1642r4
Ben Craig. Freestanding Library: Easy [utilities], [ranges], and [iterators]. 10 December 2020. URL: https://wg21.link/p1642r5
Corentin Jabot. Naming Text Encodings to Demystify Them. 14 September 2020. URL: https://wg21.link/p1885r3
Corentin Jabot. Naming Text Encodings to Demystify Them. 22 November 2020. URL: https://wg21.link/p1885r4
Jonathan Coe, Antony Peacock. An indirect value-type for C++. 28 October 2020. URL: https://wg21.link/p1950r1
Logan R. Smith. Default Arguments for pair's Forwarding Constructor. 17 November 2019. URL: https://wg21.link/p1951r0
Konstantin Boyarinov, Sergey Vinogradov; Ruslan Arutyunyan. Heterogeneous erasure overloads for associative containers. 15 September 2020. URL: https://wg21.link/p2077r1
Victor Zverovich. Formatted output. 15 October 2020. URL: https://wg21.link/p2093r2
Zhihao Yuan. invoke_r. 15 May 2020. URL: https://wg21.link/p2136r1
Ville Voutilainen. Rules of Design <=> Specification engagement. 15 September 2020. URL: https://wg21.link/p2138r3
Bryce Adelstein Lelbach, Titus Winters, Fabio Fracassi, Billy Baker, Nevin Liber, JF Bastien, David Stone, Botond Ballo, Tom Honermann. Evolving C++ Remotely. 15 September 2020. URL: https://wg21.link/p2145r1
CJ Johnson, Bryce Adelstein Lelbach. Library Evolution Design Guidelines. 23 September 2020. URL: https://wg21.link/p2148r0
Corentin Jabot. views::enumerate. 22 November 2020. URL: https://wg21.link/p2164r3
Corentin Jabot, Lewis Baker. generator: A Synchronous Coroutine Generator Compatible With Ranges. 18 January 2021. URL: https://wg21.link/p2168r1
JF Bastien, Alisdair Meredith. Removing Garbage Collection Support. 14 December 2020. URL: https://wg21.link/p2186r1
Dusan B. Jovanovic. std::valstat - Returns Handling. 13 October 2020. URL: https://wg21.link/p2192r3
Bryce Adelstein Lelbach. Electronic Straw Polls. 15 September 2020. URL: https://wg21.link/p2195r0
Michael Tesch, Victor Zverovich. Formatting for std::complex. 22 August 2020. URL: https://wg21.link/p2197r0
Barry Revzin. Superior String Splitting. 5 January 2021. URL: https://wg21.link/p2210r1
Barry Revzin, Conor Hoekstra, Tim Song. A Plan for C++23 Ranges. 15 October 2020. URL: https://wg21.link/p2214r0
Victor Zverovich. std::format improvements. 15 January 2021. URL: https://wg21.link/p2216r2
Marc Mutz. More flexible optional::value_or(). 15 September 2020. URL: https://wg21.link/p2218r0
Kirk Shoop. redefine properties in P0443. 15 September 2020. URL: https://wg21.link/p2220r0
Kirk Shoop. define P0443 cpos with tag_invoke. 15 September 2020. URL: https://wg21.link/p2221r0
Barry Revzin. Add further constexpr support for optional/variant. 14 October 2020. URL: https://wg21.link/p2231r0
Bryce Adelstein Lelbach. 2020 Fall Library Evolution Poll Outcomes. 2 December 2020. URL: https://wg21.link/p2262r0
Kevlin Henney. Renaming any_invocable. 6 December 2020. URL: https://wg21.link/p2265r0
Barry Revzin. cbegin should always return a constant iterator. 10 January 2021. URL: https://wg21.link/p2278r0
Bryce Adelstein Lelbach. 2021 Winter Library Evolution Polls. 1 February 2021. URL: https://wg21.link/p2289r0