Compiler support for C++23
From cppreference.com
< cpp | compiler support
* - 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.
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)* | P0330R8 | 11 | 13 | 19.43* | 13.1.6* | 6.5 | 2022.2 | 23.9 | |||
Make () more optional for lambdas
|
P1102R2 | 11 | 13 | 19.44* | 13.1.6* | 6.3 | 2022.2 | 22.5 | |||
| if consteval (FTM)* | P1938R3 | 12 | 14 | 19.44* | 14.0.0* | 6.3 | 2022.2 | 24.1 | |||
| Removing Garbage Collection Support | P2186R2 | 12 | N/A | 19.30* | N/A | N/A | |||||
| Narrowing contextual conversions in static_assert and constexpr if | P1401R5 | 9 | 13 (partial)* 14 |
19.44* | 14.0.0* | 2022.2 | 20.7 | ||||
| Trimming whitespaces before line splicing | P2223R2 | Yes | Yes | 19.50* | Yes | 6.7 | 2022.2 | Yes | |||
| Make declaration order layout mandated | P1847R4 | Yes | Yes | 19.30* | Yes | 2022.2 | Yes | ||||
| Removing mixed wide string literal concatenation | P2201R1 | Yes | Yes | 19.44* | Yes | Yes | Yes | Yes | |||
Explicit object member functions (deducing this) (FTM)*
|
P0847R7 | 14 | 18 19* |
19.32* (partial)* 19.43* |
6.3 | 22.5 | |||||
auto(x) and auto{x} (FTM)*
|
P0849R8 | 12 | 15 | 19.50* | 14.0.3* | 6.4 | 2022.2 | 23.3 | |||
#elifdef and #elifndef
|
P2334R1 | 12 | 13 | 19.40* | 13.1.6* | 6.5 | 2022.2 | 23.9 | |||
| Non-literal variables (and labels and gotos) in constexpr functions (FTM)* | P2242R3 | 12 | 15 | 19.43* | 14.0.3* | 6.3 | 2022.2 | 22.5 | |||
| Consistent character literal encoding | P2316R2 | Yes | Yes | 19.30* | Yes | Yes | 2022.2 | Yes | |||
| Character sets and encodings | P2314R4 | 10 | Yes | 19.51* | Yes | Yes | 2022.2 | Yes | |||
Extend init-statement (of for loop) to allow alias-declaration
|
P2360R0 | 12 | 14 | 19.50* | 14.0.0* | 2022.2 | |||||
| Multidimensional subscript operator (FTM)* | P2128R6 | 12 | 15 | 19.42* | 14.0.3* | 2022.2 | |||||
| Attributes on lambdas | P2173R1 | 9 | 13 | 19.44* | 13.1.6* | 6.6 | 2022.2 | 22.5 | |||
#warning
|
P2437R1 | Yes* | Yes | 19.50* | 15.0.0* | 6.5 | 2023.2 | Yes | |||
| Remove non-encodable wide character literals and multicharacter wide character literals | P2362R3 | 13 | 14 | 19.51* | 15.0.0* | 6.7 | 2023.2 | ||||
| Labels at the end of compound statements | P2324R2 | 13 | 16 | 19.51* | 16.0.0* | 6.5 | 2023.2 | 23.9 | |||
| Delimited escape sequences | P2290R3 | 13 | 15 | 19.50* | 15.0.0* | 6.7 | 2023.2 | ||||
| Named universal character escapes (FTM)* | P2071R2 | 13 | 15 | 19.51* | 15.0.0* | 6.7 | 2023.2 | ||||
Relaxing some constexpr restrictions (FTM)*
|
P2448R2 | 13 | 17 (partial) 19 |
19.51* | 2024.0 (partial) | ||||||
| Simpler implicit move (FTM)* | P2266R3 | 13 | 13 | 19.50* | 6.7 | 2022.2 | |||||
static operator() (FTM)*
|
P1169R4 | 13 | 16 | 19.44* | 16.0.0* | 6.7 | 2023.2 | ||||
| Requirements for optional extended floating-point types | P1467R9 | 13 | N/A | 6.4 | |||||||
| Class template argument deduction from inherited constructors | P2582R1 | 14 | 19.51* | ||||||||
Attribute [[assume]]
|
P1774R8 | 13 | 19 | 19.51* | |||||||
| Support for UTF-8 as a portable source file encoding | P2295R6 | 13* | 15* | 19.0 (Update 2)** | 15.0.0* | 2023.2 | |||||
static operator[] (FTM)*
|
P2589R1 | 13 | 16 | 19.44* | 16.0.0* | 6.7 | 2023.2 | ||||
Permitting static constexpr variables in constexpr functions (FTM)*
|
P2647R1 | 13 | 16 | 19.51* | 16.0.0* | 2023.2 | |||||
| Extending the lifetime of temporaries in range-based for loop initializer (FTM)* | P2644R1 P2718R0 CWG2659 |
15 | 19 | 19.51* | |||||||
| DR11: Change scope of lambda trailing-return-type | P2036R3 P2579R0 |
16 | 17 | 19.50* | 2023.2 | ||||||
| DR20: Meaningful exports | P2615R1 | 15 | 17 (partial) | 19.28 (16.8)* | |||||||
DR20: consteval needs to propagate up (FTM)*
|
P2564R3 | 14 | 17 | 16.0.0* | 6.7 | 2024.0 | |||||
| DR98: C++ Identifier Syntax using Unicode Standard Annex 31 | P1949R7 | 12 | 14 | 19.50* | 14.0.0* | 6.4 | 2022.2 | ||||
| DR11: Allow duplicate attributes | P2156R1 | 11 | 13 | 19.50* | 13.1.6* | 6.5 | 23.9 | ||||
DR20: Adjusting the value of feature-test macro __cpp_concepts
|
P2493R0 | 12 | 19.50* | 6.4 | 23.3 | ||||||
DR98: Relax requirements on wchar_t to match existing practices
|
P2460R2 | Yes | Yes | 19.44* | 15.0.0* | N/A | 2023.2 | ||||
| DR11: Using unknown pointers and references in constant expressions | P2280R4 | 14 | 20* | 19.50* | |||||||
| DR20: The Equality Operator You Are Looking For | P2468R2 | 13 | 16 | 19.36* | 16.0.0* | 2023.2 | |||||
DR20: char8_t Compatibility and Portability Fix (FTM)*
|
P2513R4 | 13 | 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
|
CWG2518 | 13 | 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 |
