libc++ C++2c Status

Overview

In June 2023, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as “C++2c” (probably to be C++26).

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 #

Paper Name

Meeting

Status

First released version

Notes

P2497R0

Testing for success or failure of <charconv> functions

2023-06 (Varna)

Complete

18

P2592R3

Hashing support for std::chrono value classes

2023-06 (Varna)

P2587R3

to_string or not to_string

2023-06 (Varna)

P2562R1

constexpr Stable Sorting

2023-06 (Varna)

P2545R4

Read-Copy Update (RCU)

2023-06 (Varna)

P2530R3

Hazard Pointers for C++26

2023-06 (Varna)

P2538R1

ADL-proof std::projected

2023-06 (Varna)

Complete

18

P2495R3

Interfacing stringstreams with string_view

2023-06 (Varna)

Complete

19

P2510R3

Formatting pointers

2023-06 (Varna)

Complete

17

Implemented as a DR against C++20. (MSVC STL and libstdc++ will do the same.)

P2198R7

Freestanding Feature-Test Macros and Implementation-Defined Extensions

2023-06 (Varna)

P2338R4

Freestanding Library: Character primitives and the C library

2023-06 (Varna)

P2013R5

Freestanding Language: Optional ::operator new

2023-06 (Varna)

P2363R5

Extending associative containers with the remaining heterogeneous overloads

2023-06 (Varna)

P1901R2

Enabling the Use of weak_ptr as Keys in Unordered Associative Containers

2023-06 (Varna)

P1885R12

Naming Text Encodings to Demystify Them

2023-06 (Varna)

P0792R14

function_ref: a type-erased callable reference

2023-06 (Varna)

P2874R2

Mandating Annex D Require No More

2023-06 (Varna)

P2757R3

Type-checking format args

2023-06 (Varna)

P2637R3

Member visit

2023-06 (Varna)

Complete

19

Change of __cpp_lib_variant is completed in LLVM 20. Change of __cpp_lib_format is blocked by P2419R2.

P2641R4

Checking if a union alternative is active

2023-06 (Varna)

P1759R6

Native handles and file streams

2023-06 (Varna)

Complete

18

P2697R1

Interfacing bitset with string_view

2023-06 (Varna)

Complete

18

P1383R2

More constexpr for <cmath> and <complex>

2023-06 (Varna)

P2734R0

Adding the new SI prefixes

2023-06 (Varna)

Complete

17

P2548R6

copyable_function

2023-06 (Varna)

P2714R1

Bind front and back to NTTP callables

2023-06 (Varna)

P2630R4

submdspan

2023-06 (Varna)

P0543R3

Saturation arithmetic

2023-11 (Kona)

Complete

18

P2407R5

Freestanding Library: Partial Classes

2023-11 (Kona)

P2546R5

Debugging Support

2023-11 (Kona)

P2905R2

Runtime format strings

2023-11 (Kona)

Complete

18

P2918R2

Runtime format strings II

2023-11 (Kona)

Complete

18

P2909R4

Fix formatting of code units as integers (Dude, where’s my char?)

2023-11 (Kona)

Complete

18

P0952R2

A new specification for std::generate_canonical

2023-11 (Kona)

P2447R6

std::span over an initializer list

2023-11 (Kona)

Complete

18

P2821R5

span.at()

2023-11 (Kona)

Complete

18

P2868R3

Remove Deprecated std::allocator Typedef From C++26

2023-11 (Kona)

Complete

18

P2870R3

Remove basic_string::reserve() From C++26

2023-11 (Kona)

Complete

18

P2871R3

Remove Deprecated Unicode Conversion Facets from C++26

2023-11 (Kona)

Complete

18

P2819R2

Add tuple protocol to complex

2023-11 (Kona)

Complete

19

P2937R0

Freestanding: Remove strtok

2023-11 (Kona)

P2833R2

Freestanding Library: inout expected span

2023-11 (Kona)

P2836R1

std::basic_const_iterator should follow its underlying type’s convertibility

2023-11 (Kona)

P2264R7

Make assert() macro user friendly for C and C++

2023-11 (Kona)

P1673R13

