libc++ C++2b Status

Overview

In November 2020, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as “C++2b” (probably to be C++23).

This page shows the status of libc++; the status of clang’s support of the language features is here.

Attention

Features in unreleased drafts of the standard are subject to change.

The groups that have contributed papers:

  • CWG - Core Language Working group

  • LWG - Library working group

  • SG1 - Study group #1 (Concurrency working group)

Note

“Nothing to do” means that no library changes were needed to implement this change.

Paper Status

Paper #

Group

Paper Name

Meeting

Status

First released version

P0881R7

LWG

A Proposal to add stacktrace library

Autumn 2020

P0943R6

LWG

Support C atomics in C++

Autumn 2020

P1048R1

LWG

A proposal for a type trait to detect scoped enumerations

Autumn 2020

Complete

12.0

P1679R3

LWG

string contains function

Autumn 2020

Complete

12.0

P1682R3

LWG

std::to_underlying for enumerations

February 2021

Complete

13.0

P2017R1

LWG

Conditionally borrowed ranges

February 2021

P2160R1

LWG

Locks lock lockables

February 2021

P2162R2

LWG

Inheriting from std::variant

February 2021

Complete

13.0

P2212R2

LWG

Relax Requirements for time_point::clock

February 2021

P2259R1

LWG

Repairing input range adaptors and counted_iterator

February 2021

P0401R6

LWG

Providing size feedback in the Allocator interface

June 2021

P0448R4

LWG

A strstream replacement using span<charT> as buffer

June 2021

P1132R8

LWG

out_ptr - a scalable output pointer abstraction

June 2021

P1328R1

LWG

Making std::type_info::operator== constexpr

June 2021

P1425R4

LWG

Iterators pair constructors for stack and queue

June 2021

Complete

14.0

P1518R2

LWG

Stop overconstraining allocators in container deduction guides

June 2021

Complete

13.0

P1659R3

LWG

starts_with and ends_with

June 2021

P1951R1

LWG

Default Arguments for pair Forwarding Constructor

June 2021

Complete

14.0

P1989R2

LWG

Range constructor for std::string_view

June 2021

Complete

14.0

P2136R3

LWG

invoke_r

June 2021

P2166R1

LWG

A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr

June 2021

Complete

13.0

P0288R9

LWG

any_invocable

October 2021

P0798R8

LWG

Monadic operations for std::optional

October 2021

Complete

14.0

P0849R8

LWG

auto(x): DECAY_COPY in the language

October 2021

Complete

14.0

P1072R10

LWG

basic_string::resize_and_overwrite

October 2021

Complete

14.0

P1147R1

LWG

Printing volatile Pointers

October 2021

Complete

14.0

P1272R4

LWG

Byteswapping for fun&&nuf

October 2021

Complete

14.0

P1675R2

LWG

rethrow_exception must be allowed to copy

October 2021

P2077R3

LWG

Heterogeneous erasure overloads for associative containers

October 2021

P2251R1

LWG

Require span & basic_string_view to be Trivially Copyable

October 2021

Complete

14.0

P2301R1

LWG

Add a pmr alias for std::stacktrace

October 2021

P2321R2

LWG

zip

October 2021

In Progress

P2340R1

LWG

Clarifying the status of the ‘C headers’

October 2021

P2393R1

LWG

Cleaning up integer-class types

October 2021

P2401R0

LWG

Add a conditional noexcept specification to std::exchange

October 2021

Complete

14.0

Library Working Group Issues Status

Issue #

Issue Name

Meeting

Status

First released version

Labels

2839

Self-move-assignment of library types, again

November 2020

Nothing To Do

3117

Missing packaged_task deduction guides

November 2020

3143

monotonic_buffer_resource growth policy is unclear

November 2020

3195

What is the stored pointer value of an empty weak_ptr?

November 2020

Nothing To Do

3211

std::tuple<> should be trivially constructible

November 2020

Complete

9.0

3236

