C++
编译器支持
自由(freestanding)与宿主(hosted)
语言
标准库
标准库头文件
具名要求
特性测试宏 (C++20)
语言支持库
概念库 (C++20)
诊断库
内存管理库
元编程库 (C++11)
通用工具库
容器库
迭代器库
范围库 (C++20)
算法库
字符串库
文本处理库
数值库
日期和时间库
输入/输出库
文件系统库 (C++17)
并发支持库 (C++11)
执行控制库 (C++26)
技术规范
符号索引
外部库
[编辑] 编译器支持
C++11
C++14
C++17
C++20
C++23
C++26
[编辑]
本页面尽力维护,但可能滞后于最新的编译器版本。如果您发现有内容过时,请帮助我们更新!
下表列出了编译器对 C++ 新特性的支持。这包括标准中已接受的修订以及各种技术规范。
[编辑]
C++26/2c 核心语言特性
C++26/2c 库特性
[编辑]
C++23 核心语言特性
C++23 库特性
[编辑]
C++20 核心语言特性
C++20 库特性
旧标准
厂商兼容性检查表
目录
1 注意
2 C++26 特性
2.1 C++26 核心语言特性
2.2 C++26 库特性
3 C++23 特性
3.1 C++23 核心语言特性
3.2 C++23 库特性
4 C++20 特性
4.1 C++20 核心语言特性
4.2 C++20 库特性
5 旧标准
5.1 另见
[编辑] 说明
* - 将鼠标悬停在标有星号 * 的单元格上可查看额外的弹出式注释。DRnn - “DR”后的数字 nn 表示该缺陷报告(Defect Report)所适用的 C++ 修订版本,例如 DR20 → C++20。
[编辑] C++26 特性
请注意,此列表可能会随着 C++26/2c 草案标准的发展而更改。
[编辑]
[编辑] C++26 核心语言特性
C++26 特性
提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (前 PGI)*
Nvidia nvcc
Cray
DR98: 移除词法分析中的未定义行为
P2621R3
是
3.3
16.0.0*
DR98: 使不可编码字符串字面量格式错误
P1854R4
14
14
16.0.0*
未求值字符串
P2361R6
14
17 (部分)*18
16.0.0*
将 @、$ 和 ` 添加到基本字符集
P2558R2
15
是
16.0.0*
从 void* 到 constexpr 的转换 (FTM)*
P2738R1
14
17
DR20: 关于标准属性的可忽略性
P2552R3
15
是
DR11: 大括号初始化器的静态存储
P2752R3
14
用户生成的 static_assert 消息 (FTM)*
P2741R3
14
17
无名称的占位符变量 (FTM)*
P2169R4
14
18
包索引 (FTM)*
P2662R3
15
19
移除枚举上的已废弃算术转换
P2864R2
14
18
DR11/20: 模板参数初始化
P2308R1
9
18
禁止将返回的引用绑定到临时对象
P2748R5
14
19
结构化绑定的属性 (FTM)*
P0609R3
15
19
对未初始化读取的错误行为,[[indeterminate]] 属性
P2795R5
= delete("reason"); (FTM)*
P2573R2
15
19
可变参数 友元 (FTM)*
P2893R3
15
20
DR98: 澄清聚合初始化中大括号省略的规则
P3106R1
是
17
DR20: 禁止模块声明为宏
P3034R1
15
DR11: 平凡无限循环不是未定义行为
P2809R3
14
19
constexpr placement new (FTM)* (FTM)*
P2747R2
15
20
作为条件的结构化绑定声明 (FTM)*
P0963R3
15
6 (部分)*21
涉及折叠表达式的约束的排序 (FTM)*
P2963R3
19
删除不完整类型的指针应格式错误
P3144R2
15
19
6.7
结构化绑定可以引入包 (FTM)*
P1061R10
21
constexpr 结构化绑定和对 constexpr 变量的引用
P2686R5
6.7
constexpr 异常 (FTM)*
P3068R6
牛津可变参数逗号
P3176R1
15
20
移除已废弃的数组比较
P2865R6
15
#embed (FTM)*
P1967R14
15
19*
概念和变量模板的模板参数 (FTM)*
P2841R7
平凡可重定位性 (FTM)*
P2786R13
平凡联合 (FTM)*
P3074R7
可观察检查点
P1494R5
契约 (FTM)*
P2900R14
C++26 特性
提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (前 PGI)*
Nvidia nvcc
Cray
[编辑] C++26 库特性
C++26 特性
提案
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
测试
P2497R0
14
18
16.0.0*
std::text_encoding: 文本编码识别 (FTM)*
P1885R12P2862R1
14
std::to_string 和 std::to_wstring 的算术重载使用 std::format (FTM)*
P2587R3
14
类型检查格式参数 (FTM)*
P2757R3
15
格式化指针 (FTM)*
P2510R3
14*
17*
19.40**
std::chrono 值类的哈希支持 (FTM)*
P2592R3
P2545R4
P2530R3
ADL-proof std::projected
P2538R1
14*
18*
19.38**
16.0.0*
constexpr 稳定排序 (FTM)*
P2562R1
21*
成员 std::basic_format_arg::visit() (FTM)*
P2637R3
15
19
成员 std::variant::visit() (FTM)*
P2637R3
15
18
std::is_within_lifetime (FTM)*
P2641R4
扩展关联容器以包含剩余的异构重载 (FTM)*
P2363R5
允许在无序关联容器中使用 std::weak_ptr 作为键 (FTM)*
P1901R2
文件流中的本地句柄 (FTM)*
P1759R6
14
18
16.0.0*
字符串流与 std::string_view 的接口 (FTM)*
P2495R3
19
std::bitset 与 std::string_view 的接口 (FTM)*
P2697R1
18
16.0.0*
P1383R2
4.6 (部分)*
在比率中添加新的 2022 SI 前缀:std::quecto, std::ronto, std::ronna, 和 std::quetta (FTM)*
P2734R0
14
17
std::function_ref: 类型擦除的可调用引用 (FTM)*
P0792R14
std::copyable_function (FTM)*
P2548R6
std::bind_front, std::bind_back, 和 std::not_fn 到 NTTP 可调用对象 (FTM)* (FTM)* (FTM)*
P2714R1
std::submdspan() (FTM)*
P2630R4P3355R1
独立语言:可选 ::operator new
P2013R5
N/A
独立式 std::char_traits, std::errc 以及以下头文件中的设施:
P2338R4
N/A
更多独立式设施 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P2198R7
N/A
饱和算术 (FTM)*
P0543R3
14
18
16.0.0*
P2546R5P2810R4
P1673R13P3050R2P3222R0
使 assert() 宏用户友好
P2264R7
运行时格式字符串 (FTM)*
P2918R2
14
18
16.0.0*
初始化列表上的 std::span (FTM)*
P2447R6
18
16.0.0*
std::span::at() (FTM)*
P2821R5
14
18
16.0.0*
为 std::complex 添加元组协议 (FTM)*
P2819R2
19
std::generate_canonical 的新规范
P0952R2
19.42*
移除已废弃的 typedef std::allocator::is_always_equal
P2868R3
15
18
16.0.0*
移除不带参数的 std::basic_string::reserve() 函数重载
P2870R3
18
16.0.0*
移除已废弃的 Unicode 转换分面 (
P2871R3
18
16.0.0*
独立式: 移除 std::strtok (FTM)*
P2937R0
14
19.40*
独立式库:部分类 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P2407R5
14
19.42*
独立式库: std::inout, std::expected, std::span (FTM)* (FTM)* (FTM)* (FTM)*
P2833R2
14
19.42*
DR23: std::basic_const_iterator 应遵循其底层类型的可转换性 (FTM)*
P2836R1P2950R0
14
19.40*
DR20: std::make_format_args 现在只接受左值引用,而不是转发引用
P2905R2
14
18
19.40*
16.0.0*
DR20: 修复代码单元作为整数的格式化 (FTM)*
P2909R4
13.3
18
19.40*
16.0.0*
views::concat (FTM)*
P2542R8
15
字符串和 字符串视图的连接 (FTM)*
P2591R5
15
19
为算法启用列表初始化 (FTM)*
P2248R8P3217R0
15
std::ranges::generate_random (FTM)*
P1068R11
std::reference_wrapper 的比较,以及 std::pair、std::tuple、std::optional 和 std::variant 比较的约束 (FTM)* (FTM)*
P2944R3
14
19 (部分)*
填充的 mdspan 布局 (FTM)*
P2642R6
使用整数常量的 std::span 和 std::mdspan 的新 CTAD
P3029R1
19
原子最大值和最小值 (FTM)*
P0493R5
std::formatter
P2845R8
使用 std::println() 打印空行 (FTM)*
P3142R0
14*
19*
19.41**
解除对 std::polymorphic_allocator::destroy 的废弃
P2875R4
15
19.41*
移除已废弃的 strstreams
P2867R2
19
移除已废弃的 std::shared_ptr 原子访问 API
P2869R4
移除 std::wstring_convert
P2872R3
19
DR23: 允许 std::print 的高效实现 (FTM)*
P3107R5P3235R3
19.43*
执行控制库 (FTM)*
P2300R10P3396R0
std::inplace_vector: 具有固定容量的动态可调整大小向量 (FTM)*
P0843R14
std::philox_engine: 基于计数器的随机数引擎 (FTM)*
P2075R6
std::optional 范围支持 (FTM)*
P3168R2
std::is_virtual_base_of: 检测虚基类的类型特性 (FTM)*
P2985R0
15
20
std::mdspan 的 std::dims (FTM)*
P2389R2
19
DR11: std::ignore 类型的形式规范
P2968R2
15
19
19.42*
DR20: 移除间接可调用概念中的公共引用要求 (FTM)*
P2997R1
15
19
19.42*
废弃 std::is_trivial 和 std::is_trivial_v
P3247R2
15
DR20: 算法函数对象
P3136R1
是
是
19.39*
是
std::ranges::cache_latest_view (FTM)*
P3138R5
15
约束 std::expected 相等运算符 (FTM)*
P3379R0
15
std::aligned_accessor: 表示指针过对齐的 std::mdspan 访问器 (FTM)*
P2897R7
std::is_sufficiently_aligned: 检查指针的对齐前提条件 (FTM)*
P2897R7
std::atomic_ref::address() (FTM)*
P2835R7
DR11/20: std::atomic 和 std::atomic_ref 中的 cv 限定类型
P3323R1
19.44*
constexpr std::atomic 和 std::atomic_ref (FTM)*
P3309R3
专用内存算法的 constexpr (FTM)*
P3508R0P3369R0
P3370R1
P1928R15P3430R3P3441R2P3287R3P2663R7P2933R4
一个用于创建执行环境的实用程序
P3325R5
异常类型的 constexpr,例如 std::bad_alloc, std::bad_cast 等 (FTM)*
P3068R6P3378R2
平凡可重定位特性和操作 (FTM)*
P2786R13
去功能化并废弃 std::memory_order::consume
P3475R1
将 std::monostate 放入
P0472R3
15
std::indirect (FTM)*
P3019R14
std::polymorphic (FTM)*
P3019R14
更多 constexpr 容器和适配器 (FTM)*
P3372R2
非平凡类型的 constexpr std::inplace_vector (FTM)*
P3074R7
std::ranges::to_input_view (FTM)*
P3137R3
std::ranges::approximately_sized_range 和 std::ranges::reserve_hint (FTM)*
P2846R6
P0447R28
P2900R14
标准库强化
P3471R4
19.44* (部分)*
独立式库:算法、数值和随机 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P2976R1
DR20: 将连续迭代器转换为指针
P3349R0
C++26 特性
提案
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
[编辑] C++23 特性
[编辑]
[编辑] C++23 核心语言特性
C++23 特性
提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (前 PGI)*
Nvidia nvcc
Cray
(有符号) size_t 的字面量后缀 (FTM)*
P0330R8
11
13
19.43*
13.1.6*
6.5
2022.2
23.9
使 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
移除垃圾回收支持
P2186R2
12
N/A
19.30*
N/A
N/A
static_assert 和 constexpr if 中的收窄上下文转换
P1401R5
9
13 (部分)*14
14.0.0*
2022.2
20.7
行拼接前去除空白字符
P2223R2
是
是
是
6.7
2022.2
是
强制规定声明顺序布局
P1847R4
是
是
是
是
2022.2
是
移除混合宽字符串字面量连接
P2201R1
是
是
是
是
是
是
是
显式对象成员函数 (推导 this) (FTM)*
P0847R7
14
1819*
19.32*(部分)*19.43*
6.3
22.5
auto(x) 和 auto{x} (FTM)*
P0849R8
12
15
14.0.3*
6.4
2022.2
23.3
#elifdef 和 #elifndef
P2334R1
12
13
19.40*
13.1.6*
6.5
2022.2
23.9
constexpr 函数中的非字面量变量(以及标签和 goto)(FTM)*
P2242R3
12
15
19.43*
14.0.3*
6.3
2022.2
22.5
一致的字符字面量编码
P2316R2
是
是
19.30*
是
是
2022.2
是
字符集和编码
P2314R4
10
是
是
是
2022.2
是
扩展初始化语句(for 循环)以允许别名声明
P2360R0
12
14
14.0.0*
2022.2
多维下标运算符 (FTM)*
P2128R6
12
15
19.42*
14.0.3*
2022.2
lambda 上的属性
P2173R1
9
13
19.44*
13.1.6*
6.6
2022.2
22.5
#warning
P2437R1
是*
是
15.0.0*
6.5
2023.2
是
移除不可编码的宽字符字面量和多字符宽字符字面量
P2362R3
13
14
15.0.0*
6.7
2023.2
复合语句末尾的标签
P2324R2
13
16
16.0.0*
6.5
2023.2
23.9
带分隔符的转义序列
P2290R3
13
15
15.0.0*
6.7
2023.2
命名通用字符转义 (FTM)*
P2071R2
13
15
15.0.0*
6.7
2023.2
放宽一些 constexpr 限制 (FTM)*
P2448R2
13
17 (部分)19
2024.0 (部分)
更简单的隐式移动 (FTM)*
P2266R3
13
13
6.7
2022.2
static operator() (FTM)*
P1169R4
13
16
19.44*
16.0.0*
6.7
2023.2
可选扩展浮点类型的要求
P1467R9
13
N/A
6.4
从继承的构造函数中推导类模板参数
P2582R1
14
属性 [[assume]]
P1774R8
13
19
支持 UTF-8 作为可移植源文件编码
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
允许在 constexpr 函数中使用 static constexpr 变量 (FTM)*
P2647R1
13
16
16.0.0*
2023.2
在基于范围的 for 循环初始化器中延长临时对象的生命周期 (FTM)*
P2644R1P2718R0CWG2659
15
19
DR11:更改 lambda 尾部返回类型的范围
P2036R3P2579R0
17
2023.2
DR20:有意义的导出
P2615R1
15
17 (部分)
DR20: consteval 需要向上传播 (FTM)*
P2564R3
14
17
16.0.0*
6.7
2024.0
DR98:使用 Unicode 标准附件 31 的 C++ 标识符语法
P1949R7
12
14
14.0.0*
6.4
2022.2
DR11:允许重复的属性
P2156R1
11
13
13.1.6*
6.5
23.9
DR20:调整特性测试宏 __cpp_concepts 的值
P2493R0
12
19.32*
6.4
23.3
DR98:放宽 wchar_t 的要求以符合现有实践
P2460R2
是
是
是
15.0.0*
N/A
2023.2
DR11:常量表达式中使用未知指针和引用
P2280R4
14
20*
DR20:您正在寻找的相等运算符
P2468R2
13
16
16.0.0*
2023.2
DR20: char8_t 兼容性和可移植性修复 (FTM)*
P2513R4
13
16
19.34*
16.0.0*
2023.2
DR98/11:澄清诊断指令的报告,并允许在模板上下文中对非值依赖表达式进行 static_assert
CWG2518
13
17
16.0*(部分)*19.40*
C++23 特性
提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (前 PGI)*
Nvidia nvcc
Cray
[编辑] C++23 库特性
C++23 特性
提案
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
栈回溯库 (FTM)*
P0881R7P2301R1
12 (部分)*14*
19.34*
P0943R6
12
15
19.31*
14.0.3*
std::is_scoped_enum (FTM)*
P1048R1
11
12
19.30*
13.0.0*
std::basic_string::contains(), std::basic_string_view::contains() (FTM)*
P1679R3
11
12
19.30*
13.0.0*
std::to_underlying (FTM)*
P1682R3
11
13
19.30*
13.1.6*
放宽 time_point<>::clock 的要求
P2212R2
N/A
N/A
N/A
N/A
在 Allocator 接口中提供大小反馈 (FTM)*
P0401R6
15
19.30*
14.0.3*
P0448R4
12
19.31*
std::out_ptr(), std::inout_ptr() (FTM)*
P1132R8
14
19
19.30*
constexpr type_info::operator==() (FTM)*
P1328R1
12
17
19.33**19.34*
15.0.0*
std::stack 和 std::queue 的迭代器对构造函数 (FTM)*
P1425R4
12
14
19.31*
14.0.3*
容器推导指南中分配器的非推导上下文
P1518R2
12*
13*
19.31**
13.1.6**
ranges::starts_with() 和 ranges::ends_with() (FTM)*
P1659R3
17 (部分)*18
19.31*
16.0.0*
禁止从 nullptr 构造 std::basic_string 和 std::basic_string_view
P2166R1
12
13
19.30*
13.1.6*
std::invoke_r() (FTM)*
P2136R3
12
17
19.31*
15.0.0*
std::basic_string_view 的范围构造函数
P1989R2
11
14
19.30*
14.0.3*
std::pair 的转发构造函数的默认模板参数
P1951R1
14
14
19.30*
14.0.3*
移除垃圾回收和基于可达性的内存泄漏检测(库支持)
P2186R2
12
14
19.30*
14.0.3*
zip: views::zip, views::zip_transform, views::adjacent, 和 views::adjacent_transform (FTM)*
P2321R2
13
15 (部分)*
19.33*(部分)***19.37*
14.0.3*
关联容器的异构擦除重载 (FTM)*
P2077R3
19.32*
std::byteswap() (FTM)*
P1272R4
12
14
19.31*
14.0.3*
打印 volatile T*
P1147R1
11.3
14
19.31*
14.0.3*
basic_string::resize_and_overwrite() (FTM)*
P1072R10
12
14
19.31*
14.0.3*
std::optional 的单子操作 (FTM)*
P0798R8
12
14
19.32*
14.0.3*
std::move_only_function (FTM)*
P0288R9
12
19.32*
为 std::exchange 添加条件 noexcept 规范
P2401R0
12
14
19.25*
14.0.3*
要求 std::span 和 std::basic_string_view 是 TriviallyCopyable
P2251R1
是
是
是
是
澄清“C 头文件”的状态
P2340R1
是
是
是
是
P0323R12P2549R1
12
16
19.33*
15.0.0*
P0533R9
4.6 (部分)*
std::unreachable() (FTM)*
P0627R6
12
15
19.32*
14.0.3*
废弃 std::aligned_storage 和 std::aligned_union
P1413R3
13
16
19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary (FTM)*
P2255R2
13 (部分)*14
19
constexpr std::unique_ptr (FTM)*
P2273R3
12
16
19.33*
15.0.0*
使用 ranges::to() 从范围构造容器和字符串,带有标记构造函数、插入和赋值成员函数 (FTM)* (FTM)*
P1206R7
14 (部分)*
17
19.34*
15.0.0*
用户定义范围适配器的管道支持 (ranges::range_adaptor_closure, std::bind_back) (FTM)* (FTM)*
P2387R3
13 (部分)*14
19
19.34*
ranges::iota(), ranges::shift_left(), 和 ranges::shift_right() (FTM)* (FTM)*
P2440R1
13 (部分)*
19.34*
views::join_with (FTM)*
P2441R2
13
19.34*
views::chunk 和 views::slide (FTM)* (FTM)*
P2442R1
13
19.33*
views::chunk_by (FTM)*
P2443R1
13
18
19.33*
16.0.0*
std::mdspan: 非拥有的多维数组引用 (FTM)*
P0009R18P2599R2P2604R0P2613R1P2763R1
17 (部分)*18
19.39*
15.0.0*
P0429R9
15
20
P1222R4
15
ranges::find_last(), ranges::find_last_if(), 和 ranges::find_last_if_not() (FTM)*
P1223R5
13
19
19.36*
独立式库: 简易
P1642R11
13*
N/A
views::stride (FTM)*
P1899R3
13
19.34*
std::tuple 和类元组对象之间的兼容性 (FTM)*
P2165R4
14
2.9 (部分)*
19.36* (部分)*19.37*
部分*
修正常量迭代器、哨兵和范围。views::as_const (FTM)*
P2278R4
13
19.35* (部分)*19.36*
格式化范围 (FTM)*
P2286R8
16
19.37*(部分)*19.39*(部分)*19.41*(部分)*19.42*
15.0.0*
改进默认容器格式化 (FTM)*
P2585R1
16 (部分)*17
19.42*
15.0.0*
格式化输出库
P2093R14P2539R4
14
17 (部分)*18
19.37*
15.0.0**16.0.0*
格式化 std::thread::id 和 std::stacktrace (FTM)*
P2693R1
14
17 (部分)*
19.38*
15.0.0*
整数重载 std::to_chars() 和 std::from_chars() 的 constexpr (FTM)*
P2291R3
13
16
19.34*
15.0.0*
ranges::contains() 和 ranges::contains_subrange() (FTM)*
P2302R4
13
19
19.34*
16.0.0**
范围折叠算法 (FTM)*
P2322R6
13
19.35*
views::cartesian_product (FTM)*
P2374R4P2540R1
13
19.37*
为比较概念(equality_comparable、totally_ordered、three_way_comparable)添加仅移动类型支持 (FTM)*
P2404R3
19.36*
将范围迭代器作为非范围算法的输入 (FTM)*
P2408R5
19.34*
constexpr std::bitset (FTM)*
P2417R2
13
16
19.34*
15.0.0*
basic_string::substr() &&
P2438R2
16
19.34*
15.0.0*
views::as_rvalue (FTM)*
P2446R2
13
16
19.34*
15.0.0*
标准库模块 (FTM)*
P2465R3
15*
17 (部分)*
19.35*(部分)*19.36*
std::forward_like() (FTM)*
P2445R1
14
16
19.34*
15.0.0*
std::fstream 支持独占模式 (FTM)*
P2467R1
12
18
19.36*
16.0.0*
views::repeat (FTM)*
P2474R2
13
17
19.36*
15.0.0*
放宽范围适配器以允许仅移动类型 (FTM)*
P2494R2
14
17
19.34*
15.0.0*
std::basic_string_view 范围 构造函数 应该显式
P2499R0
12.2
16
19.34*
15.0.0*
std::generator: 用于范围的同步协程生成器 (FTM)*
P2502R2P2787R0
14
19.43*
为 std::apply 添加条件 noexcept 规范
P2517R1
10
18
19.34*
16.0.0*
显式生命周期管理 (std::start_lifetime_as) (FTM)*
P2590R2P2679R2
澄清 chrono 类型本地化格式化中编码的处理方式 (FTM)*
P2419R2
15*
19.34**
std::move_iterator 不应总是 input_iterator (FTM)*
P2520R0
12.3*
17*
19.34**
15.0.0*
为显式对象参数调用运算符更新推导指南
LWG3617
14
19.34*
为 static operator() 更新推导指南
P1169R4
13
16
19.39*
15.0.0*
扩展浮点类型的标准名称和库支持
P1467R9
13
19.37**
std::expected 的单子操作 (FTM)*
P2505R5
13
17
19.36*
15.0.0*
views::enumerate (FTM)*
P2164R9
13
19.37*
std::is_implicit_lifetime (FTM)*
P2674R1
20
std::reference_wrapper 的 std::common_reference_t 应该是引用类型 (FTM)* (FTM)*
P2655R3
19.37*
禁止用户特化 std::allocator_traits
P2652R2
19
19.37*
弃用 std::numeric_limits::has_denorm
P2614R2
18
19.37*
16.0.0*
使 views 的多参数构造函数 explicit
P2711R1
17 (部分)*
19.36**
15.0.0*
DR20:Ranges 只是一点点放松 (FTM)*
P2609R3
15
20
19.37*
DR20:暂存暂存迭代器以进行正确扁平化
P2770R0
14
18
19.37*
DR17: 派生自 std::variant 的类的 std::visit() (FTM)*
P2162R2
11.3
13
19.20**19.30*
13.1.6*
DR20:条件借用范围
P2017R1
11
16
19.30*
DR20:修复输入范围适配器和 std::counted_iterator
P2259R1
12
19.30*(部分)*19.31*
DR20:views::join 应该连接所有视图的范围
P2328R1
11.2
15
19.30*
14.0.3*
DR20: view 不要求 default_initializable (FTM)*
P2325R3
11.3
16
19.30*
15.0.0*
DR20: 范围适配器对象按值绑定参数
P2281R1
11
14
19.29 (16.10)*(部分)*19.31*
14.0.3*
DR20: std::optional 和 std::variant 的 constexpr (FTM)* (FTM)*
P2231R1
11.3 (部分)*12
13 (部分)*19
19.31*
13.1.6* (部分)
DR20: views::lazy_split 和重新设计的 views::split
P2210R2
12
16
19.31*
15.0.0*
DR20: 修复 ranges::istream_view
P2432R1
12
16
19.31*
15.0.0*
DR20: 具有所有权的 view (FTM)*
P2415R2
12
14
19.31*
14.0.3*
DR20: 修复 chrono 格式化程序中的区域设置处理 (FTM)*
P2372R3P2418R2
13
19.31*
DR20: 清理整数类类型
P2393R1
19.32*
DR20: 编译时格式字符串检查;减少 std::format() 家族的二进制代码大小 (FTM)*
P2216R3
13
14 (部分)*15
19.32*
14.0.3*
DR20: 为 std::format 添加对非 const 可格式化类型的支持
P2418R2
13
15
19.32*
14.0.3*
DR20: std::basic_format_string
P2508R1
13
15
19.35*
14.0.3*
DR20: “毒丸”毒性太强 (FTM)*
P2602R2
14
19
19.36*
DR20: std::format 填充字符允许
P2572R1
14
17
19.37*
DR20: 改进 std::format 的宽度估算
P2675R1
14
17
19.38*
DR20: std::barrier 的阶段完成保证 (FTM)*
P2588R3
19.28 (16.8)**19.36*
C++23 特性
提案
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
[编辑] C++20 特性
[编辑]
[编辑] C++20 核心语言特性
C++20 特性
提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (前 PGI)*
Nvidia nvcc
Cray
允许 Lambda 捕获 [=, this]
P0409R2
8
6
19.22*
10.0.0*
5.1
2021.1
20.7
12.0
11.0
__VA_OPT__
P0306R4P1042R1
8 (部分)*10 (部分)*12
9
19.25*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
指定初始化器 (FTM)*
P0329R4
4.7 (部分)*8
3.0 (部分)*10
19.21*
12.0.0*
5.1
2021.1
20.7
12.0
11.0
泛型 lambda 的模板参数列表 (FTM)*
P0428R2
8
9
19.22*
11.0.0*
5.1
2021.1
20.7
12.0
11.0
位域的默认成员初始化器
P0683R1
8
6
19.25*
10.0.0*
5.1
2021.1
20.7
12.0
11.0
类模板参数推导中的初始化列表构造函数
P0702R1
8
6
19.14*
是
5.0
2021.1
20.7
12.0
11.0
const&-限定的成员指针
P0704R1
8
6
19.0 (2015)*
10.0.0*
5.1
2021.1
20.7
12.0
11.0
概念 (FTM)*
P0734R0
5*10
10
19.23* (部分)*19.30*
12.0.0* (部分)
6.1
2023.1*
20.11
12.0
11.0
未求值上下文中的 Lambda
P0315R4
9
13 (部分)*14 (部分)*17
19.28 (16.8)*
13.1.6* (部分)
6.2
2023.1 (部分)2024.0
20.7
12.0
三向比较运算符 (FTM)*
P0515R3
10
8 (部分)10
19.20*
12.0.0*
5.1
2021.1
20.7
12.0
11.0
DR11: 简化隐式 lambda 捕获
P0588R1
8
19.24*
5.1
2021.1
20.7
12.0
基于范围的 for 循环的初始化语句
P0614R1
9
8
19.25*
11.0.0*
6.0
2021.7
20.11
12.0
11.0
默认可构造和可赋值的无状态 lambda
P0624R2
9
8
19.22*
10.0.1*
5.1
2021.1
20.7
12.0
11.0
默认特殊成员函数的类型不匹配
P0641R2
9 (部分)*
8
19.0 (2015)* (部分)*
10.0.1*
5.1
2021.1
20.7
12.0
11.0
对特化进行访问检查
P0692R1
是
8 (部分)14
19.26*
14.0.0*
5.1
2021.1
20.7
12.0
ADL 和不可见的函数模板
P0846R0
9
9
19.21*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
DR11: 指定何时需要 constexpr 函数定义进行常量求值 (FTM)*
P0859R0
5.2 (部分)*9
8
19.27* (部分)*19.31**
11.0.0*
(部分)
12.0
11.0
属性 [[likely]] 和 [[unlikely]]
P0479R5
9
12
19.26*
13.0.0*
5.1
2021.7
20.7
12.0
使 typename 更可选
P0634R3
9
16
19.29 (16.10)*
16.0.0*
5.1
2023.1
20.7
12.0
lambda 初始化捕获中的 包展开 (FTM)*
P0780R2
9
9
19.22*
11.0.3*
6.1
2021.7
20.11
12.0
11.0
属性 [[no_unique_address]]
P0840R2
9
9
19.28 (16.9)**
11.0.3*
5.1
2021.1
20.7
12.0
11.0
条件平凡的特殊成员函数 (FTM)*
P0848R3
10
16
19.28 (16.8)*
6.1
2021.7
20.11
12.0
DR17: 放松结构化绑定的自定义点查找规则
P0961R1
8
8
19.20*
10.0.1*
5.1
2021.1
20.7
12.0
11.0
DR11: 放松范围-for循环的自定义点查找规则
P0962R1
8
8
19.25*
11.0.0*
5.1
2021.1
20.7
12.0
11.0
DR17: 允许结构化绑定到可访问成员
P0969R0
8
8
19.20*
10.0.1*
5.1
2021.1
20.7
12.0
11.0
销毁 operator delete (FTM)*
P0722R3
9
6
19.27*
10.0.0*
6.1
2023.1
20.11
12.0
11.0
类类型在非类型模板参数中
P0732R2
9
12 (部分)
19.26*(部分)*19.28 (16.9)*
13.0.0* (部分)
6.2
2023.1 (部分)
21.3
12.0
弃用通过 [=] 隐式捕获 this 的一些用法
P0806R2
9
7
19.22*
10.0.1*
5.1
20.7
12.0
11.0
explicit(bool) (FTM)*
P0892R2
9
9
19.24*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
整合特性测试宏
P0941R2
5
3.4
19.15* (部分)19.20*
是
5.0
2021.1
20.7
12.0
11.0
禁止具有用户声明构造函数的聚合
P1008R1
9
8
19.20*
10.0.1*
5.1
2021.1
20.7
12.0
11.0
constexpr 虚函数 (FTM)*
P1064R0
9
9
19.28 (16.9)*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
比较一致性改进
P1120R0
10
8 (部分)10
19.22*
12.0.0*
5.1
2023.1
20.7
12.0
11.0
char8_t (FTM)*
P0482R6
9
7*
19.22*
10.0.0*
5.1
2021.1
20.7
12.0
11.0
std::is_constant_evaluated() (FTM)*
P0595R2
9
9
19.25*
11.0.3*
5.1
19.1
21.1
12.0
11.0
constexpr try-catch 块
P1002R1
9
8
19.25*
10.0.1*
5.1
2023.1
20.7
12.0
11.0
即时函数 (consteval) (FTM)*
P1073R3
10 (部分)*11
11 (部分)14 (部分)*17
19.28 (16.8)*(部分)*19.29 (16.10)*
11.0.3* (部分)15.0.0*
5.1
2021.1
20.7
12.0
嵌套内联命名空间
P1094R2
9
8
19.27*
10.0.1*
5.1
2021.1
20.7
12.0
11.0
另一种处理受限声明的方法
P1141R2
10
10
19.26* (部分)19.28 (16.9)*
12.0.5*
6.1
2023.1
20.11
12.0
11.0
有符号整数是二补码
P1236R1
9
9
是
11.0.3*
N/A
2023.1*
是*
12.0
11.0
dynamic_cast 和多态 typeid 在 常量表达式 中
P1327R1
10
9
19.28 (16.9)*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
在 constexpr 内部更改联合体的活动成员 (FTM)*
P1330R0
9
9
19.10*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
协程 (FTM)* (FTM)*
P0912R5LWG3393
10
8 (部分)17 (部分)*
19.0 (2015)* (部分)19.10**19.28 (16.8)*
10.0.1* (部分)
5.1
2021.1
23.3*
12.0 (仅主机代码)
聚合体的括号初始化 (FTM)*
P0960R3
10
16
19.28 (16.8)*
16.0.0*
5.1
2021.1
20.7
12.0
DR11: new 表达式中的数组大小推导
P1009R2
11
9
19.27*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
模块 (FTM)*
P1103R3
11 (部分)
8 (部分)
19.0 (2015)* (部分)19.10**19.28 (16.8)*
10.0.1* (部分)
2023.1 (部分)
更强的 Unicode 要求
P1041R4P1139R2
10
是
19.0 (2015)**19.26**
是
N/A
2023.1*
是
12.0
11.0
<=> != ==
P1185R2
10
10
19.22*
12.0.0*
5.1
2021.1
20.7
12.0
11.0
DR11: 具有不同异常规范的显式默认函数
P1286R2
10
9
19.28 (16.8)*
11.0.3*
5.1
2021.1
20.7
12.0
11.0
lambda 捕获和结构化绑定的存储类说明符
P1091R3P1381R1
10
8 (部分)16
19.11**19.24**
16.0.0*
5.1
2021.1
20.7
12.0
允许转换为未知大小的数组
P0388R4
10
14
19.27*
14.0.0*
6.0
2021.5
20.11
12.0
constexpr 容器操作 (FTM)*
P0784R7
10
10
19.28 (16.9)*
12.0.0*
6.0
2021.5
20.11
12.0
11.0
弃用 volatile 的一些用法
P1152R4
10
10
19.27*
12.0.0*
6.0
2021.5
20.11
12.0
11.0
constinit (FTM)*
P1143R2
10
10
19.29 (16.10)*
12.0.0*
6.1
2021.7
20.11
12.0
11.0
弃用下标中的逗号运算符
P1161R3
10
9
19.25*
11.0.3*
6.0
2021.7
20.11
12.0
11.0
带有消息的 [[nodiscard]]
P1301R4
10
9
19.25*
11.0.3*
6.0
2021.5
20.11
12.0
11.0
constexpr 函数中的平凡默认初始化
P1331R2
10
10
19.27*
12.0.0*
6.1
2021.7
20.11
12.0
11.0
constexpr 函数中未求值的 asm 声明
P1668R1
10
10
19.28 (16.9)*
12.0.0*
6.1
2021.7
20.11
12.0
11.0
using enum (FTM)*
P1099R5
11
13
19.24*
13.1.6*
6.3
2023.1
22.5
12.0
为指定比较类别合成三路比较
P1186R3
11
10
19.24*
12.0.0*
6.0
2021.5
20.11
12.0
11.0
DR17: 构造函数的 [[nodiscard]]
P1771R1
10
9
19.24*
11.0.3*
6.0
2021.5
20.11
12.0
11.0
别名模板的类模板参数推导 (FTM)*
P1814R0
10
19
19.27*
6.5
23.9
12.0
聚合体的类模板参数推导 (FTM)*
P1816R0P2082R1
10*11*
17
19.27*
6.3
2023.1 (部分)*2024.1
23.3
12.0
DR11: 更多局部对象和右值引用的隐式移动
P1825R0
11*
13
19.24*
13.1.6*
6.0
2021.5
20.11
12.0
允许按值默认比较
P1946R0
10
10
19.25*
12.0.0*
6.1
2021.7
20.11
12.0
11.0
移除 std::weak_equality 和 std::strong_equality
P1959R0
10
10
19.25*
12.0.0*
6.1
2021.7
20.11
12.0
11.0
非类型模板参数的不一致性 (FTM)*
P1907R1
10 (部分)11
18 (部分)*
19.26*
13.1.6* (部分)
6.2
2023.1 (部分)
21.3
12.0
DR98: 伪析构函数结束对象生命周期
P0593R6
11
11
是
12.0.5*
N/A
2023.1*
是
12.0
11.0
DR11: 从 T* 转换为 bool 应视为收缩转换
P1957R2
10*11*
11
19.27*
12.0.5*
6.1
12.0
11.0
C++20 特性
提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (前 PGI)*
Nvidia nvcc
Cray
[编辑] C++20 库特性
C++20 特性
提案
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
std::endian (FTM)*
P0463R1
8
7
19.22*
10.0.0*
扩展 std::make_shared() 以支持数组 (FTM)*
P0674R1
12
15
19.27*
14.0.3*
浮点原子 (FTM)*
P0020R6
10
18
19.22*
16.0.0*
同步缓冲区 (std::basic_osyncstream) (FTM)*
P0053R7
11
18
19.29 (16.10)*
P0202R3
10
8 (部分)12
19.26*
10.0.1* (部分)13.0.0*
P0415R1
9
7 (部分)16
19.27*
10.0.0* (部分)15.0.0*
使 std::memory_order 成为有作用域的枚举
P0439R0
9
9
19.25*
11.0.3*
字符串前缀和后缀检查:string(_view) ::starts_with / ends_with (FTM)*
P0457R2
9
6
19.21*
10.0.0*
operator<=> 的库支持 (FTM)*
P0768R1
10
7 (部分)12 (部分)*17
19.20* (部分)19.28 (16.9)*
13.0.0*
std::remove_cvref (FTM)*
P0550R2
9
6
19.20*
10.0.0*
[[nodiscard]] 在标准库中
P0600R1
9
7 (部分)16
19.13* (部分)19.22*
10.0.0* (部分)15.0.0*
在数值算法中使用 std::move
P0616R0
9
12
19.23*
13.0.0*
将指针转换为原始指针的实用程序 (FTM)*
P0653R2
8
6
19.22*
是
原子 std::shared_ptr 和 std::weak_ptr (FTM)*
P0718R2
12
19.27*
std::span (FTM)*
P0122R7
10
7
19.26*
10.0.0*
日历和时区 (FTM)*
P0355R7
11 (部分)*13 (部分)*14
7 (部分)19 (部分)*
19.29 (16.10)*
10.0.0* (部分)
P0754R2
9
7
19.22*
10.0.0*
比较无序容器
P0809R0
是
是
16.0*
是
ConstexprIterator 要求 (FTM)* (FTM)*
P0858R0
9
12
19.11*
13.0.0*
std::basic_string::reserve() 不应缩小
P0966R1
11
8
19.25*
10.0.1*
带填充位的原子比较和交换
P0528R3
13
19.28 (16.8)*
std::atomic_ref (FTM)*
P0019R8
10
19
19.28 (16.8)*
contains() 关联容器的成员函数,例如 std::map::contains()
P0458R2
9
13
19.21*
13.1.6*
DR11: 分段构造的保证复制省略
P0475R1
9
是
19.29 (16.10)*
是
std::bit_cast() (FTM)*
P0476R2
11
14
19.27*
14.0.3*
2 的整数幂操作std::bit_ceil(), std::bit_floor(), std::bit_width(), std::has_single_bit() (FTM)*
P0556R3P1956R1
9*10*
9*12*
19.25**19.27**19.28 (16.8)*
11.0.3**13.0.0**
改进类似擦除算法的返回值 (FTM)*
P0646R1
9
10
19.21*
12.0.0*
std::destroying_delete_t (FTM)*
P0722R3
9
9
19.27*
11.0.3*
std::is_convertible (FTM)*
P0758R1
9
9
19.23*
11.0.3*
将 std::shift_left/right 添加到 (FTM)*
P0769R2
10
12
19.21*
13.0.0*
Constexpr 用于 std::swap() 和 swap 相关函数
P0879R0
10
13
19.26*
13.1.6*
std::type_identity (FTM)*
P0887R1
9
8
19.21*
10.0.1*
概念库 (FTM)*
P0898R3
10
13
19.23*
13.1.6*
constexpr 比较运算符 用于 std::array
P1023R0
10
8
19.27*
10.0.1*
std::unwrap_ref_decay 和 std::unwrap_reference (FTM)*
P0318R1
9
8
19.21*
10.0.1*
std::bind_front() (FTM)*
P0356R5
9
13
19.25*
13.1.6*
std::reference_wrapper 用于不完整类型
P0357R3
9
8
19.26*
10.0.1*
修复 operator>>(basic_istream&, CharT*)
P0487R1
11
8
19.23*
10.0.1*
char8_t 的库支持 (FTM)*
P0482R6
9
8 (部分)16
19.22*
10.0.1* (部分)15.0.0*
实现使用分配器构造的实用程序函数
P0591R4
9
16
19.29 (16.10)*
15.0.0*
DR17:std::variant 和 std::optional 应该传播复制/移动平凡性
P0602R4
8.3
8
19.11*
10.0.1*
DR17: 一个合理的 std::variant 转换构造函数
P0608R3
10
9
19.29 (16.10)**19.42**
11.0.3*
std::function 的移动构造函数应为 noexcept
P0771R1
7.2
6
19.22*
是
单范围提案 (FTM)*
P0896R4
10
13 (部分)15*
19.29 (16.10)*
14.0.3*
无序关联容器的异构查找 (FTM)*
P0919R3P1690R1
11
12
19.23* (P0919R3)19.25* (P1690R1)
13.0.0*
P0972R0
9
8
19.14*
10.0.1*
constexpr 在 std::pointer_traits 中 (FTM)*
P1006R1
9
8
19.26*
10.0.1*
std::assume_aligned() (FTM)*
P1007R3
9*11
15
19.28 (16.9)*
14.0.3*
智能指针的默认初始化创建(例如 make_unique_for_overwrite) (FTM)*
P1020R1P1973R1
11*12*
16
19.28 (16.9)*
15.0.0*
杂项 constexpr 位 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P1032R1
10
13
19.28 (16.8)*
13.1.6*
移除 std::span 的比较运算符
P1085R2
10
8
19.26*
10.0.1*
使有状态分配器传播对于 operator+(basic_string) 更一致
P1165R1
10
15
19.26*
14.0.3*
一致的容器擦除,例如 std::erase(std::vector),或 std::erase_if(std::map) (FTM)*
P1209R0P1115R3
9*10*
8*11*
19.25**19.27**
10.0.1**12.0.5**
标准库头单元
P1502R1
11
19.29 (16.10)*
polymorphic_allocator<> 作为词汇类型 (FTM)*
P0339R6
9
16
19.28 (16.9)*
15.0.0*
std::execution::unseq (FTM)*
P1001R2
9
17
19.28 (16.8)*
std::lerp() 和 std::midpoint() (FTM)*
P0811R3
9
9
19.23* (部分)19.28 (16.8)*
11.0.3*
对 std::span 的可用性增强
P1024R3
10
9*14
19.26*
11.0.3*
DR17: 使 std::create_directory() 更直观
P1164R1
8.3
12
19.20*
13.0.0*
std::ssize() 和 std::span 的无符号范围 (FTM)*
P1227R2
10
9
19.25*
11.0.3*
(无)界限数组的特性 (FTM)*
P1357R1
9
9
19.25*
11.0.3*
std::to_array() (FTM)*
P0325R4
10
10
19.25*
12.0.0*
高效访问 std::basic_stringbuf 的缓冲区
P0408R7
11
17
19.29 (16.10)*
15.0.0*
布局-兼容性和指针-可互换性特性 (FTM)* (FTM)*
P0466R5
12
19.29 (16.10)**
位操作: std::rotl(), rotr(), countl_zero(), countl_one(), countr_zero(), countr_one(), popcount() (FTM)*
P0553R4
9
9
19.25**19.28 (16.8)*
11.0.3*
数学常量 (FTM)*
P0631R8
10
11
19.25*
12.0.5*
文本格式 (FTM)*
P0645R10
13
14**17
19.29 (16.10)*
15.0.0*
std::stop_token 和 std::jthread (FTM)*
P0660R10
10
17(部分)*20*
19.28 (16.9)*
constexpr std::allocator 及相关实用程序 (FTM)*
P0784R7
10
12
19.29 (16.10)*
13.0.0*
constexpr std::string (FTM)*
P0426R1P1032R1P0980R1
12
15
19.29 (16.10)*19.30**
14.0.3*
constexpr std::vector (FTM)*
P1004R2
12
15
19.29 (16.10)*19.30**
14.0.3*
输入范围适配器
P1035R7
10
16
19.29 (16.10)*
15.0.0*
constexpr std::invoke() 和相关工具
P1065R2
10
12
19.28 (16.8)*
13.0.0*
原子等待和通知、std::counting_semaphore、std::latch 和 std::barrier (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P1135R6
11
11
19.28 (16.9)*
13.1.6*
std::source_location (FTM)*
P1208R6
11
15*(部分)16
19.29 (16.10)*
15.0.0*
将 <=> 添加到标准库
P1614R2
10
14*(部分)17*(部分)19
19.29 (16.10)*
13.1.6* (部分)
constexpr std::atomic 和 std::atomic_flag 的默认构造函数 (FTM)*
P0883R2
10
13
19.26*
13.1.6*
constexpr 用于数值算法 (FTM)*
P1645R1
10
12
19.26*
13.0.0*
安全整数比较 (FTM)*
P0586R2
10
13
19.27*
13.1.6*
C++20 特性
提案
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
[编辑本节:旧标准] 旧标准
[编辑]
C++17 核心语言特性
C++17 库特性
[编辑]
C++14 核心语言特性
C++14 库特性
[编辑]
C++11 核心语言特性
C++11 库特性
[编辑本节:另请参阅] 另请参阅
特性测试 (C++20)
一组预处理器宏,用于测试与 C++ 语言和库特性对应的功能
C 文档 关于 编译器支持