C++23 的编译器支持
来自cppreference.com
< cpp | compiler support
C++23 核心语言功能特性
C++23 功能特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XLC++ |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (前 Portland Group/PGI) |
Nvidia nvcc |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
(有符号) size_t 的字面量后缀
|
P0330R8 | 11 | 13 |
13.1.6* |
||||||||||
使更多的 () 在 lambda 可以被省略
|
P1102R2 | 11 | 13 |
13.1.6* |
6.3 | |||||||||
if consteval | P1938R3 | 12 | 14 | 6.3 | ||||||||||
移除垃圾收集支持 | P2186R2 | 12 | ||||||||||||
DR:C++ 标识符语法使用 Unicode 标准附录 31 | P1949R7 | 12 | 14 | 6.4 | ||||||||||
DR:允许重复属性 | P2156R1 | 11 | 13 |
13.1.6* |
||||||||||
static_assert 与 constexpr if 中的窄化按语境转换 | P1401R5 | 9 | 13 (部分)* 14 |
13.1.6* (部分) |
||||||||||
在拼接行前剔除空白符 | P2223R2 | 是 | 是 | 是 | ||||||||||
使声明顺序布局强制 | P1847R4 | 是 | 是 | 是 | 是 | |||||||||
移除混合宽字符串字面量连接 | P2201R1 | 是 | 是 | 是 | 是 | 是 | ||||||||
推导 this
|
P0847R7 | 19.32* (部分)* |
6.3 | |||||||||||
auto(x) 与 auto{x}
|
P0849R8 | 12 | 15 | |||||||||||
更改 lambda 尾随返回类型的作用域 | P2036R3 | 15 | ||||||||||||
#elifdef 与 #elifndef
|
P2334R1 | 12 | 13 |
13.1.6* |
||||||||||
constexpr 函数中的非字面类型变量(以及句标与 goto )
|
P2242R3 | 12 | 15 | 6.3 | ||||||||||
一致的字符字面量编码 | P2316R2 | 是 | 是 | 是 | 是 | |||||||||
字符集与编码 | P2314R4 | 是 | 是 | |||||||||||
扩展初始化语句以允许别名声明 | P2360R0 | 12 | 14 | |||||||||||
多维数组下标运算符 | P2128R6 | 12 | 15 | |||||||||||
Lambda 上的属性 | P2173R1 | 9 | 13 |
13.1.6* |
||||||||||
DR:调整功能特性测试宏 __cpp_concepts 的值
|
P2493R0 | 12 | 19.32* | 6.4 | ||||||||||
C++23 功能特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XLC++ |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ |
Nvidia nvcc |
C++23 库功能特性
C++23 功能特性 |
提案 |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang |
Sun/Oracle C++ 标准库 |
Embarcadero C++ Builder 标准库 |
Cray C++ 标准库 |
|
---|---|---|---|---|---|---|---|---|---|
栈踪库 | P0881R7 | 12 (部分)* | 19.34* | ||||||
<stdatomic.h> | P0943R6 | 12 | 15 | 19.31* | |||||
std::is_scoped_enum | P1048R1 | 11 | 12 | 19.30* |
13.0.0* |
||||
basic_string/basic_string_view 的 contains()
|
P1679R3 | 11 | 12 | ||||||
std::to_underlying | P1682R3 | 11 | 13 | 19.30* |
13.1.6* |
||||
放松 time_point<>::clock 的要求 | P2212R2 | N/A | N/A | ||||||
DR: std::variant 的派生类的 std::visit | P2162R2 | 11.3 | 13 | 19.20** 19.30* |
13.1.6* |
||||
DR:条件性借用范围 | P2017R1 | 11 | 19.30* | ||||||
DR:修复输入范围适配器与 std::counted_iterator | P2259R1 | 12 | 19.30*(部分)* 19.31* |
||||||
在分配器接口中提供大小反馈 | P0401R6 | 15 | 19.30* | ||||||
<spanstream> :以 std::span 为基础的字符串流 | P0448R4 | 12 | 19.31* | ||||||
std::out_ptr()、 std::inout_ptr() | P1132R8 | 19.30* | |||||||
constexpr type_info::operator==() | P1328R1 | 12 | 19.33* | ||||||
std::stack 与 std::queue 的迭代器对构造函数 | P1425R4 | 12 | 14 | 19.31* | |||||
容器推导指引中分配器的非推导语境 | P1518R2 | 12 | 13 | 19.31* |
13.1.6* |
||||
ranges::starts_with() 与 ranges::ends_with() | P1659R3 | 11 | |||||||
禁止 basic_string 与 basic_string_view 从 nullptr 构造 | P2166R1 | 12 | 13 | 19.30* |
13.1.6* |
||||
std::invoke_r() | P2136R3 | 12 | 19.31* | ||||||
basic_string_view 的范围构造函数 | P1989R2 | 11 | 14 | 19.30* | |||||
pair 的转发构造函数的默认模板实参 | P1951R1 | 14 | 19.30* | ||||||
移除垃圾收集与基于可达性的泄漏检测(库支持) | P2186R2 | 12 | 14 | 19.30* | |||||
DR:join_view 应结合所有范围 | P2328R1 | 11.2 | 19.30* | ||||||
DR:view 不要求 default_initializable
|
P2325R3 | 11.3 | 19.30* | ||||||
DR:范围适配器对象按值绑定实参 | P2281R1 | 11 | 19.29 (16.10)* (部分)* 19.31* |
||||||
DR:std::optional 与 std::variant 的 constexpr | P2231R1 | 11.3 (部分)* 12 |
13 (部分)* | 19.31* |
13.1.6* (部分) |
||||
DR:std::format() 改进 | P2216R3 | 14 (部分)* | 19.32* | ||||||
DR:lazy_split_view 与重新设计的 split_view | P2210R2 | 12 | 19.31* | ||||||
zip: views::zip、 views::zip_transform、 views::adjacent 及 views::adjacent_transform | P2321R2 | 15 (部分)* | 19.33* (部分)* | ||||||
关联容器的异质擦除重载 | P2077R3 | 19.32* | |||||||
std::byteswap() | P1272R4 | 12 | 14 | 19.31* | |||||
打印 volatile T* | P1147R1 | 11.3 | 14 | 19.31* | |||||
basic_string::resize_and_overwrite() | P1072R10 | 12 | 14 | 19.31* | |||||
std::optional 的单子操作 | P0798R8 | 12 | 14 | 19.32* | |||||
std::move_only_function | P0288R9 | 12 | 19.32* | ||||||
添加条件性 noexcept 说明到 std::exchange | P2401R0 | 12 | 14 | 19.25* | |||||
要求 span 与 basic_string_view 为可平凡复制 (TriviallyCopyable) | P2251R1 | 是 | 是 | 是 | 是 | ||||
澄清“C 头文件”的状况 | P2340R1 | 是 | 是 | 是 | 是 | ||||
DR:修复 views::istream | P2432R1 | 12 | 19.31* | ||||||
DR: 添加到不可 const 格式化类型的支持到 std::format | P2418R2 | 19.32* | |||||||
DR:带所有权的 view
|
P2415R2 | 12 | 14 | 19.31* | |||||
DR:修复 chrono 格式化器中的本地环境支持 | P2372R3 | 19.31* | |||||||
DR:清理整数类类型 | P2393R1 | 19.32* | |||||||
<expected> | P0323R12 | 12 | 19.33* | ||||||
<cmath> 与 <cstdlib> 的 constexpr | P0533R9 | 4.6 (部分)* | |||||||
std::unreachable() | P0627R6 | 12 | 15 | 19.32* | |||||
弃用 std::aligned_storage 与 std::aligned_union | P1413R3 | 19.33* | |||||||
std::reference_constructs_from_temporary & std::reference_converts_from_temporary | P2255R2 | ||||||||
constexpr std::unique_ptr | P2273R3 | 12 | 19.33* | ||||||
ranges::to | P1206R7 | ||||||||
用户定义适配器范围的管道支持 | P2387R3 | ||||||||
ranges::iota、 ranges::shift_left 及 ranges::shift_right | P2440R1 | 19.34* | |||||||
views::join_with | P2441R2 | 19.34* | |||||||
views::chunk 与 views::slide | P2442R1 | 19.33* | |||||||
views::chunk_by | P2443R1 | 19.33* | |||||||
C++23 功能特性 |
提案 |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang |
Sun/Oracle C++ 标准库 |
Embarcadero C++ Builder 标准库 |
Cray C++ 标准库 |