Random access iterator requirements lack limiting relational operators domain to comparing those from the same range

November 2020

Nothing To Do

ranges

3265

move_iterator’s conversions are more broken after P1207

November 2020

Fixed by LWG3435

3435

three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>

November 2020

Complete

13.0

3432

Missing requirement for comparison_category

November 2020

spaceship

3447

Deduction guides for take_view and drop_view have different constraints

November 2020

Complete

14.0

3450

The const overloads of take_while_view::begin/end are underconstrained

November 2020

ranges

3464

istream::gcount() can overflow

November 2020

2731

Existence of lock_guard<MutexTypes...>::mutex_type typedef unclear

November 2020

Complete

5.0

2743

P0083R3 node_handle private members missing “exposition only” comment

November 2020

Nothing To Do

2820

Clarify <cstdint> macros

November 2020

Nothing To Do

3120

Unclear behavior of monotonic_buffer_resource::release()

November 2020

3170

is_always_equal added to std::allocator makes the standard library treat derived types as always equal

November 2020

3036

polymorphic_allocator::destroy is extraneous

November 2020

3171

LWG2989 breaks directory_entry stream insertion

November 2020

Complete

14.0

3306

ranges::advance violates its preconditions

November 2020

Complete

14.0

ranges

3403

Domain of ranges::ssize(E) doesn’t match ranges::size(E)

November 2020

ranges

3404

Finish removing subrange’s conversions from pair-like

November 2020

ranges

3405

common_view’s converting constructor is bad, too

November 2020

Complete

14.0

ranges

3406

elements_view::begin() and elements_view::end() have incompatible constraints

November 2020

ranges

3419

[algorithms.requirements]/15 doesn’t reserve as many rights as it intends to

November 2020

Nothing To Do

3420

cpp17-iterator should check that the type looks like an iterator first

November 2020

Complete

14.0

ranges

3421

Imperfect ADL emulation for boolean-testable

November 2020

Nothing To Do

ranges

3425

condition_variable_any fails to constrain its Lock parameters

November 2020

Nothing To Do

3426

operator<=>(const unique_ptr<T, D>&, nullptr_t) can’t get no satisfaction

November 2020

spaceship

3427

operator<=>(const shared_ptr<T>&, nullptr_t) definition ill-formed

November 2020

spaceship

3428

single_view’s in place constructor should be explicit

November 2020

Complete

14.0

ranges

3434

ios_base never reclaims memory for iarray and parray

November 2020

Nothing To Do

3437

__cpp_lib_polymorphic_allocator is in the wrong header

November 2020

Complete

14.0

3446

indirectly_readable_traits ambiguity for types with both value_type and element_type

November 2020

Complete

14.0

ranges

3448

transform_view’s sentinel<false> not comparable with iterator<true>

November 2020

ranges

3449

take_view and take_while_view’s sentinel<false> not comparable with their const iterator

November 2020

ranges

3453

Generic code cannot call ranges::advance(i, s)

November 2020

Nothing To Do

ranges

3455

Incorrect Postconditions on unique_ptr move assignment

November 2020

Nothing To Do

3460

Unimplementable noop_coroutine_handle guarantees

November 2020

Complete

14.0

3461

convertible_to’s description mishandles cv-qualified void

November 2020

Nothing To Do

3465

compare_partial_order_fallback requires F < E

November 2020

Complete

14.0

spaceship

3466

Specify the requirements for promise/future/shared_future consistently

November 2020

Nothing To Do

3467

bool can’t be an integer-like type

November 2020

Complete

14.0

3472

counted_iterator is missing preconditions

November 2020

Complete

14.0

ranges

3473

Normative encouragement in non-normative note

November 2020

Nothing To Do

format

3474

Nesting join_views is broken because of CTAD

November 2020

ranges

3476

thread and jthread constructors require that the parameters be move-constructible but never move construct the parameters

November 2020

3477

Simplify constraints for semiregular-box

