C++26

From cppreference.com

The next generation of the C++ standard.

See: The current IS schedule for C++26 (2024-05-14).

New language features

New library features

New modules

New headers

C compatibility headers:

Defect reports

Compiler support

Main Article: C++26 compiler support

C++26 core language features

C++26 feature

Paper(s)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ for AIX
IBM Open XL C++ for z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
DR98: Removing undefined behavior from lexing P2621R3 Yes 3.3
DR98: Making non-encodable string literals ill-formed P1854R4 14 14
Unevaluated strings P2361R6 14 17 (partial)*
18
Adding @ , $ , and ` to the basic character set P2558R2 15 Yes
constexpr cast from void * P2738R1 14 17
DR20: On the ignorability of standard attributes P2552R3 Yes
DR11: Static storage for braced initializers P2752R3 14
User-generated static_assert messages P2741R3 14 17
Placeholder variables with no name P2169R4 14 18
Pack indexing P2662R3 19
Removing deprecated arithmetic conversion on enumerations P2864R2 14 18
DR11/20: Template parameter initialization P2308R1 18
Disallow binding a returned reference to a temporary P2748R5 14 19
Attributes for structured bindings P0609R3 15 19
Erroneous behavior for uninitialized reads P2795R5
= delete ( "reason" ) ; P2573R2 15 19
Variadic friends P2893R3 15 20
DR98: Clarifying rules for brace elision in aggregate initialization P3106R1 Yes 17
DR20: Disallow module declarations to be macros P3034R1
DR11: Trivial infinite loops are not undefined behavior P2809R3 14 19
constexpr placement new P2747R2 15 20
Structured binding declaration as a condition P0963R3 15 6 (partial)*
Ordering of constraints involving fold expressions P2963R3 19
Deleting a pointer to an incomplete type should be ill-formed P3144R2 15 19
Structured bindings can introduce a pack P1061R10
constexpr structured bindings and references to constexpr variables P2686R4
constexpr exceptions P3068R5
Consistent grammar for sequences P3340R0
Oxford variadic comma P3176R0
Deprecating the notion of trivial types P3247R2
Removing deprecated array comparisons P2865R5


C++26 feature


Paper(s)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ for AIX
IBM Open XL C++ for z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc

C++26 library features

C++26 feature

Paper(s)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*
Testing for success or failure of <charconv> functions P2497R0 14 18
std::text_encoding : text encodings identification P1885R12
P2862R1
14
Arithmetic overloads of std::to_string and std::to_wstring use std::format P2587R3 14
Type checking format args P2757R3 15
Formatting pointers P2510R3 14 * 17 * 19.40* *
Hashing support for std::chrono value classes P2592R3
Read-Copy Update P2545R4
Hazard Pointers P2530R3
ADL-proof std::projected P2538R1 14 * 18 * 19.38* *
constexpr stable sorting P2562R1
Member visit P2637R3 15 18 (partial)*
19
std::is_within_lifetime P2641R4
Extending associative containers with the remaining heterogeneous overloads P2363R5
Enabling the use of std::weak_ptr as keys in unordered associative containers P1901R2
Native handles in file streams P1759R6 14 18
Interfacing string streams with std::string_view P2495R3 19
Interfacing std::bitset with std::string_view P2697R1 18
More constexpr for <cmath> and <complex> P1383R2 4.6 (partial)*
Adding the new 2022 SI prefixes on ratios: std::quecto , std::ronto , std::ronna , and std::quetta P2734R0 14 17
std::function_ref : type-erased callable reference P0792R14
std::copyable_function P2548R6
std::bind_front , std::bind_back , and std::not_fn to NTTP callables P2714R1
std::submdspan() P2630R4
P3355R1
Freestanding Language: Optional ::operator new P2013R5 N/A
Saturation Arithmetic P0543R3 14 18
<debugging> : Debugging Support P2546R5
P2810R3
<linalg> : A free function linear algebra interface based on the BLAS P1673R13
P3050R2
P3222R0
Making assert() macro user friendly P2264R7
Runtime format strings P2918R2 14 18
std::span over an initializer list P2447R6 18
std::span::at() P2821R5 14 18
Added tuple protocol to std::complex P2819R2 19
A new specification for std::generate_canonical P0952R2 19.42*
Removing deprecated typedef std::allocator::is_always_equal P2868R3 18
Removing function overload of std::basic_string::reserve() that takes no argument P2870R3 18
Removing deprecated Unicode conversion facets ( <codecvt> ) P2871R3 18
Freestanding: removing std::strtok P2937R0 14 19.40*
Freestanding Library: Partial Classes P2407R5 14 19.42*
Freestanding Library: inout expected span P2833R2 14 19.42*
DR23: std::basic_const_iterator should follow its underlying type’s convertibility P2836R1
P2950R0
14 19.40*
DR20: std::make_format_args now accepts only lvalue references instead of forwarding references P2905R2 14 18 19.40*
DR20: Fix formatting of code units as integers P2909R4 13.3 18 19.40*
views::concat P2542R8 15
Concatenation of strings and string views P2591R5 15 19
Enabling list-initialization for algorithms P2248R8
P3217R0
15
std::ranges::generate_random P1068R11
Comparisons for std::reference_wrapper P2944R3 14 19 (partial) *
Padded mdspan layouts P2642R6
New CTAD for std::span and std::mdspan with integral constants P3029R1 19
Atomic maximum and minimum P0493R5
std::formatter<std::filesystem::path> P2845R8
Printing Blank Lines with std::println() P3142R0 14 * 19 * 19.41* *
Undeprecate std::polymorphic_allocator::destroy P2875R4 15 19.41*
Removing deprecated strstreams P2867R2 19
Removing deprecated std::shared_ptr Atomic Access APIs P2869R4
Removing std::wstring_convert P2872R3 19
DR23: Permit an efficient implementation of std::print P3107R5
P3235R3
19.43*
std::execution : sender-receiver model of execution control P2300R10
P3396R0
std::inplace_vector : dynamically-resizable vector with fixed capacity P0843R14
std::philox_engine : counter-based random number engine P2075R6
std::optional range support P3168R2
std::is_virtual_base_of : type trait for detecting virtual base classes P2985R0 15 20
std::dims for std::mdspan P2389R2 19
DR11: Formal specification of the type of std::ignore P2968R2 15 19 19.42*
DR20: Removing the common reference requirement from the indirectly invocable concepts P2997R1 15 19 19.42*
Deprecating std::is_trivial and std::is_trivial_v P3247R2
DR20: Algorithm function objects P3136R1 Yes Yes 19.39* Yes
views::cache_latest P3138R5
Constraining std::expected equality operators P3379R1 15
std::aligned_accessor P2897R7
Put std::monostate in <utility> P0472R3
std::atomic_ref::address() P2835R7
DR11/20: cv-qualified types in std::atomic and std::atomic_ref P3323R1
constexpr std::atomic and std::atomic_ref P3309R3
constexpr for specialized memory algorithms P3508R0
P3369R0
Added new library headers from C23 P3370R1
std::indirect and std::polymorphic : vocabulary types that implement value-like semantics on a dynamically allocated object P3019R11
std::simd : data-parallel types P1928R15
A utility for creating execution environments P3325R5
constexpr for exception types, e.g. std::bad_alloc , std::bad_cast etc. P3068R6


C++26 feature


Paper(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*

* - hover over a cell marked with the star * to see additional pop-up notes.
DR nn - the number nn after "DR" denotes target C++ revision the Defect Report is applied to, e.g., DR20 → C++20.