Namespaces
Variants
Views
Actions

Compiler support for C++23

From cppreference.com

[edit] C++23 core language features

C++23 feature
 
Paper(s)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/PGI)
Nvidia nvcc
Literal suffix for (signed) size_t P0330R8 11 13

13.1.6*

Make () more optional for lambdas P1102R2 11 13

13.1.6*

6.3
if consteval P1938R3 12 14

14.0.0*

6.3
Removing Garbage Collection Support P2186R2 12 N/A
DR: C++ Identifier Syntax using Unicode Standard Annex 31 P1949R7 12 14

14.0.0*

6.4
DR: Allow duplicate attributes P2156R1 11 13

13.1.6*

Narrowing contextual conversions in static_assert and constexpr if P1401R5 9 13 (partial)*
14

14.0.0*

Trimming whitespaces before line splicing P2223R2 Yes Yes Yes
Make declaration order layout mandated P1847R4 Yes Yes Yes Yes
Removing mixed wide string literal concatenation P2201R1 Yes Yes Yes Yes Yes Yes
Explicit object parameter (deducing this) P0847R7 19.32*
(partial)*
6.3
auto(x) and auto{x} P0849R8 12 15 6.4
Change scope of lambda trailing-return-type P2036R3
#elifdef and #elifndef P2334R1 12 13

13.1.6*

Non-literal variables (and labels and gotos) in constexpr functions P2242R3 12 15 6.3
Consistent character literal encoding P2316R2 Yes Yes Yes Yes
Character sets and encodings P2314R4 10 Yes Yes
Extend init-statement (of for loop) to allow alias-declaration P2360R0 12 14

14.0.0*

Multidimensional subscript operator P2128R6 12 15
Attributes on lambdas P2173R1 9 13

13.1.6*

DR: Adjusting the value of feature-test macro __cpp_concepts P2493R0 12 19.32* 6.4
#warning P2437R1 Yes* Yes Yes Yes Yes
Remove non-encodable wide character literals and multicharacter wide character literals P2362R3 13 14
Labels at the end of compound statements P2324R2 13 16
Delimited escape sequences P2290R3 13 15
Named universal character escapes P2071R2 13 15
Relaxing some constexpr restrictions P2448R2 13
Simpler implicit move P2266R3 13 13
static operator() P1169R4 13 16
Requirements for optional extended floating-point types P1467R9 13 N/A 6.4
Class template argument deduction from inherited constructors P2582R1
Attribute [[assume]] P1774R8 13
Support for UTF-8 as a portable source file encoding P2295R6 13* 15* 19.0 (Update 2)*
DR: De-deprecating volatile bitwise compound assignment operations P2327R1 13 15
DR: Relax requirements on wchar_t to match existing practices P2460R2 Yes Yes
DR: Using unknown pointers and references in constant expressions P2280R4
DR: The Equality Operator You Are Looking For P2468R2 13 16
DR: char8_t Compatibility and Portability Fix P2513R4 13 16
static operator[] P2589R0 13 16
Extending the lifetime of temporaries in range-based for loop initializer P2644R0
DR: Meaningful exports P2615R0
DR: consteval needs to propagate up P2564R0
Permitting static constexpr variables in constexpr functions P2647R1 13 16
C++23 feature
 
Paper(s)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/PGI)
Nvidia nvcc

[edit] C++23 library features

C++23 feature
 
Paper(s)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Standard Library
Embarcadero C++ Builder
Standard Library
Cray C++
Standard Library
Stacktrace library P0881R7
P2301R1
12 (partial)* 19.34*
<stdatomic.h> P0943R6 12 15 19.31*
std::is_scoped_enum P1048R1 11 12 19.30*

13.0.0*

basic_string::contains(), basic_string_view::contains() P1679R3 11 12 19.30*

13.0.0*

std::to_underlying P1682R3 11 13 19.30*

13.1.6*

Relaxing requirements for time_point<>::clock P2212R2 N/A N/A
DR: std::visit() for classes derived from std::variant P2162R2 11.3 13 19.20**
19.30*

13.1.6*

DR: Conditionally borrowed ranges P2017R1 11 19.30*
DR: Repairing input range adaptors and std::counted_iterator P2259R1 12 19.30*(partial)*
19.31*
Providing size feedback in the Allocator interface P0401R6 15 19.30*
<spanstream>: string-stream with std::span-based buffer P0448R4 12 19.31*
std::out_ptr(), std::inout_ptr() P1132R8 19.30*
constexpr type_info::operator==() P1328R1 12 19.33**
19.34*
Iterator pair constructors for std::stack and std::queue P1425R4 12 14 19.31*
Non-deduction context for allocators in container deduction guides P1518R2 12 13 19.31*

13.1.6*

ranges::starts_with() and ranges::ends_with() P1659R3 19.31*
Prohibiting std::basic_string and std::basic_string_view construction from nullptr P2166R1 12 13 19.30*

13.1.6*

