The next generation of the C standard.
See: The current WD of C23.
u/U-prefixed character constants and string literals may be not UTF-16/32 realloc() with zero size (the behavior becomes undefined) __alignof_is_defined and __alignas_is_defined static_assert is not provided as a macro defined in <assert.h> (becomes a keyword) thread_local is not provided as a macro defined in <threads.h> (becomes a keyword) <stdnoreturn.h> _Noreturn function specifier _Noreturn attribute token asctime() ctime() DECIMAL_DIG (use the appropriate type-specific macro (FLT_DECIMAL_DIG, etc) instead) <math.h> (they should be used via <float.h>) __bool_true_false_are_defined _Decimal32, _Decimal64, and _Decimal128) _BitInt) u8 character constants u8 string literals ' ={} [[deprecated]] [[fallthrough]] [[maybe_unused]] [[nodiscard]] [[noreturn]] [[reproducible]] [[unsequenced]] _Static_assert static_assert becomes a keyword (may be a predefined macro for compatibility reasons) thread_local becomes a keyword (may be a predefined macro for compatibility reasons) } nullptr constant and the associated nullptr_t type true and false become keywords (may be predefined macros for compatibility reasons) STDC FENV_ROUND STDC FENV_DEC_ROUND __STDC_IEC_60559_BFP__ __STDC_IEC_559__. __STDC_IEC_60559_DFP__ __STDC_IEC_60559_COMPLEX__ __STDC_IEC_559_COMPLEX__. <stdbit.h> <stdckdint.h> dN variants for existing and new floating-point math functions quantizedN() samequantumdN() quantumdN() llquantexpdN() encodedecdN() decodedecdN() encodebindN() decodebindN() char8_t type alias mbrtoc8() c8rtomb() atomic_char8_t type alias ATOMIC_CHAR8_T_LOCK_FREE test macro memset_explicit() memccpy() strdup() strndup() gmtime_r() localtime_r() strftime() and wcsftime() fscanf() and fprintf() function families wN and wfN length modifiers for [u]intN_t and [u]int_fastN_t respectively H, D, and DD length modifiers for _Decimal32, _Decimal64, and _Decimal128 respectively b conversion specifier for unsigned integer types timespec_getres() | Defect Reports fixed in C23 (? defects) |
|---|
| C23 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 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
_Static_assert with no message | N2265 | 9 | 9 | Yes | Yes | 6.5 | 2021.1.2 (clang based) | |||||||||
[[nodiscard]] | N2267 | 10 | 9 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
[[maybe_unused]] | N2270 | 10 | 9 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
[[deprecated]] | N2334 | 10 | 9 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
| Attributes | N2335 N2554 | 10 | 9 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
| IEEE 754 decimal floating-point types | N2341 | 4.2 (partial)* | 13.0 (partial)* | |||||||||||||
[[fallthrough]] | N2408 | 10 | 9 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
u8 character constants | N2418 | 10 | 15 | 6.5 | 2022.2 | |||||||||||
| Removal of function definitions without prototype | N2432 | 10 | 15 | 2022.2 | ||||||||||||
[[nodiscard]] with message | N2448 | 11 | 10 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
| Unnamed parameters in function definitions | N2480 | 11 | 11 | Yes | 6.4 | 2021.1.2 (clang based) | ||||||||||
| Labels before declarations and end of blocks | N2508 | 11 | 16 | Partial* | 6.5 | 17.0* | ||||||||||
| Binary integer constants | N2549 | 4.3* 11 | 2.9* 9 | 19.0 (2015)** | Yes | 6.5 | 11.0* | |||||||||
__has_c_attribute in preprocessor conditionals | N2553 | 11 | 9 | Yes | 6.5 | 2021.1.2 (clang based) | ||||||||||
| Allow duplicate attributes | N2557 | 11 | 13 | Yes | 6.5 | 2021.4 (clang-based | ||||||||||
| IEEE 754 interchange and extended types | N2601 | 7 (partial)* | 6 (partial)* | Partial* | ||||||||||||
| Digit separators | N2626 | 12 | 13 | 19.0 (2015)** | Yes | 6.5 | 18.0* | |||||||||
#elifdef and #elifndef | N2645 | 12 | 13 | 13.1.6* | 6.5 | 2021.4 | ||||||||||
Type change of u8 string literals | N2653 | |||||||||||||||
[[maybe_unused]] for labels | N2662 | 11 | 16 | 6.5 | 2022.2 | |||||||||||
#warning | N2686 | Yes | Yes | Yes | 6.5 | Yes | ||||||||||
Bit-precise integer types (_BitInt) | N2763 | 15 | 6.5 | 2022.2 | ||||||||||||
[[noreturn]] | N2764 | 13 | 15 | 6.5 | 2022.2 | |||||||||||
| Suffixes for bit-precise integer constants | N2775 | 15 | 2022.2 | |||||||||||||
__has_include in preprocessor conditionals | N2799 | 5 | Yes | 19.11* | Yes | 6.5 | 18.0 | |||||||||
| Identifier Syntax using Unicode Standard Annex 31 | N2836 | 13 | 15 | 6.5 | 2022.2 | |||||||||||
| Removal of function declarations without prototype | N2841 | 13 | 15 | 2022.2 | ||||||||||||
| Empty initializers | N2900 | Partial* | Partial* | Partial* | Partial* | Partial* | ||||||||||
typeof and typeof_unqual | N2927 N2930 | Partial* 13 | Partial* 16 | Partial* | Partial* | Partial* | Partial* | |||||||||
| New spelling of keywords | N2934 | 13 | 16 | 6.5 | ||||||||||||
Predefined true and false | N2935 | 13 | 15 | 2022.2 | ||||||||||||
[[unsequenced]] and [[reproducible]] | N2956 | |||||||||||||||
| Relax requirements for variadic parameter list | N2975 | 13 | 16 | 6.5 | 2023.1 | |||||||||||
| Type inference in object definitions | N3007 | 13 | ||||||||||||||
#embed | N3017 | |||||||||||||||
constexpr objects | N3018 | 13 | ||||||||||||||
| Improved Normal Enumerations | N3029 | 13 | ||||||||||||||
| Enhancements to Enumerations | N3030 | 13 | Maybe | |||||||||||||
__VA_OPT__ | N3033 | 8 | 12 | 6.5 | ||||||||||||
| Storage-class specifiers for compound literals | N3038 | 13 | ||||||||||||||
nullptr | N3042 | 13 | 16 | |||||||||||||
| C23 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 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/23