2020 Library Evolution Report

Published Proposal,

Issue Tracking:
ISO/IEC JTC1/SC22/WG21 14882: Programming Language — C++

This report summarizes the activities of C++'s Library Evolution group from 2020-02 through 2020-10. 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:

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.

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

# of Telecons 29
# of Papers Reviewed On Telecons 38
Mean Telecon Attendance 31.7
Total # of Attendees 132
Mean Telecons Per Attendee 7
Median Telecons Per Attendee 3

1.2. Mailing List Reviews

Over the summer, we began conducting reviews of papers on the Library Evolution mailing list. We conduct 2 to 3 reviews concurrently, and each review lasts for a few weeks.

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.

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

# of Papers Reviewed On The Mailing List 14

1.3. Electronic Polling

In 2020-10, we began the polling period for our first slate of Library Evolution electronic straw polls. 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.4. Chair Guide

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

1.5. 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

2.1.1. Executors

During the Summer of 2020, Library Evolution conducted an extensive review of [P0443R13] Executors. Six review groups were formed, each of which focused on a particular aspect of the proposal and then wrote a report with their findings which was presented at a telecon:

Additionally, we reviewed the following papers relating to Executors at telecons:

In 2020-10, we started taking electronic polls on Executors; the results are expected in 2020-11.

2.1.2. Networking

Work on Networking has been proceeding in the Networking Study Group, not Library Evolution. We hope to begin a Library Evolution review of Networking for C++23 in the first half of 2021.

We did review [P2161R2] (Remove Default Candidate Executor), which proposes changes to the Networking Technical Specification. In 2020-10 we began electronic polling to advance this paper.

2.1.3. Coroutines Library Support

In the Spring of 2020, we discussed the roadmap for Coroutines Library Support at a Library Evolution telecon. We also discussed the following papers at telecons:

No further work on Coroutines Library Support occurred after the Spring of 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.1.4. Standard Library Modules

In the Spring of 2020, we discussed the existing proposal for Standard Library Modules ([P0581R1]) as well as a paper discussing the merits of modularizing the Standard Library ([P2172R0]).

No further work on Standard Librarhy Modules occurred after the Spring of 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. Formatting and Printing

We reviewed a proposed output counterpart to std::format, [P2093R1] (Formatted Output). The response was positive and we expect to see additional work in this area.

Additionally, a few papers proposing additions or fixes to std::format are on our agenda for 2020-11 telecons:

2.2.2. Ranges

In 2020-10, we will begin reviewing a group proposal suggesting a set of range features for C++23, [P2214R0], at Library Evolution telecons.

We reviewed the following ranges papers at telecons:

We reviewed the following ranges papers on the mailing list:

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.

In 2020-11, we will begin a mailing list review of [P1885R3] Naming Text Encodings to Demystify Them.

2.2.4. Freestanding

We reviewed a set of coupled papers proposing a reorganization and enhancement of freestanding on Library Evolution telecons:

In 2020-11, we’ll be reviewing a revision of [P1642R4] at a telecon.

2.3. Other Work

The following papers were reviewed at Library Evolution telecons and in 2020-10 we started electronic polls to forward them to Library Working Group:

The following papers were reviewed at Library Evolution telecons:

The following papers were reviewed on the mailing list:


Informative References