std::invoke_r() P2136R3 12 19.31*
Range constructor for std::basic_string_view P1989R2 11 14 19.30*
Default template arguments for pair's forwarding constructor P1951R1 14 19.30*
Remove Garbage Collection and Reachability-Based Leak Detection (library support) P2186R2 12 14 19.30*
DR: views::join should join all views of ranges P2328R1 11.2 19.30*
DR: view does not require default_initializable P2325R3 11.3 19.30*
DR: Range adaptor objects bind arguments by value P2281R1 11 19.29 (16.10)*
(partial)*
19.31*
DR: constexpr for std::optional and std::variant P2231R1 11.3 (partial)*
12
13 (partial)* 19.31*

13.1.6* (partial)

DR: std::format() improvements P2216R3 13 14 (partial)* 15 19.32*
DR: views::lazy_split and redesigned views::split P2210R2 12 19.31*
zip: views::zip, views::zip_transform, views::adjacent, and views::adjacent_transform P2321R2 13 15 (partial)* 19.33* (partial)**
Heterogeneous erasure overloads for associative containers P2077R3 19.32*
std::byteswap() P1272R4 12 14 19.31*
Printing volatile T* P1147R1 11.3 14 19.31*
basic_string::resize_and_overwrite() P1072R10 12 14 19.31*
Monadic operations for std::optional P0798R8 12 14 19.32*
std::move_only_function P0288R9 12 19.32*
Add a conditional noexcept specification to std::exchange P2401R0 12 14 19.25*
Require span & basic_string_view to be TriviallyCopyable P2251R1 Yes Yes Yes Yes
Clarifying the status of the “C headers” P2340R1 Yes Yes Yes Yes
DR: Fix views::istream P2432R1 12 19.31*
DR: Add support for non-const-formattable types to std::format P2418R2 13 15 19.32*
DR: view with ownership P2415R2 12 14 19.31*
DR: Fixing locale handling in chrono formatters P2372R3 19.31*
DR: Cleaning up integer-class types P2393R1 19.32*
<expected> P0323R12
P2549R1
12 19.33*
constexpr for <cmath> and <cstdlib> P0533R9 4.6 (partial)*
std::unreachable() P0627R6 12 15 19.32*
Deprecating std::aligned_storage and std::aligned_union P1413R3 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary P2255R2 13 (partial)*
constexpr std::unique_ptr P2273R3 12 16 (partial)* 19.33*
ranges::to() P1206R7 19.34*
Pipe support for user-defined range adaptors P2387R3 19.34*
ranges::iota(), ranges::shift_left(), and ranges::shift_right() P2440R1 19.34*
views::join_with P2441R2 13 19.34*
views::chunk and views::slide P2442R1 13 19.33*
views::chunk_by P2443R1 13 19.33*
std::mdspan: a non-owning multidimensional array reference P0009R18
P2599R2
P2604R0
P2613R1
<flat_map> P0429R9
<flat_set> P1222R4
ranges::find_last(), ranges::find_last_if(), and ranges::find_last_if_not() P1223R5
views::stride P1899R3 13 19.34*
Formatted output library <print> P2093R14
P2539R3
Compatibility between std::tuple and tuple-like objects P2165R4 2.9 (partial)* Partial*
Rectifying constant iterators, sentinels, and ranges P2278R4 19.35* (partial)**
Formatting Ranges P2286R8
constexpr for integral overloads of std::to_chars() and std::from_chars(). P2291R3 13 16 19.34*
ranges::contains() and ranges::contains_subrange() P2302R4 19.34*
Ranges fold algorithms P2322R6 19.35*
views::cartesian_product P2374R4
P2540R1
13
Adding move-only types support for comparison concepts P2404R3
Ranges iterators as inputs to non-ranges algorithms P2408R5 19.34*
constexpr std::bitset P2417R2 13 16 19.34*
basic_string::substr() && P2438R2 19.34*
views::as_rvalue P2446R2 13 19.34*
Standard Library Modules P2465R3
std::forward_like() P2445R1 16 19.34*
Support exclusive mode for std::fstream P2467R1 12 19.36*
views::repeat P2474R2 13
Relaxing range adaptors to allow for move-only types P2494R2 19.34*
std::basic_string_view range constructor should be explicit P2499R0 12.2 16 19.34*
std::generator: synchronous coroutine generator for ranges P2502R2
Add a conditional noexcept specification to std::apply P2517R0 10 19.34*
Improve default container formatting P2585R1
Explicit lifetime management P2590R2
Clarify handling of encodings in localized formatting of chrono types P2419R2 19.34**
std::move_iterator should not always be input_iterator P2520R0 19.34**
Deduction guides update for deducing this LWG3617 19.34*
Deduction guides update for static operator() P1169R4 13
Standard names and library support for extended floating-point types P1467R9 13
DR: std::basic_format_string P2508R1 13 15 19.35*
Monadic operations for std::expected P2505R5
DR: Poison Pills are Too Toxic P2602R2
C++23 feature
 
Paper(s)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Standard Library
Embarcadero C++ Builder
Standard Library
Cray C++
Standard Library