Namespaces
Variants
Actions

Compiler support for C++23

From cppreference.com

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

[edit]C++23 core language features

C++23 feature

 
Paper(s)

 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Literal suffix for (signed) size_t  (FTM)*P0330R811 13 19.43*13.1.6*6.5 2022.2 23.9
Make () more optional for lambdasP1102R211 13 19.44*13.1.6*6.3 2022.2 22.5
if consteval  (FTM)*P1938R312 14 19.44*14.0.0*6.3 2022.2 24.1
Removing Garbage Collection Support P2186R212 N/A19.30*N/AN/A
Narrowing contextual conversions in static_assert and constexpr ifP1401R59 13 (partial)*
14
14.0.0*2022.2 20.7
Trimming whitespaces before line splicing P2223R2Yes Yes Yes 6.7 2022.2 Yes
Make declaration order layout mandated P1847R4Yes Yes Yes Yes 2022.2 Yes
Removing mixed wide string literal concatenationP2201R1Yes Yes Yes Yes Yes Yes Yes
Explicit object member functions (deducing this)  (FTM)*P0847R714 18
19*
19.32*
(partial)*
19.43*
6.3 22.5
auto(x) and auto{x}  (FTM)*P0849R812 15 14.0.3*6.4 2022.2 23.3
#elifdef and #elifndefP2334R112 13 19.40*13.1.6*6.5 2022.2 23.9
Non-literal variables (and labels and gotos) in constexpr functions  (FTM)*P2242R312 15 19.43*14.0.3*6.3 2022.2 22.5
Consistent character literal encoding P2316R2Yes Yes 19.30*Yes Yes 2022.2 Yes
Character sets and encodingsP2314R410 Yes Yes Yes 2022.2 Yes
Extend init-statement (of for loop) to allow alias-declarationP2360R012 14 14.0.0*2022.2
Multidimensional subscript operator  (FTM)*P2128R612 15 19.42*14.0.3*2022.2
Attributes on lambdasP2173R19 13 19.44*13.1.6*6.6 2022.2 22.5
#warningP2437R1Yes*Yes 15.0.0*6.5 2023.2 Yes
Remove non-encodable wide character literals and multicharacter wide character literals P2362R313 14 15.0.0*6.7 2023.2
Labels at the end of compound statements P2324R213 16 16.0.0*6.5 2023.2 23.9
Delimited escape sequencesP2290R313 15 15.0.0*6.7 2023.2
Named universal character escapes  (FTM)*P2071R213 15 15.0.0*6.7 2023.2
Relaxing some constexpr restrictions  (FTM)*P2448R213 17 (partial)
19
2024.0 (partial)
Simpler implicit move  (FTM)*P2266R313 13 6.7 2022.2
static operator()  (FTM)*P1169R413 16 19.44*16.0.0*6.7 2023.2
Requirements for optional extended floating-point typesP1467R913 N/A6.4
Class template argument deduction from inherited constructors P2582R114
Attribute [[assume]]P1774R813 19
Support for UTF-8 as a portable source file encodingP2295R613*15*19.0 (Update 2)**15.0.0*2023.2
static operator[]  (FTM)*P2589R113 16 19.44*16.0.0*6.7 2023.2
Permitting staticconstexpr variables in constexpr functions  (FTM)*P2647R113 16 16.0.0*2023.2
Extending the lifetime of temporaries in range-based for loop initializer  (FTM)*P2644R1
P2718R0
CWG2659
15 19
DR11: Change scope of lambda trailing-return-type P2036R3
P2579R0
17 2023.2
DR20: Meaningful exports P2615R115 17 (partial)
DR20: consteval needs to propagate up  (FTM)*P2564R314 17 16.0.0*6.7 2024.0
DR98: C++ Identifier Syntax using Unicode Standard Annex 31 P1949R712 14 14.0.0*6.4 2022.2
DR11: Allow duplicate attributesP2156R111 13 13.1.6*6.5 23.9
DR20: Adjusting the value of feature-test macro __cpp_conceptsP2493R012 19.32*6.4 23.3
DR98: Relax requirements on wchar_t to match existing practices P2460R2Yes Yes Yes 15.0.0*N/A2023.2
DR11: Using unknown pointers and references in constant expressions P2280R414 20*
DR20: The Equality Operator You Are Looking For P2468R213 16 16.0.0*2023.2
DR20: char8_t Compatibility and Portability Fix  (FTM)*P2513R413 16 19.34*16.0.0*2023.2
DR98/11: Clarify reporting of diagnostic directives and allow static_assert of non-value-dependent expressions in a template context CWG251813 17 16.0*
(partial)*
19.40*
 

C++23 feature
 

Paper(s)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray

[edit]C++23 library features

C++23 feature

 
Paper(s)

 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
