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

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

P1989R2

LWG

Range constructor for std::string_view

June 2021

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

Library Working Group Issues Status

Issue #

Issue Name

Meeting

Status

First released version

2839

Self-move-assignment of library types, again

November 2020

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

3211

std::tuple<> should be trivially constructible

November 2020

3236

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

November 2020

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

3447

Deduction guides for take_view and drop_view have different constraints

November 2020

3450

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

November 2020

3464

istream::gcount() can overflow

November 2020

2731

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

November 2020

2743

P0083R3 node_handle private members missing “exposition only” comment

November 2020

2820

Clarify <cstdint> macros

November 2020

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

3306

ranges::advance violates its preconditions

November 2020

3403

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

November 2020

3404

Finish removing subrange’s conversions from pair-like

November 2020

3405

common_view’s converting constructor is bad, too

November 2020

3406

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

November 2020

3419

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

November 2020

3420

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

November 2020

3421

Imperfect ADL emulation for boolean-testable

November 2020

3425

condition_variable_any fails to constrain its Lock parameters

November 2020

3426

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

November 2020

3427

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

November 2020

3428

single_view’s in place constructor should be explicit

November 2020

3434

ios_base never reclaims memory for iarray and parray

November 2020

3437

__cpp_lib_polymorphic_allocator is in the wrong header

November 2020

3446

indirectly_readable_traits ambiguity for types with both value_type and element_type

November 2020

3448

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

November 2020

3449

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

November 2020

3453

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

November 2020

3455

Incorrect Postconditions on unique_ptr move assignment

November 2020

Nothing To Do

3460

Unimplementable noop_coroutine_handle guarantees

November 2020

3461

convertible_to’s description mishandles cv-qualified void

November 2020

3465

compare_partial_order_fallback requires F < E

November 2020

3466

Specify the requirements for promise/future/shared_future consistently

November 2020

3467

bool can’t be an integer-like type

November 2020

3472

counted_iterator is missing preconditions

November 2020

3473

Normative encouragement in non-normative note

November 2020

3474

Nesting join_views is broken because of CTAD

November 2020

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

3482

drop_view’s const begin should additionally require sized_range

November 2020

3483

transform_view::iterator’s difference is overconstrained

November 2020

3391

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

February 2021

3433

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

February 2021

3490

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

February 2021

3492

Minimal improvements to elements_view::iterator

February 2021

3494

Allow ranges to be conditionally borrowed

February 2021

Superseded by P2017R1

3495

constexpr launder makes pointers to inactive members of unions usable

February 2021

3500

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

February 2021

3502

elements_view should not be allowed to return dangling reference

February 2021

3505

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

February 2021

2774

std::function construction vs assignment

June 2021

2818

::std:: everywhere rule needs tweaking

June 2021

2997

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

June 2021

3410

lexicographical_compare_three_way is overspecified

June 2021

3430

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

June 2021

3462

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

June 2021

3481

viewable_range mishandles lvalue move-only views

June 2021

3506

Missing allocator-extended constructors for priority_queue

June 2021

3517

join_view::iterator’s iter_swap is underconstrained

June 2021

3518

Exception requirements on char trait operations unclear

June 2021

3519

Incomplete synopses for <random> classes

June 2021

3520

iter_move and iter_swap are inconsistent for transform_view::iterator

June 2021

3521

Overly strict requirements on qsort and bsearch

June 2021

3522

Missing requirement on InputIterator template parameter for priority_queue constructors

June 2021

3523

iota_view::sentinel is not always iota_view’s sentinel

June 2021

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

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

3533

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

June 2021

3536

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

June 2021

3539

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

June 2021

3540

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

June 2021

3541

indirectly_readable_traits should be SFINAE-friendly for all types

June 2021

3542

basic_format_arg mishandles basic_string_view with custom traits

June 2021

3543

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

June 2021

3544

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

June 2021

3546

common_iterator’s postfix-proxy is not quite right

June 2021

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

3551

borrowed_{iterator,subrange}_t are overspecified

June 2021

3552

Parallel specialized memory algorithms should require forward iterators

June 2021

3553

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

June 2021

3555

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

June 2021

Last Updated: 22-July-2021