November 2020

ranges

3482

drop_view’s const begin should additionally require sized_range

November 2020

Complete

14.0

ranges

3483

transform_view::iterator’s difference is overconstrained

November 2020

Complete

14.0

ranges

3391

Problems with counted_iterator/move_iterator::base() const &

February 2021

ranges

3433

subrange::advance(n) has UB when n < 0

February 2021

Complete

14.0

ranges

3490

ranges::drop_while_view::begin() is missing a precondition

February 2021

Nothing To Do

ranges

3492

Minimal improvements to elements_view::iterator

February 2021

ranges

3494

Allow ranges to be conditionally borrowed

February 2021

Superseded by P2017R1

ranges

3495

constexpr launder makes pointers to inactive members of unions usable

February 2021

Nothing To Do

3500

join_view::iterator::operator->() is bogus

February 2021

ranges

3502

elements_view should not be allowed to return dangling reference

February 2021

ranges

3505

split_view::outer-iterator::operator++ misspecified

February 2021

ranges

2774

std::function construction vs assignment

June 2021

2818

::std:: everywhere rule needs tweaking

June 2021

Nothing To Do

2997

LWG 491 and the specification of {forward_,}list::unique

June 2021

3410

lexicographical_compare_three_way is overspecified

June 2021

spaceship

3430

std::fstream & co. should be constructible from string_view

June 2021

3462

§[formatter.requirements]: Formatter requirements forbid use of fc.arg()

June 2021

format

3481

viewable_range mishandles lvalue move-only views

June 2021

Superseded by P2415R2

ranges

3506

Missing allocator-extended constructors for priority_queue

June 2021

Complete

14.0

3517

join_view::iterator’s iter_swap is underconstrained

June 2021

ranges

3518

Exception requirements on char trait operations unclear

June 2021

Nothing To Do

3519

Incomplete synopses for <random> classes

June 2021

3520

iter_move and iter_swap are inconsistent for transform_view::iterator

June 2021

Complete

14.0

ranges

3521

Overly strict requirements on qsort and bsearch

June 2021

Nothing To Do

3522

Missing requirement on InputIterator template parameter for priority_queue constructors

June 2021

Complete

14.0

ranges

3523

iota_view::sentinel is not always iota_view’s sentinel

June 2021

ranges

3526

Return types of uses_allocator_construction_args unspecified

June 2021

3527

uses_allocator_construction_args handles rvalue pairs of rvalue references incorrectly

June 2021

3528

make_from_tuple can perform (the equivalent of) a C-style cast

June 2021

3529

priority_queue(first, last) should construct c with (first, last)

June 2021

Complete

14.0

3530

BUILTIN-PTR-MEOW should not opt the type out of syntactic checks

June 2021

3532

split_view<V, P>::inner-iterator<true>::operator++(int) should depend on Base

June 2021

ranges

3533

Make base() const & consistent across iterator wrappers that supports input_iterators

June 2021

Complete

14.0

ranges

3536

Should chrono::from_stream() assign zero to duration for failure?

June 2021

chrono

3539

format_to must not copy models of output_iterator<const charT&>

June 2021

format

3540

§[format.arg] There should be no const in basic_format_arg(const T* p)

June 2021

Complete

14.0

format

3541

indirectly_readable_traits should be SFINAE-friendly for all types

June 2021

Complete

14.0

ranges

3542

basic_format_arg mishandles basic_string_view with custom traits

June 2021

Complete

14.0

format

3543

Definition of when counted_iterators refer to the same sequence isn’t quite right

June 2021

Nothing To Do

ranges

3544

format-arg-store::args is unintentionally not exposition-only

June 2021

Complete

14.0

format

3546

common_iterator’s postfix-proxy is not quite right

June 2021

ranges

3548

shared_ptr construction from unique_ptr should move (not copy) the deleter

June 2021

3549

view_interface is overspecified to derive from view_base

June 2021

Complete

14.0

ranges

3551