A free function linear algebra interface based on the BLAS

2023-11 (Kona)

P2875R4

Undeprecate polymorphic_allocator::destroy for C++26

2024-03 (Tokyo)

Complete

15

P2867R2

Remove Deprecated strstreams From C++26

2024-03 (Tokyo)

Complete

19

P2869R4

Remove Deprecated shared_ptr Atomic Access APIs from C++26

2024-03 (Tokyo)

P2872R3

Remove wstring_convert From C++26

2024-03 (Tokyo)

Complete

19

P3107R5

Permit an efficient implementation of std::print

2024-03 (Tokyo)

P3142R0

Printing Blank Lines with println

2024-03 (Tokyo)

Complete

19

Implemented as a DR against C++23. (MSVC STL and libstdc++ will do the same.)

P2845R8

Formatting of std::filesystem::path

2024-03 (Tokyo)

P0493R5

Atomic minimum/maximum

2024-03 (Tokyo)

P2542R8

views::concat

2024-03 (Tokyo)

P2591R5

Concatenation of strings and string views

2024-03 (Tokyo)

Complete

19

P2248R8

Enabling list-initialization for algorithms

2024-03 (Tokyo)

P2810R4

is_debugger_present is_replaceable

2024-03 (Tokyo)

P1068R11

Vector API for random number generation

2024-03 (Tokyo)

P2944R3

Comparisons for reference_wrapper

2024-03 (Tokyo)

Partial

19

Implemented comparisons for reference_wrapper only

P2642R6

Padded mdspan layouts

2024-03 (Tokyo)

P3029R1

Better mdspan’s CTAD

2024-03 (Tokyo)

Complete

19

P2747R2

constexpr placement new

2024-06 (St. Louis)

Complete

20

P2997R1

Removing the common reference requirement from the indirectly invocable concepts

2024-06 (St. Louis)

Complete

19

Implemented as a DR against C++20. (MSVC STL and libstdc++ will do the same.)

P2389R2

dextents Index Type Parameter

2024-06 (St. Louis)

Complete

19

P3168R2

Give std::optional Range Support

2024-06 (St. Louis)

P3217R0

Adjoints to ‘Enabling list-initialization for algorithms’: find_last

2024-06 (St. Louis)

P2985R0

A type trait for detecting virtual base classes

2024-06 (St. Louis)

Complete

20

P0843R14

inplace_vector

2024-06 (St. Louis)

P3235R3

std::print more types faster with less memory

2024-06 (St. Louis)

P2968R2

Make std::ignore a first-class object

2024-06 (St. Louis)

Complete

19

P2075R6

Philox as an extension of the C++ RNG engines

2024-06 (St. Louis)

P2422R1

Remove nodiscard annotations from the standard library specification

2024-06 (St. Louis)

Complete

19

nodiscard attributes were kept as a conforming extension

P2300R10

std::execution

2024-06 (St. Louis)

P3136R1

Retiring niebloids

2024-11 (Wrocław)

P3138R5

views::cache_latest

2024-11 (Wrocław)

P3379R0

Constrain std::expected equality operators

2024-11 (Wrocław)

P0472R2

Put std::monostate in <utility>

2024-11 (Wrocław)

P2862R1

text_encoding::name() should never return null values

2024-11 (Wrocław)

P2897R7

aligned_accessor: An mdspan accessor expressing pointer over-alignment

2024-11 (Wrocław)

P3355R1

Fix submdspan for C++26

2024-11 (Wrocław)

P3222R0

Fix C++26 by adding transposed special cases for P2642 layouts

2024-11 (Wrocław)

P3050R2

Fix C++26 by optimizing linalg::conjugated for noncomplex value types

2024-11 (Wrocław)

P3396R1

std::execution wording fixes

2024-11 (Wrocław)

P2835R7

Expose std::atomic_ref’s object address

2024-11 (Wrocław)

P3323R1

cv-qualified types in atomic and atomic_ref

2024-11 (Wrocław)

P3508R0

Wording for “constexpr for specialized memory algorithms”

2024-11 (Wrocław)

P3369R0

constexpr for uninitialized_default_construct

