C++ 编译器支持情况表

来自cppreference.com
< cpp
 
 
C++ 语言
 

下表为各个编译器对新的 C++ 功能的支持情况。包括已经接受的修订版本以及大量技术规范:

注解

* - 在版本号上停留可以查看注记
DRnn - 在 "DR" 后的数字 nn 表示应用该缺陷报告的目标 C++ 修订版本,例如 DR20 → C++20。

C++26 功能特性

C++26 核心语言功能特性

C++26 功能特性
 
提案
 
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
DR23: 从词法分析中删除未定义的行为 P2621R2 3.3
DR: 使不可编码的字符串文本格式不正确 P1854R4 14
不求值字符串 P2361R6 17 (部分)*
18
@$,和 ` 添加至基本字符集 P2558R2
constexpr 的从 void* 转换 P2738R1 14 17
DR: 使标准属性可忽略 P2552R2
DR: 大括号初始化的静态存储 P2752R2 14
用户生成的 static_assert 消息 P2741R3 17
没有名字的占位符变量 P2169R4 18
C++26 功能特性
 
提案
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

C++26 库功能特性

C++26 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库
测试 <charconv> 函数的成功或失败 P2497R0 18
std::text_encoding:文本编码识别 P1885R12
使用 std::format 实现 std::to_stringstd::to_wstring P2587R3 14
类型检查格式参数 P2757R3
格式化指针 P2510R3 14 17
std::chrono哈希支持 P2592R3
读-拷贝更新 (Read-copy update,RCU) P2545R4
风险指针 P2530R3
ADL 阻止 std::projected P2538R1 14 19.38*
constexpr 的稳定排序 P2562R1
成员 visit P2637R3
常量求值的 std::is_within_lifetime P2641R4
使用既存的异构重载扩展关联容器 P2363R5
允许在无序关联容器中使用 std::weak_ptr 作为 key P1901R2
从文件流获得本机句柄 P1759R6
字符串流的 std::string_view 接口 P2495R3
std::bitsetstd::string_view 接口 P2697R1
使 <cmath><complex> 更 constexpr P1383R2 4.6 (部分)*
为 <ratio> 添加新的 2022 SI 前缀:std::quectostd::rontostd::ronnastd::quetta P2734R0 14 17
std::function_ref:类型擦除的可调用引用 P0792R14
std::copyable_function P2548R6
std::bind_frontstd::bind_backstd::not_fn 到 NTTP 可调用对象 P2714R1
std::submdspan() P2630R4
独立语言:可选 ::operator new P2013R5 不适用
C++26 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库

C++23 功能特性

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*

6.5
使更多 lambda() 可以被省略 P1102R2 11 13

13.1.6*

6.3
if consteval P1938R3 12 14

14.0.0*

6.3
移除垃圾收集支持 P2186R2 12 19.30* 不适用
允许在 static_assertconstexpr if 中进行整数到 bool 的隐式转换 P1401R5 9 13 (部分)*
14

14.0.0*

剔除拼接符后的空白符 P2223R2
使类布局更遵守声明顺序 P1847R4
移除混合宽度字符串字面量拼接 P2201R1
推导 this P0847R7 19.32*
(部分)*
6.3
auto(x)auto{x} P0849R8 12 15

14.0.3*

6.4
更改 lambda 尾随返回类型的作用域 P2036R3 15
#elifdef#elifndef P2334R1 12 13

13.1.6*

6.5
constexpr 函数中的非字面类型变量(以及句标与 goto P2242R3 12 15

14.0.3*

6.3
一致的字符字面量编码 P2316R2 19.30*
字符集与编码 P2314R4 10
扩展初始化语句以允许别名声明 P2360R0 12 14

14.0.0*

多维数组下标运算符 P2128R6 12 15

14.0.3*

lambda 上的属性 P2173R1 9 13

13.1.6*

#warning P2437R1 是* 6.5
移除不可编码的宽字符字面量和多字符宽字符字面量 P2362R3 13 14
复合语句末尾的标签 P2324R2 13 16 6.5
划线的转义序列 P2290R3 13 15
命名的通用转义字符 P2071R2 13 15
放松 constexpr 的限制 P2448R2 13 17 (部分)
简化的隐式移动 P2266R3 13 13
static operator() P1169R4 13 16
可选的扩展浮点类型要求 P1467R9 13 不适用 6.4
从继承的构造函数中推导出类模板参数 P2582R1
[[assume]] 属性 P1774R8 13
支持 UTF-8 作为一种可移植的源文件编码 P2295R6 13* 15* 19.0 (Update 2)*
static operator[] P2589R0 13 16
允许 constexpr 函数中的 static constexpr 变量 P2647R1 13 16
延长范围 for 循环初始化器中临时变量的生命 P2718R0
DR20:有意义的导出 P2615R0 17 (部分)
DR20:consteval 需要向上传播 P2564R0 17
DR:C++ 标识符语法使用 Unicode 标准附录 31 P1949R7 12 14

14.0.0*

6.4
DR11:允许重复属性 P2156R1 11 13

13.1.6*

6.5
DR20:调整功能特性测试宏 __cpp_concepts 的值 P2493R0 12 19.32* 6.4
DR98:放宽 wchar_t 的要求以符合现有实现 P2460R2
DR:在常量表达式中使用未知的指针和引用 P2280R4
DR20:放宽相等性运算的重写规则 P2468R2 13 16
DR20:char8_t 兼容性和可移植性修复 P2513R4 13 16 19.34*
DR:澄清诊断指令报告的内容并允许 static_assert 模板上下文中使用非值依赖性表达式 CWG2518 13
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(部分)*
14*
19.34*
<stdatomic.h> P0943R6 12 15 19.31*

14.0.3*

std::is_scoped_enum P1048R1 11 12 19.30*

13.0.0*

basic_string/basic_string_viewcontains() P1679R3 11 12 19.30*

13.0.0*

std::to_underlying P1682R3 11 13 19.30*

13.1.6*

放松 time_point<>::clock 的要求 P2212R2 不适用 不适用
在分配器接口中提供大小反馈 P0401R6 15 19.30*

14.0.3*

<spanstream> :以 std::span 为基础的字符串流 P0448R4 12 19.31*
std::out_ptr()std::inout_ptr() P1132R8 19.30*
constexpr type_info::operator==() P1328R1 12 17 19.33**
19.34*
std::stackstd::queue 的迭代器对构造函数 P1425R4 12 14 19.31*

14.0.3*

容器推导指引中分配器的非推导语境 P1518R2 12 13 19.31*

13.1.6*

ranges::starts_with()ranges::ends_with() P1659R3 17 (部分)* 19.31*
禁止 basic_stringbasic_string_viewnullptr 构造 P2166R1 12 13 19.30*

13.1.6*

std::invoke_r() P2136R3 12 17 19.31*
basic_string_view 的范围构造函数 P1989R2 11 14 19.30*

14.0.3*

pair 的转发构造函数的默认模板实参 P1951R1 14 19.30*

14.0.3*

移除垃圾收集与基于可达性的泄漏检测(库支持 P2186R2 12 14 19.30*

14.0.3*

zip: views::zipviews::zip_transformviews::adjacentviews::adjacent_transform P2321R2 13 15 (部分)* 19.33*(部分)***
19.37*

14.0.3*

关联容器的异质擦除重载 P2077R3 19.32*
std::byteswap() P1272R4 12 14 19.31*

14.0.3*

打印 volatile T* P1147R1 11.3 14 19.31*

14.0.3*

basic_string::resize_and_overwrite() P1072R10 12 14 19.31*

14.0.3*

std::optional 的单子操作 P0798R8 12 14 19.32*

14.0.3*

std::move_only_function P0288R9 12 19.32*
std::exchange 添加条件性 noexcept 说明 P2401R0 12 14 19.25*

14.0.3*

要求 spanbasic_string_view可平凡复制 (TriviallyCopyable) P2251R1
澄清“C 头文件”的状况 P2340R1
<expected> P0323R12
P2549R1
12 16 19.33*
constexpr 的 <cmath><cstdlib> P0533R9 4.6 (部分)*
std::unreachable() P0627R6 12 15 19.32*

14.0.3*

弃用 std::aligned_storagestd::aligned_union P1413R3 13 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary P2255R2 13 (部分)*
constexpr std::unique_ptr P2273R3 12 16 19.33*
ranges::to() P1206R7 17 19.34*
用户定义适配器范围的管道支持(ranges::range_adaptor_closure, std::bind_back P2387R3 13 (部分)* 19.34*
ranges::iota()ranges::shift_left()ranges::shift_right() P2440R1 13 (部分)* 19.34*
views::join_with P2441R2 13 19.34*
views::chunkviews::slide P2442R1 13 19.33*
views::chunk_by P2443R1 13 18 19.33*
std::mdspan:非所有者的多维数组引用 P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (部分)*
<flat_map> P0429R9
<flat_set> P1222R4
ranges::find_last()ranges::find_last_if(),和 ranges::find_last_if_not() P1223R5 13 19.36*
独立库:更简单的 <utility><ranges><iterator> P1642R11 13* 不适用
views::stride P1899R3 13 19.34*
比较 std::tuple 和 tuple-like 对象 P2165R4 2.9(部分)* 19.36*(部分)*
19.37*
部分*
矫正常量迭代器、哨兵和范围 P2278R4 13 19.35* (部分)*
19.36*
格式化范围 P2286R8 16
改进容器的默认格式化 P2585R1 16(部分)*
17
格式化输出库 <print> P2093R14
P2539R3
17 (部分)* 19.37*
格式化 std::thread::idstd::stacktrace P2693R1 14 17(部分)* 19.38*
constexprstd::to_chars()std::from_chars() 对整数的重载 P2291R3 13 16 19.34*
ranges::contains()ranges::contains_subrange() P2302R4 13 19.34*
范围折叠算法 P2322R6 13 19.35*
views::cartesian_product P2374R4
P2540R1
13 19.37*
对仅移动类型添加可比较概念 (equality_comparabletotally_orderedthree_way_comparable) P2404R3 19.36*
非范围算法输入的范围迭 P2408R5 19.34*
constexpr 的 std::bitset P2417R2 13 16 19.34*
basic_string::substr() && P2438R2 16 19.34*
views::as_rvalue P2446R2 13 16 19.34*
标准库模块 P2465R3 17(部分)* 19.35*
(部分)*
19.36*
std::forward_like() P2445R1 16 19.34*
std::fstream 添加可执行模式 P2467R1 12 19.36*
views::repeat P2474R2 13 17 19.36*
放宽范围适配器对只移动类型的要求 P2494R2 14 17 19.34*
std::basic_string_view 范围构造函数 应为 explicit P2499R0 12.2 16 19.34*
std::generator:范围同步协程生成器 P2502R2
P2787R0
std::apply 添加条件 noexcept 说明 P2517R1 10 19.34*
显式生命周期管理 (std::start_lifetime_as) P2590R2
P2679R2
明确 chrono 类型本地化格式中编码的处理方法 P2419R2 19.34**
std::move_iterator 不应该总为 input_iterator P2520R0 12.3* 17* 19.34**
显式对象实参函数调用运算符 的推导指引更新 LWG3617 19.34*
static operator() 的推导指引更新 P1169R4 13 16
扩展浮点类型的标准名字以及库支持 P1467R9 13 19.37**
std::expected 的单子操作 P2505R5 13 17 19.36*
views::enumerate P2164R9 13 19.37*
std::is_implicit_lifetime P2674R1
std::reference_wrapperstd::common_reference_t 应该为引用类型 P2655R3 19.37*
禁止用户特化 std::allocator_traits P2652R2 19.37*
弃用 std::numeric_limits::has_denorm P2614R2 19.37*
std::barrier 的阶段完成保证 P2588R3 19.36*
view 创造 explicit 的多参构造函数 P2711R1 17(部分)* 19.36**
稍微放松 range 的要求 P2609R3 19.37*
储存储存迭代器以实现适当的扁平化 P2770R0 19.37*
DR17:std::variant 的派生类的 std::visit P2162R2 11.3 13 19.20**
19.30*

13.1.6*

DR20:条件性借用范围 P2017R1 11 19.30*
DR20:修复输入范围适配器std::counted_iterator P2259R1 12 19.30*(部分)*
19.31*
DR20:join_view 应结合所有范围 P2328R1 11.2 15 19.30*

14.0.3*

DR20:view 不要求 default_initializable P2325R3 11.3 16 19.30*
DR20:范围适配器对象按值绑定实参 P2281R1 11 14 19.29 (16.10)*
(部分)*
19.31*

14.0.3*

DR20:std::optionalstd::variantconstexpr P2231R1 11.3 (部分)*
12
13 (部分)* 19.31*

13.1.6* (部分)

DR20:lazy_split_view 与重新设计的 split_view P2210R2 12 16 19.31*
DR20:修复 views::istream_view P2432R1 12 16 19.31*
DR20:带所有权的 view P2415R2 12 14 19.31*

14.0.3*

DR20:修复 chrono 格式化器中的本地环境支持 P2372R3 19.31*
DR20:清理整数类类型 P2393R1 19.32*
DR20:std::format() 改进 P2216R3 13 14 (partial)*
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:放松对定制点对象的限制 P2602R2 14 19.36*
DR20:std::format 补齐填充字符 P2572R1 17 19.37*
DR20:改进 std::format 的宽度估计 P2675R1 17 19.38*
C++23 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库

C++20 功能特性

C++20 核心语言功能特性

C++20 功能特性
 
提案
 
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
允许 lambda 捕获 [=, this] P0409R2 8 6 19.22*

10.0.0*

5.1 2021.1 20.7
__VA_OPT__ P0306R4
P1042R1
8 (部分)*
10 (部分)*
12
9 19.25*

11.0.3*

5.1 2021.1 20.7
指派初始化器 P0329R4 4.7 (部分)*
8
3.0 (部分)*
10
19.21* (部分)* 5.1 2021.1 20.7
泛型 lambda 的模板形参列表 P0428R2 8 9 19.22*

11.0.0*

5.1 2021.1 20.7
位域的默认成员初始化器 P0683R1 8 6 19.25*

10.0.0*

5.1 2021.1 20.7
类模板实参推导中的 intializer_list 构造函数 P0702R1 8 6 19.14* 5.0 2021.1 20.7
const& 限定的成员指针 P0704R1 8 6 19.0 (2015)*

10.0.0*

5.1 2021.1 20.7
概念 P0734R0 6
(仅 TS)
10
10 19.23* (部分)*
19.30*

12.0.0* (partial)

6.1 2021.5 20.11
不求值语境中的 lambda P0315R4 9 13 (部分)*
14 (部分)*
19.28 (16.8)*

13.1.6* (部分)

三路比较运算符 P0515R3 10 8 (部分)
10
19.20* 5.1 2021.1 20.7
DR :简化隐式 lambda 捕获 P0588R1 8 19.24* 5.1 2021.1 20.7
基于范围的 for 的初始化语句 P0614R1 9 8 19.25*

11.0.0*

6.0 20.11
可默认构造与可赋值的无状态 lambda P0624R2 9 8 19.22*

10.0.1*

5.1 2021.1 20.7
预置复制构造函数与 const 的不匹配 P0641R2 9 8 19.0 (2015)*

10.0.1*

5.1 2021.1 20.7
特化上的访问检查 P0692R1 8 (部分)
14
19.26*

10.0.1* (部分)
14.0.0*

5.1 2021.1 20.7
ADL 与不可见的函数模板 P0846R0 9 9 19.21*

11.0.3*

5.1 2021.1 20.7
DR:指定 constexpr 函数定义何时为常量求值所需要 P0859R0 5.2 (部分)*
9
8 19.27* (partial)*
19.31*

11.0.0*

属性 [[likely]][[unlikely]] P0479R5 9 12 19.26*

13.0.0*

5.1 20.7
使 typename 更可选 P0634R3 9 16 19.29 (16.10)* 5.1 20.7
Lambda 初始化捕获中的包展开 P0780R2 9 9 19.22*

11.0.3*

6.1 20.11
属性 [[no_unique_address]] P0840R2 9 9 19.28 (16.9)**

11.0.3*

5.1 2021.1 20.7
条件性平凡的特殊成员函数 P0848R3 10 16 19.28 (16.8)* 6.1 20.11
DR:放松结构化绑定定制点查找规则 P0961R1 8 8 19.21*

10.0.1*

5.1 2021.1 20.7
DR:放松范围 for 循环定制点查找规则 P0962R1 8 8 19.25*

11.0.0*

5.1 2021.1 20.7
DR:允许到可访问成员的结构化绑定 P0969R0 8 8 19.21*

10.0.1*

5.1 2021.1 20.7
销毁的 operator delete P0722R3 9 6 19.27*

10.0.0*

6.1 20.11
非类型模板形参非类型模板形参中的类类型 P0732R2 9 12 (部分) 19.26*(partial)*
19.28 (16.9)*

13.0.0* (部分)

6.2
弃用经由 [=] 隐式捕获 this P0806R2 9 7 19.22*

10.0.1*

5.1 20.7
explicit(bool) P0892R2 9 9 19.24*

11.0.3*

5.1 2021.1 20.7
集成功能特性测试宏 P0941R2 5 3.4 19.15* (部分)
19.20*
5.0 2021.1 20.7
禁止有用户声明构造函数的聚合体 P1008R1 9 8 19.20*

10.0.1*

5.1 2021.1 20.7
constexpr 虚函数 P1064R0 9 9 19.28 (16.9)*

11.0.3*

5.1 2021.1 20.7
比较的一致性改进 P1120R0 10 8 (部分)
10
19.22*

12.0.0*

5.1 20.7
char8_t P0482R6 9 7* 19.22*

10.0.0*

5.1 2021.1 20.7
std::is_constant_evaluated() P0595R2 9 9 19.25*

11.0.3*

5.1 19.1
constexpr 函数中的 try-catch P1002R1 9 8 19.25*

10.0.1*

5.1 20.7
立即函数consteval P1073R3 10 (部分)*
11
11 (部分)
14 (部分)*
19.28 (16.8)**
(部分)
19.29 (16.10)*

11.0.3* (部分)

5.1 2021.1 20.7
嵌套内联命名空间 P1094R2 9 8 19.27*

10.0.1*

5.1 2021.1 20.7
有约束声明的另一种手段 P1141R2 10 10 19.26* (部分)
19.28 (16.9)*

12.0.5*

6.1 20.11
有符号整数为补码 P1236R1 9 9

11.0.3*

不适用 不适用
constexpr dynamic_cast 及多态 typeid P1327R1 10 9 19.29 (16.10)*

11.0.3*

5.1 2021.1 20.7
constexpr 内更改联合体的活跃成员 P1330R0 9 9 19.10*

11.0.3*

5.1 2021.1 20.7
协程 P0912R5 10 8 (部分) 19.0 (2015)* (部分)
19.10* (仅 TS)
19.28 (16.8)*

10.0.1* (部分)

5.1 2021.1
括号形式的聚合体初始化 P0960R3 10 19.28 (16.8)* 5.1 2021.1 20.7
DR: new 表达式中的数组大小推导 P1009R2 11 9 19.27*

11.0.3*

5.1 2021.1 20.7
模块 P1103R3 11 (部分) 8 (部分) 19.0 (2015)* (部分)
19.10* (仅 TS)
19.28 (16.8)*

10.0.1* (部分)

更强的 Unicode 要求 P1041R4
P1139R2
10 19.0 (2015)* (P1041R4)
19.26* (P1139R2)
不适用
<=> != == P1185R2 10 10 19.22*

12.0.0*

5.1 2021.1 20.7
DR :拥有不同异常说明的显式默认化函数 P1286R2 10 9 19.28 (16.8)*

11.0.3*

5.1 2021.1 20.7
结构化绑定的 lambda 捕获与存储类说明符 P1091R3
P1381R1
10 8 (partial)
16
19.11*(P1381R1)
19.24*(P1091R3)

10.0.1* (部分)

5.1 2021.1 20.7
容许转换到未知边界数组 P0388R4 10 14 19.27*

14.0.0*

6.0 2021.5 20.11
constexpr 容器操作 P0784R7 10 10 19.28 (16.9)*

12.0.0*

6.0 2021.5 20.11
弃用 volatile 的某些用法 P1152R4 10 10 19.27*

12.0.0*

6.0 2021.5 20.11
constinit P1143R2 10 10 19.29 (16.10)*

12.0.0*

6.1 20.11
弃用下标中的逗号运算符 P1161R3 10 9 19.25*

11.0.3*

6.0 2021.5 20.11
带消息的 [[nodiscard]] P1301R4 10 9 19.25*

11.0.3*

6.0 2021.5 20.11
constexpr 函数中的平凡默认初始化 P1331R2 10 10 19.27*

12.0.0*

6.1 20.11
constexpr 函数中的不求值 asm 声明 P1668R1 10 10 19.28 (16.9)*

12.0.0*

6.1 20.11
using enum P1099R5 11 13 19.24*

13.1.6*

6.3
对指定的比较类别合成三路比较 P1186R3 11 10 19.24*

12.0.0*

6.0 2021.5 20.11
DR:构造函数的 [[nodiscard]] P1771R1 10 9 19.24*

11.0.3*

6.0 2021.5 20.11
别名模板的类模板实参推导 P1814R0 10 19.27*
聚合类的类模板实参推导 P1816R0
P2082R1
10(P1816R0)
11(P2082R1)
19.27* 6.3
DR :更多局部对象与右值引用的隐式移动 P1825R0 11* 13 19.24*

13.1.6*

6.0 2021.5 20.11
允许默认化按值比较 P1946R0 10 10 19.25*

12.0.0*

6.1 20.11
移除 std::weak_equalitystd::strong_equality P1959R0 10 10 19.25*

12.0.0*

6.1 20.11
非类型模板形参的不一致 P1907R1 10 (部分)
11
12 (部分) 19.26*

13.1.6* (部分)

6.2
DR:伪析构函数终结对象生存期 P0593R6 11 11

12.0.5*

不适用 不适用
DR :应认为从 T*bool 的转换为窄化 P1957R2 10*
11*
11 19.27*

12.0.5*

6.1
C++20 功能特性
 
提案
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

C++20 库功能特性

C++20 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库
std::endian P0463R1 8 7 19.22*

10.0.0*

扩展 std::make_shared() 以支持数组 P0674R1 12 15 19.27*
浮点原子类型 P0020R6 10 19.22*
同步缓冲std::basic_osyncstream P0053R7 11 19.29 (16.10)*
<algorithm><utility>constexpr P0202R3 10 8 (部分)
12
19.26*

10.0.1* (部分)
13.0.0*

<complex> 的更多 constexpr P0415R1 9 7 (部分) 19.27*

10.0.0* (部分)

使 std::memory_order 为有作用域枚举 P0439R0 9 9 19.25*

11.0.3*

字符串前缀后缀检查: string(_view) ::starts_with/ends_with P0457R2 9 6 19.21*

10.0.0*

=operator<=> 的库支持 <compare> P0768R1 10 7 (部分)
12
19.20* (partial)
19.28 (16.9)*

13.0.0*

std::remove_cvref P0550R2 9 6 19.20*

10.0.0*

标准库中的 [[nodiscard]] P0600R1 9 7 (部分) 19.13* (部分)
19.22*

10.0.0* (部分)

数值算法使用 std::move P0616R0 9 12 19.23*

13.0.0*

转换指针为裸指针的工具 P0653R2 8 6 19.22*
原子 std::shared_ptrstd::weak_ptr P0718R2 12 19.27*
std::span P0122R7 10 7 19.26*

10.0.0*

日历时区 P0355R7 11 (部分) 7 (部分) 19.29 (16.10)*

10.0.0* (部分)

<version> P0754R2 9 7 19.22*

10.0.0*

比较无序容器 P0809R0 16.0*
常量表达式迭代器 (ConstexprIterator) 要求 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 P0019R8 10 19.28 (16.8)*
关联容器的 contains() 成员函数,如 std::map::contains() P0458R2 9 13 19.21*

13.1.6*

DR :逐片构造的受保证复制消除 P0475R1 9 19.29 (16.10)*
std::bit_cast() P0476R2 11 14 19.27*
整数的 2 的幂的运算

std::bit_ceil()std::bit_floor()std::bit_width()std::has_single_bit()

P0556R3
P1956R1
9 (P0556R3)
10 (P1956R1)
9 (P0556R3)
12 (P1956R1)
19.25* (P0556R3)*
19.27* (P1956R1)*
19.28 (16.8)*

11.0.3* (P0556R3)
13.0.0* (P1956R1)

改进擦除式算法的返回值 P0646R1 9 10 19.21*

12.0.0*

std::destroying_delete P0722R3 9 9 19.27*

11.0.3*

std::is_nothrow_convertible P0758R1 9 9 19.23*

11.0.3*

添加 std::shift_left/right<algorithm> P0769R2 10 12 19.21*

13.0.0*

std::swap()swap 相关函数的 constexpr P0879R0 10 13 19.26*

13.1.6*

std::type_identity P0887R1 9 8 19.21*

10.0.1*

概念库 P0898R3 10 13 19.23*

13.1.6*

std::arrayconstexpr 比较运算符 P1023R0 10 8 19.27*

10.0.1*

std::unwrap_ref_decaystd::unwrap_reference P0318R1 9 8 19.21*

10.0.1*

std::bind_front() 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 的库支持 P0482R6 9 8 (部分)*
19.22*

10.0.1* (部分)

实现使用分配器构造工具函数 P0591R4 9 19.29 (16.10)*
DR: std::variantstd::optional 应传播复制/移动平凡性 P0602R4 8.3 8 19.11*

10.0.1*

理智的 std::variant 转换构造函数 P0608R3 10 9 19.29 (16.10)*

11.0.3*

std::function 的移动构造函数应为 noexcept P0771R1 7.2 6 19.22*
一个范围提案 P0896R4 10 (部分)*
13 (部分) 19.29 (16.10)*
无序容器的异质查找 P0919R3 P1690R1 11 12 19.23* (P0919R3)
19.25* (P1690R1)

13.0.0*

<chrono> zero()min()max() 应为 noexcept P0972R0 9 8 19.14*

10.0.1*

std::pointer_traits 中的 constexpr P1006R1 9 8 19.26*

10.0.1*

std::assume_aligned() P1007R3 9*
11
19.28 (16.9)*
使用默认初始化的智能指针创建(如 make_unique_for_overwrite P1020R1
P1973R1
11 (unique_ptr)
12 (shared_ptr)
19.28 (16.9)*
杂项 constexpr 小部分 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*
一致容器擦除,如 std::erase(std::vector)std::erase_if(std::map) P1209R0 P1115R3 9 (P1209R0)
10 (P1115R3)
8 (P1209R0)
11 (P1115R3)
19.25* (P1209R0)
19.27* (P1115R3)

10.0.1* (P1209R0)
12.0.5* (P1115R3)

标准库头文件单元 P1502R1 11 19.29 (16.10)*
polymorphic_allocator<> 作为词汇类型 P0339R6 9 19.28 (16.9)*
std::execution::unseq P1001R2 9 19.28 (16.8)*
std::lerp()std::midpoint() P0811R3 9 9 19.23* (部分)
19.28 (16.8)*

11.0.3*

std::span 的实用性增强 P1024R3 10 9*
14
19.26*

11.0.3*

DR:使 create_directory() 自发 P1164R1 8.3 12 19.20*

13.0.0*

std::ssize()std::span 的无符号长度 P1227R2 10 9 19.25*

11.0.3*

有界无界数组特征 P1357R1 9 9 19.25*

11.0.3*

std::to_array() P0325R4 10 10 19.25*

12.0.0*

std::basic_stringbuf 缓冲的有效访问 P0408R7 11 19.29 (16.10)*
布局兼容性指针可互转换性特征 P0466R5 12 19.29 (16.10)**
位操作std::

rotl()rotr()countl_zero()countl_one()countr_zero()countr_one()popcount()

P0553R4 9 9 19.25**
19.28 (16.8)*

11.0.3*

数学常数 P0631R8 10 11 19.25*

12.0.5*

文本格式化 P0645R10 13 14* 19.29 (16.10)*
std::stop_tokenstd::jthread P0660R10 10 19.28 (16.9)*
constexpr std::allocator 及相关工具 P0784R7 10 12 19.29 (16.10)*

13.0.0*

constexpr std::string P0980R1 12 15 19.29 (16.10)*
19.30**
constexpr std::vector P1004R2 12 15 19.29 (16.10)*
19.30**
输入范围适配器 P1035R7 10 19.29 (16.10)*
constexpr std::invoke() 及相关工具 P1065R2 10 12 19.28 (16.8)*

13.0.0*

原子等待与提醒、 std::counting_semaphorestd::latchstd::barrier P1135R6 11 11 19.28 (16.8)*

13.1.6*

std::source_location P1208R6 11 15 (部分)* 19.29 (16.10)*
添加 <=> 到标准库 P1614R2 10 14 (部分)* 19.29 (16.10)*

13.1.6* (部分)

std::atomicstd::atomic_flagconstexpr 默认构造函数 P0883R2 10 13 19.26*

13.1.6*

数值算法constexpr P1645R1 10 12 19.26*

13.0.0*

安全整数比较 P0586R2 10 13 19.27*

13.1.6*

C++20 功能特性
 
提案
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
标准库
Embarcadero C++ Builder
标准库
Cray C++
标准库

旧标准

引用

参阅