Stacktrace library  (FTM)*P0881R7
P2301R1
12 (partial)*
14*
19.34*
<stdatomic.h>  (FTM)*P0943R612 15 19.31*14.0.3*
std::is_scoped_enum  (FTM)*P1048R111 12 19.30*13.0.0*
std::basic_string::contains(), std::basic_string_view::contains()  (FTM)*P1679R311 12 19.30*13.0.0*
std::to_underlying  (FTM)*P1682R311 13 19.30*13.1.6*
Relaxing requirements for time_point<>::clockP2212R2N/AN/AN/AN/A
Providing size feedback in the Allocator interface  (FTM)*P0401R615 19.30*14.0.3*
<spanstream>: string-stream with std::span-based buffer  (FTM)*P0448R412 19.31*
std::out_ptr(), std::inout_ptr()  (FTM)*P1132R814 19 19.30*
constexprtype_info::operator==()  (FTM)*P1328R112 17 19.33**
19.34*
15.0.0*
Iterator pair constructors for std::stack and std::queue  (FTM)*P1425R412 14 19.31*14.0.3*
Non-deduction context for allocators in container deduction guides P1518R212*13*19.31**13.1.6**
ranges::starts_with() and ranges::ends_with()  (FTM)*P1659R317 (partial)*
18
19.31*16.0.0*
Prohibiting std::basic_string and std::basic_string_view construction from nullptrP2166R112 13 19.30*13.1.6*
std::invoke_r()  (FTM)*P2136R312 17 19.31*15.0.0*
Range constructor for std::basic_string_viewP1989R211 14 19.30*14.0.3*
Default template arguments for std::pair's forwarding constructorP1951R114 14 19.30*14.0.3*
Remove Garbage Collection and Reachability-Based Leak Detection (library support) P2186R212 14 19.30*14.0.3*
zip: views::zip, views::zip_transform, views::adjacent, and views::adjacent_transform  (FTM)*P2321R213 15 (partial)*19.33*(partial)***
19.37*
14.0.3*
Heterogeneous erasure overloads for associative containers  (FTM)*P2077R319.32*
std::byteswap()  (FTM)*P1272R412 14 19.31*14.0.3*
Printingvolatile T*P1147R111.3 14 19.31*14.0.3*
basic_string::resize_and_overwrite()  (FTM)*P1072R1012 14 19.31*14.0.3*
Monadic operations for std::optional  (FTM)*P0798R812 14 19.32*14.0.3*
std::move_only_function  (FTM)*P0288R912 19.32*
Add a conditional noexcept specification to std::exchangeP2401R012 14 19.25*14.0.3*
Require std::span & std::basic_string_view to be TriviallyCopyableP2251R1Yes Yes Yes Yes
Clarifying the status of the “C headers” P2340R1Yes Yes Yes Yes
<expected>  (FTM)*P0323R12
P2549R1
12 16 19.33*15.0.0*
constexpr for <cmath> and <cstdlib>  (FTM)*P0533R94.6 (partial)*
std::unreachable()  (FTM)*P0627R612 15 19.32*14.0.3*
Deprecating std::aligned_storage and std::aligned_unionP1413R313 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary  (FTM)*P2255R213 (partial)*
14
21 (partial)*
constexprstd::unique_ptr  (FTM)*P2273R312 16 19.33*15.0.0*
Constructing containers and strings from ranges with ranges::to(), tagged constructors, insert and assign member functions  (FTM)*  (FTM)*P1206R714 (partial)*
15
17 19.34*15.0.0*
Pipe support for user-defined range adaptors (ranges::range_adaptor_closure, std::bind_back)  (FTM)*  (FTM)*P2387R313 (partial)*
14
19 19.34*
ranges::iota(), ranges::shift_left(), and ranges::shift_right()  (FTM)*  (FTM)*P2440R113 (partial)*19.34*
views::join_with  (FTM)*P2441R213 19.34*
views::chunk and views::slide  (FTM)*  (FTM)*P2442R113 19.33*
views::chunk_by  (FTM)*P2443R113 18 19.33*16.0.0*
std::mdspan: a non-owning multidimensional array reference  (FTM)*P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (partial)*
18
19.39*15.0.0*
<flat_map>  (FTM)*P0429R915 20
<flat_set>  (FTM)*P1222R415 21
ranges::find_last(), ranges::find_last_if(), and ranges::find_last_if_not()  (FTM)*P1223R513 19 19.36*
Freestanding Library: Easy <utility>, <ranges>, and <iterator>P1642R1113*N/A
views::stride  (FTM)*P1899R313 19.34*
Compatibility between std::tuple and tuple-like objects  (FTM)*P2165R414 2.9 (partial)*19.36* (partial)*
19.37*
partial*
Rectifying constant iterators, sentinels, and ranges. views::as_const  (FTM)*P2278R413 19.35*(partial)*
19.36*
Formatting Ranges  (FTM)*P2286R815 (partial)*
15.2
16 19.37*(partial)*
19.39*(partial)*
19.41*(partial)*
19.42*
15.0.0*
Improve default container formatting  (FTM)*P2585R115 16 (partial)*
17
19.42*15.0.0*
Formatted output library <print>  (FTM)*P2093R14
P2539R4
14 17 (partial)*
18
19.37*15.0.0**
16.0.0*
Formattingstd::thread::id and std::stacktrace  (FTM)*P2693R114 17 (partial)*19.38*15.0.0*
constexpr for integral overloads of std::to_chars() and std::from_chars()  (FTM)*P2291R313 16 19.34*15.0.0*
ranges::contains() and ranges::contains_subrange()  (FTM)*P2302R413 18 (partial)*
19
19.34*16.0.0**
Ranges fold algorithms  (FTM)*P2322R613 19.35*
views::cartesian_product  (FTM)*P2374R4
P2540R1
13 19.37*
Adding move-only types support for comparison concepts (equality_comparable, totally_ordered, three_way_comparable)  (FTM)*P2404R319.36*
Ranges iterators as inputs to non-ranges algorithms  (FTM)*P2408R519.34*
constexprstd::bitset  (FTM)*P2417R213 16 19.34*15.0.0*
basic_string::substr()&&P2438R216 19.34*15.0.0*
views::as_rvalue  (FTM)*P2446R213 16 19.34*15.0.0*
Standard Library Modules  (FTM)*P2465R315*17 (partial)*19.35*
(partial)*
19.36*
std::forward_like()  (FTM)*P2445R114 16 19.34*15.0.0*
Support exclusive mode for std::fstream  (FTM)*P2467R112 18 19.36*16.0.0*
views::repeat  (FTM)*P2474R213 17 19.36*15.0.0*
Relaxing range adaptors to allow for move-only types  (FTM)*P2494R214 17 19.34*15.0.0*
std::basic_string_view range constructor should be explicit P2499R012.2 16 19.34*15.0.0*
std::generator: synchronous coroutine generator for ranges  (FTM)*P2502R2
P2787R0
14 19.43*
Add a conditional noexcept specification to std::applyP2517R110 18 19.34*16.0.0*
Explicit lifetime management (std::start_lifetime_as)  (FTM)*P2590R2
P2679R2
Clarify handling of encodings in localized formatting of chrono types  (FTM)*P2419R215*19.34**
std::move_iterator should not always be input_iterator  (FTM)*P2520R012.3*17*19.34**15.0.0*
Deduction guides update for explicit object parameter call operators LWG361714 19.34*
Deduction guides update for static operator()P1169R413 16 19.39*15.0.0*
Standard names and library support for extended floating-point typesP1467R913 19.37**
Monadic operations for std::expected  (FTM)*P2505R513 17 19.36*15.0.0*
views::enumerate  (FTM)*P2164R913 19.37*
std::is_implicit_lifetime  (FTM)*P2674R120
std::common_reference_t of std::reference_wrapper should be a reference type  (FTM)*  (FTM)*P2655R319.37*
Disallowing user specialization of std::allocator_traitsP2652R219 19.37*
Deprecating std::numeric_limits::has_denormP2614R218 19.37*16.0.0*
Making Multi-Param Constructors Of viewsexplicitP2711R117 (partial)*19.36**15.0.0*
DR20: Relaxing Ranges Just A Smidge  (FTM)*P2609R315 20 19.37*
DR20: Stashing Stashing Iterators For Proper Flattening P2770R014 18 19.37*
DR17: std::visit() for classes derived from std::variant  (FTM)*P2162R211.3 13 19.20**
19.30*
13.1.6*
DR20: Conditionally borrowed ranges P2017R111 16 19.30*
DR20: Repairing input range adaptors and std::counted_iteratorP2259R112 19.30*(partial)*
19.31*
DR20: views::join should join all views of ranges P2328R111.2 15 19.30*14.0.3*
DR20: view does not require default_initializable  (FTM)*P2325R311.3 16 19.30*15.0.0*
DR20: Range adaptor objects bind arguments by value P2281R111 14 19.29 (16.10)*
(partial)*
19.31*
14.0.3*
DR20: constexpr for std::optional and std::variant  (FTM)*  (FTM)*P2231R111.3 (partial)*
12
13 (partial)*
19
19.31*13.1.6* (partial)
DR20: views::lazy_split and redesigned views::splitP2210R212 16 19.31*15.0.0*
DR20: Fix ranges::istream_viewP2432R112 16 19.31*15.0.0*
DR20: view with ownership  (FTM)*P2415R212 14 19.31*14.0.3*
DR20: Fixing locale handling in chrono formatters  (FTM)*P2372R3
P2418R2
13 19.31*
DR20: Cleaning up integer-class types P2393R119.32*
DR20: Compile-time format string checks; Reducing binary code size of std::format() family  (FTM)*P2216R313 14 (partial)*
15
19.32*14.0.3*
DR20: Add support for non-const-formattable types to std::formatP2418R213 15 19.32*14.0.3*
DR20: std::basic_format_stringP2508R113 15 19.35*14.0.3*
DR20: Poison Pills are Too Toxic  (FTM)*P2602R214 19 19.36*
DR20: std::format fill character allowances P2572R114 17 19.37*
DR20: Improving std::format's width estimation P2675R114 17 19.38*
DR20: std::barrier's phase completion guarantees  (FTM)*P2588R319.28 (16.8)**
19.36*
 

C++23 feature
 

Paper(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
close