2024-11 (Wrocław)

P3370R1

Add new library headers from C23

2024-11 (Wrocław)

P3309R3

constexpr atomic and atomic_ref

2024-11 (Wrocław)

P3019R11

indirect and polymorphic: Vocabulary Types for Composite Class Design

2024-11 (Wrocław)

P1928R15

std::simd — merge data-parallel types from the Parallelism TS 2

2024-11 (Wrocław)

P3325R5

A Utility for Creating Execution Environments

2024-11 (Wrocław)

P3068R6

Allowing exception throwing in constant-evaluation

2024-11 (Wrocław)

P3247R2

Deprecate the notion of trivial types

2024-11 (Wrocław)

Library Working Group Issues Status

Issue #

Issue Name

Meeting

Status

First released version

Notes

LWG2994

Needless UB for basic_string and basic_string_view

2023-06 (Varna)

Complete

5

LWG3884

flat_foo is missing allocator-extended copy/move constructors

2023-06 (Varna)

LWG3885

op should be in [zombie.names]

2023-06 (Varna)

Nothing To Do

LWG3887

Version macro for allocate_at_least

2023-06 (Varna)

Complete

19

LWG3893

LWG 3661 broke atomic<shared_ptr<T>> a; a = nullptr;

2023-06 (Varna)

LWG3894

generator::promise_type::yield_value(ranges::elements_of<Rng, Alloc>) should not be noexcept

2023-06 (Varna)

LWG3903

span destructor is redundantly noexcept

2023-06 (Varna)

Complete

7

LWG3904

lazy_split_view::outer-iterator’s const-converting constructor isn’t setting trailing_empty_

2023-06 (Varna)

LWG3905

Type of std::fexcept_t

2023-06 (Varna)

Complete

3.4

LWG3912

enumerate_view::iterator::operator- should be noexcept

2023-06 (Varna)

LWG3914

Inconsistent template-head of ranges::enumerate_view

2023-06 (Varna)

LWG3915

Redundant paragraph about expression variations

2023-06 (Varna)

LWG3925

Concept formattable’s definition is incorrect

2023-06 (Varna)

Complete

17

LWG3927

Unclear preconditions for operator[] for sequence containers

2023-06 (Varna)

Nothing To Do

LWG3935

template<class X> constexpr complex& operator=(const complex<X>&) has no specification

2023-06 (Varna)

Complete

3.4

LWG3938

Cannot use std::expected monadic ops with move-only error_type

2023-06 (Varna)

Complete

18

LWG3940

std::expected<void, E>::value() also needs E to be copy constructible

2023-06 (Varna)

Complete

18

LWG2392

“character type” is used but not defined

2023-11 (Kona)

LWG3203

span element access invalidation

2023-11 (Kona)

Nothing To Do

LWG3305

any_cast<void>

2023-11 (Kona)

Complete

18

LWG3431

<=> for containers should require three_way_comparable<T> instead of <=>

2023-11 (Kona)

LWG3749

common_iterator should handle integer-class difference types

2023-11 (Kona)

LWG3809

Is std::subtract_with_carry_engine<uint16_t> supposed to work

2023-11 (Kona)

LWG3892

Incorrect formatting of nested ranges and tuples

2023-11 (Kona)

Complete

17

LWG3897

inout_ptr will not update raw pointer to 0

2023-11 (Kona)

Complete

19

LWG3946

The definition of const_iterator_t should be reworked

2023-11 (Kona)

LWG3947

Unexpected constraints on adjacent_transform_view::base()

2023-11 (Kona)

LWG3948

possibly-const-range and as-const-pointer should be noexcept

2023-11 (Kona)

LWG3949

std::atomic<bool>’s trivial destructor dropped in C++17 spec wording

2023-11 (Kona)

LWG3951

[expected.object.swap]: Using value() instead of has_value()

2023-11 (Kona)

Complete

16

LWG3953

iter_move for common_iterator and counted_iterator should return decltype(auto)

2023-11 (Kona)

Complete

20

LWG3957

[container.alloc.reqmts] The value category of v should be claimed

2023-11 (Kona)

LWG3965