borrowed_{iterator,subrange}_t are overspecified

June 2021

Nothing To Do

ranges

3552

Parallel specialized memory algorithms should require forward iterators

June 2021

3553

Useless constraint in split_view::outer-iterator::value_type::begin()

June 2021

ranges

3555

{transform,elements}_view::iterator::iterator_concept should consider const-qualification of the underlying range

June 2021

ranges

2191

Incorrect specification of match_results(match_results&&)

October 2021

Nothing To Do

2381

Inconsistency in parsing floating point numbers

October 2021

2762

unique_ptr operator*() should be noexcept

October 2021

3121

tuple constructor constraints for UTypes&&... overloads

October 2021

3123

duration constructor from representation shouldn’t be effectively non-throwing

October 2021

chrono

3146

Excessive unwrapping in std::ref/cref

October 2021

Complete

14.0

3152

common_type and common_reference have flaws in common

October 2021

3293

move_iterator operator+() has incorrect constraints

October 2021

ranges

3361

safe_range<SomeRange&> case

October 2021

Nothing To Do

ranges

3392

ranges::distance() cannot be used on a move-only iterator with a sized sentinel

October 2021

Complete

14.0

ranges

3407

Some problems with the wording changes of P1739R4

October 2021

ranges

3422

Issues of seed_seq’s constructors

October 2021

Complete

14.0

3470

convertible-to-non-slicing seems to reject valid case

October 2021

Complete

14.0

ranges

3480

directory_iterator and recursive_directory_iterator are not C++20 ranges

October 2021

Complete

14.0

ranges

3498

Inconsistent noexcept-specifiers for basic_syncbuf

October 2021

3535

join_view::iterator::iterator_category and ::iterator_concept lie

October 2021

ranges

3554

chrono::parse needs const charT* and basic_string_view<charT> overloads

October 2021

chrono

3557

The static_cast expression in convertible_to has the wrong operand

October 2021

Complete

14.0

3559

Semantic requirements of sized_range is circular

October 2021

Nothing To Do

ranges

3560

ranges::equal and ranges::is_permutation should short-circuit for sized_ranges

October 2021

ranges

3561

Issue with internal counter in discard_block_engine

October 2021

3563

keys_view example is broken

October 2021

ranges

3566

Constraint recursion for operator<=>(optional<T>, U)

October 2021

spaceship

3567

Formatting move-only iterators take two

October 2021

format

3568

basic_istream_view needs to initialize value_

October 2021

ranges

3570

basic_osyncstream::emit should be an unformatted output function

October 2021

3571

flush_emit should set badbit if the emit call fails

October 2021

3572

copyable-box should be fully constexpr

October 2021

Complete

14.0

ranges

3573

Missing Throws element for basic_string_view(It begin, End end)

October 2021

Complete

14.0

3574

common_iterator should be completely constexpr-able

October 2021

Complete

14.0

ranges

3580

iota_view’s iterator’s binary operator+ should be improved

October 2021

Complete

14.0

ranges

3581

The range constructor makes basic_string_view not trivially move constructible

October 2021

Complete

14.0

ranges

3585

variant converting assignment with immovable alternative

October 2021

3589

The const lvalue reference overload of get for subrange does not constrain I to be copyable when N == 0

October 2021

Complete

14.0

ranges

3590

split_view::base() const & is overconstrained

October 2021

ranges

3591

lazy_split_view<input_view>::inner-iterator::base() && invalidates outer iterators

October 2021

ranges

3592

lazy_split_view needs to check the simpleness of Pattern

October 2021

ranges

3593

Several iterators’ base() const & and lazy_split_view::outer-iterator::value_type::end() missing noexcept

October 2021

ranges

3595

Exposition-only classes proxy and postfix-proxy for common_iterator should be fully constexpr

October 2021

Complete

14.0

ranges

3645

resize_and_overwrite is overspecified to call its callback with lvalues

Not voted in

Complete

14.0