1. Introduction
This paper describes Library Evolution leadership’s plan for the end of the C++23 design cycle. C++23 must be feature complete by 2021-02-07, approximately 3 months from the publication of this paper.
2. Focus
The C++ Committee’s time and resources are limited. We must use them wisely, which means we must focus and that means making hard decisions. If we split our focus and try to do too many things, we will be unable to accomplish anything.
Library Evolution leadership has triaged active Library Evolution papers and determined which work we believe has a reasonable chance of making it into C++23. Until the C++23 feature complete date, we will focus all our resources on that work, and defer all other work.
Our decisions were based upon:
-
The plan for C++23 that the entire Committee adopted (see P0592).
-
Our understanding of what Library Evolution feels is important.
-
How close we feel work is to Library Evolution design approval.
-
How much review and revision the work has undergone in Library Evolution recently.
-
Disposition of unresolved questions or sustained objections regarding the work.
-
Relation to new features going into C++23 or major features that went into C++20.
2.1. Objectives for C++23
The following is what we will work on delivering in the rest of the C++23 design cycle. This is by no means a guarantee that these facilities will make it into C++23.
We will commit significant time and resources to the following work, which has previously been identified as priorities:
-
P2300:
std :: execution -
Plenary adopted priority (see P0592).
-
Library Evolution voted to continue working on this in the C++23 cycle.
-
-
P2214: A Plan for C++23 Ranges
-
Improvements to C++20’s largest new library facility.
-
We would commit significant time and resources to the following work, which has previously been identified as ppriorities, however this work is currently blocked waiting for revisions or new authors:
-
P2168:
std :: generator -
Plenary adopted priority (see P0592).
-
-
P1056:
std :: lazy -
Plenary adopted priority (see P0592).
-
We will commit time and resources to the following work, which is mature, important to a wide audience, and likely to be design approved after an additional round of review:
-
P2093: Formatted Output
-
The Text and Unicode study group has approved this work and recommended it for C++23.
-
-
P0009:
std :: mdspan -
Previously design approved for the Library Fundamentals TS, being retargeted for C++23.
-
-
P1467: Extended Floating Point Types
-
Evolution is trying to advance this for C++23 and it needs Library Evolution approval.
-
Missed last ship cycle.
-
2.2. Possible for C++23
All of this work is relatively small in size, but doesn’t warrant a high priority. However, this work is a good fit for mailing list review, and thus could be advanced without taking substantial effort away from § 2.1 Objectives for C++23.
The following work has already been through at least one round of mailing list review. If mailing list reviews of this work are non-controversial, this work could be advanced directly from mailing list review to electronic polls and make it to C++23.
-
P2363: Extending Associative Containers With The Remaining Heterogeneous Overloads
-
P2249: Mixed Comparisons For Smart Pointers
-
P2283:
For Specialized Memory Algorithmsconstexpr -
P2248: Enabling List-Initialization For Algorithms
-
P0211/P0316:
std :: allocate_unique -
Missed last two ship cycles.
-
The following work involves some degree of breaking change. As such, it would probably require a telecon to advance. If it can be refined through mailing list review, there is a small possibility that telecon time could be committed to this work:
-
P2404: Relaxing
's Andstd :: equality_comparable_with
's Common Reference Requirementsstd :: three_way_comparable_with -
P2447:
And The Missing Constructorstd :: span -
P2472:
: A More Functionalstd :: make_function_ref std :: function_ref
2.3. Not for C++23
Unfortunately, there is some active work that is unlikely to get into C++23. Our time and resources are limited, so we must stop working on these things until the end of the C++23 design cycle in 2022-02. Spending effort on any of these things for C++23 would mean some of the work listed in § 2.1 Objectives for C++23 would have to be deferred until after C++23.
This work is large and will likely need multiple rounds of review and revision before it can advance:
This work was reviewed on the mailing list, and we don’t believe it can advance without a telecon review:
-
P1068: Vector API For Random Number Generation
-
P0205: Allow Seeding Random Number Engines With
std :: random_device -
P2370: Stacktrace From Exception
-
P2047: An Allocator-Aware Optional Type
This work is new and either in early review or has not been reviewed:
-
P2405:
Andstd :: nullopt_t
Should Both Havestd :: nullptr_t
Andoperator <=> operator == -
P2438:
std :: string :: substr () && -
LWG3579: Complexity Guarantees For
Andresize
Across The Libraryappend
This work is blocked waiting for revisions or new authors:
-
P2139: Reviewing Deprecated Facilities Of C++20 For C++23
-
P1288: Coroutine Concepts And Metafunctions
-
LWG3545:
Should Be SFINAE-Friendlystd :: pointer_traits
3. Telecons
We will use our weekly telecons to advance C++23 work until 2021-01-18, which is when we will start the final Library Evolution electronic polls for C++23 (see § 4 Polls).
We will not hold meetings the last two weeks of 2021 due to holidays.
As per Library Evolution decision at the end of the 2021 October supertelecon,
we will hold two day Library Evolution supertelecons in 2021-12 and 2022-01
to work on P2300 (
).
All telecons have been added to the Committee calendar and the Library Evolution wiki.
3.1. 2021-12 Library Evolution Supertelecon
-
Topic: P2300:
Library Design Review.std :: execution -
2021-12-06 (Monday), 7:00 to 9:00 and 9:30 to 11:00 Pacific
-
2021-12-07 (Tuesday), 7:00 to 9:00 and 9:30 to 11:00 Pacific
3.2. 2022-01 Library Evolution Supertelecon
-
Topic: P2300:
Library Design Review.std :: execution -
2022-01-11 (Tuesday), 7:00 to 9:00 and 9:30 to 11:00 Pacific
-
2022-01-12 (Wednesday), 7:00 to 9:00 and 9:30 to 11:00 Pacific
4. Polls
Library Evolution will conduct three electronic polling periods to advance work for C++23, one per month.
4.1. 2021-11 Polling Period
This polling period is already underway at the time of publication of this paper.
-
2021-10-31: Draft polls distributed by mailing list.
-
2021-11-01: Final Library Evolution discussion telecon on the polls.
-
2021-11-03: Start of the polling period.
-
2021-11-30: End of the polling period.
-
2021-12-03: Chairs share results and summarize outcomes.
4.2. 2021-12 Polling Period
-
2021-12-03: Draft polls distributed by mailing list.
-
2021-12-07: Final Library Evolution discussion telecon on the polls.
-
2021-12-08: Start of the polling period.
-
2022-01-07: End of the polling period.
-
2022-01-11: Chairs share results and summarize outcomes.
4.3. 2022-01 Polling Period
This is the final polling period for shipping Standard Library features for C++23.
-
2022-01-14: Draft polls distributed by mailing list.
-
2022-01-18: Final Library Evolution discussion telecon on the polls.
-
2022-01-18: Start of the polling period.
-
2022-02-04: End of the polling period.
-
2021-02-07: Chairs share results and summarize outcomes.