Incorrect example in [format.string.escaped] p3 for formatting of combining characters

2023-11 (Kona)

Complete

19

LWG3970

[mdspan.syn] Missing definition of full_extent_t and full_extent

2023-11 (Kona)

LWG3973

Monadic operations should be ADL-proof

2023-11 (Kona)

LWG3974

mdspan::operator[] should not copy OtherIndexTypes

2023-11 (Kona)

LWG3987

Including <flat_foo> doesn’t provide std::begin/end

2023-11 (Kona)

LWG3990

Program-defined specializations of std::tuple and std::variant can’t be properly supported

2023-11 (Kona)

LWG4001

iota_view should provide empty

2023-11 (Kona)

Complete

19

LWG3767

codecvt<charN_t, char8_t, mbstate_t> incorrectly added to locale

2024-03 (Tokyo)

LWG3919

enumerate_view may invoke UB for sized common non-forward underlying ranges

2024-03 (Tokyo)

LWG3950

std::basic_string_view comparison operators are overspecified

2024-03 (Tokyo)

Complete

18

LWG3975

Specializations of basic_format_context should not be permitted

2024-03 (Tokyo)

Nothing To Do

LWG3984

ranges::to’s recursion branch may be ill-formed

2024-03 (Tokyo)

Complete

19

LWG4011

"Effects: Equivalent to return" in [span.elem]

2024-03 (Tokyo)

Nothing To Do

LWG4012

common_view::begin/end are missing the simple-view check

2024-03 (Tokyo)

LWG4013

lazy_split_view::outer-iterator::value_type should not provide default constructor

2024-03 (Tokyo)

LWG4016

container-insertable checks do not match what container-inserter does

2024-03 (Tokyo)

Complete

20

LWG4023

Preconditions of std::basic_streambuf::setg/setp

2024-03 (Tokyo)

Complete

19

LWG4025

Move assignment operator of std::expected<cv void, E> should not be conditionally deleted

2024-03 (Tokyo)

Complete

20

LWG4030

Clarify whether arithmetic expressions in [numeric.sat.func] are mathematical or C++

2024-03 (Tokyo)

Nothing To Do

LWG4031

bad_expected_access<void> member functions should be noexcept

2024-03 (Tokyo)

Complete

16

LWG4035

single_view should provide empty

2024-03 (Tokyo)

Complete

19

LWG4036

__alignof_is_defined is only implicitly specified in C++ and not yet deprecated

2024-03 (Tokyo)

LWG4037

Static data members of ctype_base are not yet required to be usable in constant expressions

2024-03 (Tokyo)

LWG4038

std::text_encoding::aliases_view should have constexpr iterators

2024-03 (Tokyo)

LWG4043

“ASCII” is not a registered character encoding

2024-03 (Tokyo)

Nothing To Do

LWG4045

tuple can create dangling references from tuple-like

2024-03 (Tokyo)

LWG4053

Unary call to std::views::repeat does not decay the argument

2024-03 (Tokyo)

Complete

19

LWG4054

Repeating a repeat_view should repeat the view

2024-03 (Tokyo)

Complete

19

LWG3944

Formatters converting sequences of char to sequences of wchar_t

2024-06 (St. Louis)

LWG4060

submdspan preconditions do not forbid creating invalid pointer

2024-06 (St. Louis)

LWG4061

Should std::basic_format_context be default-constructible/copyable/movable?

2024-06 (St. Louis)

Complete

19

LWG4071

reference_wrapper comparisons are not SFINAE-friendly

2024-06 (St. Louis)

Complete

19

LWG4074

compatible-joinable-ranges is underconstrained

2024-06 (St. Louis)

LWG4076

concat_view should be freestanding

2024-06 (St. Louis)

LWG4079

Missing Preconditions in concat_view::iterator`s conversion constructor

2024-06 (St. Louis)

LWG4082

views::concat(r) is well-formed when r is an output_range

2024-06 (St. Louis)

LWG4083

views::as_rvalue should reject non-input ranges

2024-06 (St. Louis)

LWG4096

views::iota(views::iota(0)) should be rejected

2024-06 (St. Louis)

LWG4098

views::adjacent<0> should reject non-forward ranges

2024-06 (St. Louis)

LWG4105

ranges::ends_with`s Returns misses difference casting