INCITS. regex should support allocators. Tentatively NAD. URL: https://wg21.link/lwg1396
Jonathan Wakely. std::fstream & co. should be constructible from string_view. Open. URL: https://wg21.link/lwg3430
Ville Voutilainen. Aggregate-paren-init breaks direct-initializing a tuple or optional from {aggregate-member-value}. Tentatively NAD. URL: https://wg21.link/lwg3440
Johel Ernesto Guerrero Peña. Inconsistently explicit deduction guides. New. URL: https://wg21.link/lwg3451
Alisdair Meredith. pointer_traits::pointer_to should be constexpr. LEWG. URL: https://wg21.link/lwg3454
Moritz Klammler. Allow Seeding Random Number Engines With std::random_device. 11 February 2016. URL: https://wg21.link/p0205r0
Jared Hoberock, Michael Garland, Chris Kohlhoff, Chris Mysen, Carter Edwards, Gordon Brown, D. S. Hollman, Lee Howes, Kirk Shoop, Lewis Baker, Eric Niebler. A Unified Executors Proposal for C++. 2 March 2020. URL: https://wg21.link/p0443r13
Marshall Clow, Beman Dawes, Gabriel Dos Reis, Stephan T. Lavavej, Billy O’Neal, Bjarne Stroustrup, Jonathan Wakely. Standard Library Modules. 11 February 2018. URL: https://wg21.link/p0581r1
Giuseppe D'Angelo. A proposal for a type trait to detect narrowing conversions. 23 September 2020. URL: https://wg21.link/p0870r4
Thomas Köppe, Davis Herring. A new specification for std::generate_canonical. 12 February 2018. URL: https://wg21.link/p0952r0
Lewis Baker, Gor Nishanov. Add lazy coroutine (coroutine task) type. 7 October 2018. URL: https://wg21.link/p1056r1
Steve Downey. A view of 0 or 1 elements: views::maybe. 5 April 2020. URL: https://wg21.link/p1255r6
Lewis Baker. Coroutine concepts and metafunctions. 7 October 2018. URL: https://wg21.link/p1288r0
David Olsen, Michał Dominiak. Extended floating-point types and standard names. 14 June 2020. URL: https://wg21.link/p1467r4
Hans Boehm. Byte-wise atomic memcpy. 18 November 2019. URL: https://wg21.link/p1478r3
Ben Craig. Freestanding Library: Rewording the Status Quo. 11 April 2020. URL: https://wg21.link/p1641r3
Ben Craig. Freestanding Library: Easy [utilities], [ranges], and [iterators]. 25 May 2020. URL: https://wg21.link/p1642r3
Ben Craig. Freestanding Library: Easy [utilities], [ranges], and [iterators]. 12 July 2020. URL: https://wg21.link/p1642r4
Mark Hoemmen, D. S. Hollman, Christian Trott, Daniel Sunderland, Nevin Liber, Siva Rajamanickam, Li-Ta Lo, Damien Lebrun-Grandie, Graham Lopez, Peter Caday, Sarah Knepper, Piotr Luszczek, Timothy Costa. A free function linear algebra interface based on the BLAS. 13 January 2020. URL: https://wg21.link/p1673r2
Michael Wong, Phillip Ratzloff, Richard Dosselmann, Michael Wong, Matthew Galati, Andrew Lumsdaine, Jens Maurer, Domagoj Saric, Jesun Firoz, Kevin Deweese. Graph Library. 13 January 2020. URL: https://wg21.link/p1709r2
Corentin Jabot. Naming Text Encodings to Demystify Them. 14 September 2020. URL: https://wg21.link/p1885r3
Alexander Zaitsev. Making std::stack constexpr. 7 October 2019. URL: https://wg21.link/p1924r0
Alexander Zaitsev. Making std::queue constexpr. 7 October 2019. URL: https://wg21.link/p1925r0
Alexander Zaitsev. Making std::priority_queue constexpr. 7 October 2019. URL: https://wg21.link/p1926r0
Daniil Goncharov, Antony Polukhin. Add Constexpr Modifiers to Functions in cstring and cwchar Headers. 26 May 2020. URL: https://wg21.link/p1944r1
Daniil Goncharov, Antony Polukhin. Add operator[] to std::initializer_list. 26 May 2020. URL: https://wg21.link/p1990r1
Andrzej Krzemieński. String's gratuitous assignment. 15 June 2020. URL: https://wg21.link/p2037r1
Victor Zverovich. Formatted output. 18 July 2020. URL: https://wg21.link/p2093r1
Walter E Brown, Bob Steagall. Proposing std::is_specialization_of. 11 April 2020. URL: https://wg21.link/p2098r1
Zhihao Yuan. invoke<R>. 2 March 2020. URL: https://wg21.link/p2136r0
Ville Voutilainen. Rules of Design <=> Specification engagement. 15 September 2020. URL: https://wg21.link/p2138r3
Alisdair Meredith. Reviewing Deprecated Facilities of C++20 for C++23. 15 June 2020. URL: https://wg21.link/p2139r1
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
Amanda Kornoushenko. Modern std::byte stream IO for C++. 22 July 2020. URL: https://wg21.link/p2146r2
Robert Leahy. Remove Default Candidate Executor. 14 July 2020. URL: https://wg21.link/p2161r2
Barry Revzin. Inheriting from std::variant (resolving LWG3052). 14 August 2020. URL: https://wg21.link/p2162r1
Corentin Jabot. views::enumerate. 13 September 2020. URL: https://wg21.link/p2164r2
Corentin Jabot. Compatibility between tuple and tuple-like objects. 14 July 2020. URL: https://wg21.link/p2165r1
Yuriy Chernyshov. A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr. 7 September 2020. URL: https://wg21.link/p2166r1
Corentin Jabot, Lewis Baker. generator: A Synchronous Coroutine Generator Compatible With Ranges. 16 May 2020. URL: https://wg21.link/p2168r0
Corentin Jabot. What do we want from a modularized Standard Library?. 16 May 2020. URL: https://wg21.link/p2172r0
David Olsen, Ruslan Arutyunyan, Michael J. Voss, Michał Dominiak, Chris Kohlhoff, D.S. Hollman, Kirk Shoop, Inbal Levi. Executors Review: Properties. 14 July 2020. URL: https://wg21.link/p2183r0
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
Gašper Ažman, Tony van Eerd, Thomas Rodgers, Tomasz Kamiński, Corentin Jabot, Robert Leahy, Gordon Brown, Kirk Shoop, Eric Niebler, Dietmar Kühl. Senders/Receivers group Executors review report. 15 July 2020. URL: https://wg21.link/p2202r0
Ryan McDougall, Tomasz Kamiński, Conor Hoekstra, Bryan St. Amour. LEWG Executors Customization Point Report. 15 July 2020. URL: https://wg21.link/p2203r0
Inbal Levi, Ruslan Arutyunyan, Zach Laine, Tom Scogland, Dmitri Mokhov, Chris Kohlhoff, Daisy Hollman, Jared Hoberock. Executors Review - Polymorphic Executor. 19 August 2020. URL: https://wg21.link/p2205r0
Ruslan Arutyunyan, Ben Craig, Guy Davidson, Anuya Welling, Michael Voss, Tom Scogland, Chris Kohlhoff, Gordon Brown, Lee Howes. Executors Thread Pool review report. 2 September 2020. URL: https://wg21.link/p2206r0
Guy Davidson, Ben Craig, Robert Leahy, Michał Dominiak, Alexey Kukanov, Hartmut Kaiser, Daisy Hollman, Jared Hoberock, Gordon Brown. Executors review: concepts breakout group report. 14 August 2020. URL: https://wg21.link/p2207r0
Alexey Dmitriev, Howard Hinnant. Relax Requirements for time_point::clock. 14 September 2020. URL: https://wg21.link/p2212r1
Amir Kirsh, Inbal Levi, Dan Raviv, Ran Regev, Dvir Yitzchaki, Andrei Zissu, Yehezkel Bernart, Michael Peeri. Executors Naming. 16 August 2020. URL: https://wg21.link/p2213r0
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. 6 September 2020. URL: https://wg21.link/p2216r0
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
Ville Voutilainen. Disentangling schedulers and executors. 15 October 2020. URL: https://wg21.link/p2235r0