2024-06 (St. Louis)

LWG4106

basic_format_args should not be default-constructible

2024-06 (St. Louis)

Complete

19

LWG3216

Rebinding the allocator before calling construct/destroy in allocate_shared

2024-11 (Wrocław)

LWG3436

std::construct_at should support arrays

2024-11 (Wrocław)

LWG3886

Monad mo’ problems

2024-11 (Wrocław)

LWG3899

co_yielding elements of an lvalue generator is unnecessarily inefficient

2024-11 (Wrocław)

LWG3900

The allocator_arg_t overloads of generator::promise_type::operator new should not be constrained

2024-11 (Wrocław)

LWG3918

std::uninitialized_move/_n and guaranteed copy elision

2024-11 (Wrocław)

LWG4014

LWG 3809 changes behavior of some existing std::subtract_with_carry_engine code

2024-11 (Wrocław)

LWG4024

Underspecified destruction of objects created in std::make_shared_for_overwrite/std::allocate_shared_for_overwrite

2024-11 (Wrocław)

16

LWG4027

possibly-const-range should prefer returning const R&

2024-11 (Wrocław)

LWG4044

Confusing requirements for std::print on POSIX platforms

2024-11 (Wrocław)

LWG4064

Clarify that std::launder is not needed when using the result of std::memcpy

2024-11 (Wrocław)

LWG4072

std::optional comparisons: constrain harder

2024-11 (Wrocław)

LWG4084

std::fixed ignores std::uppercase

2024-11 (Wrocław)

LWG4085

ranges::generate_random’s helper lambda should specify the return type

2024-11 (Wrocław)

LWG4088

println ignores the locale imbued in std::ostream

2024-11 (Wrocław)

LWG4112

has-arrow should required operator->() to be const-qualified

2024-11 (Wrocław)

LWG4113

Disallow has_unique_object_representations<Incomplete[]>

2024-11 (Wrocław)

LWG4119

generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)’s nested generator may be ill-formed

2024-11 (Wrocław)

LWG4124

Cannot format zoned_time with resolution coarser than seconds

2024-11 (Wrocław)

LWG4126

Some feature-test macros for fully freestanding features are not yet marked freestanding

2024-11 (Wrocław)

LWG4134

Issue with Philox algorithm specification

2024-11 (Wrocław)

LWG4135

The helper lambda of std::erase for list should specify return type as bool

2024-11 (Wrocław)

LWG4140

Useless default constructors for bit reference types

2024-11 (Wrocław)

LWG4141

Improve prohibitions on “additional storage”

2024-11 (Wrocław)

LWG4142

format_parse_context::check_dynamic_spec should require at least one type

2024-11 (Wrocław)

LWG4144

Disallow unique_ptr<T&, D>

2024-11 (Wrocław)

LWG4147

Precondition on inplace_vector::emplace

2024-11 (Wrocław)

LWG4148

unique_ptr::operator* should not allow dangling references

2024-11 (Wrocław)

LWG4153

Fix extra “-1” for philox_engine::max()

2024-11 (Wrocław)

LWG4154

The Mandates for std::packaged_task’s constructor from a callable entity should consider decaying

2024-11 (Wrocław)

LWG4157

The resolution of LWG3465 was damaged by P2167R3

2024-11 (Wrocław)

20

LWG4164

Missing guarantees for forward_list modifiers

2024-11 (Wrocław)

LWG4169

std::atomic<T>’s default constructor should be constrained

2024-11 (Wrocław)

LWG4170

contiguous_iterator should require to_address(I{})

2024-11 (Wrocław)

LWG3343

Ordering of calls to unlock() and notify_all() in Effects element of notify_all_at_thread_exit() should be reversed

Not Adopted Yet

Complete

16

LWG4139

§[time.zone.leap] recursive constraint in <=>

Not Adopted Yet

Complete

20

LWG3456

Pattern used by std::from_chars is underspecified (option B)

Not Adopted Yet

Complete

20