C++ 编译器支持

C++ 编译器支持

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*

测试 函数的成功或失败 (FTM)*

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

: 读-复制-更新 (FTM)*

P2545R4

: 危险指针 (FTM)*

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*

的更多 constexpr 支持 (FTM)* (FTM)*

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 以及以下头文件中的设施:, , , (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*

P2338R4

N/A

更多独立式设施 (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*

P2198R7

N/A

饱和算术 (FTM)*

P0543R3

14

18

16.0.0*

: 调试支持 (FTM)*

P2546R5P2810R4

: 基于 BLAS 的自由函数线性代数接口 (FTM)*

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 (FTM)*

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

: 数据并行类型 (FTM)*

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

: 一种基于桶的容器,重用已擦除元素的内存位置 (FTM)*

P0447R28

: 契约违反处理支持 (FTM)*

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*

(FTM)*

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*

: 具有 std::span-based 缓冲区的字符串流 (FTM)*

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

(FTM)*

P0323R12P2549R1

12

16

19.33*

15.0.0*

的 constexpr (FTM)*

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*

(FTM)*

P0429R9

15

20

(FTM)*

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*

格式化输出库 (FTM)*

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)*

的 constexpr (FTM)*

P0202R3

10

8 (部分)12

19.26*

10.0.1* (部分)13.0.0*

的更多 constexpr 支持 (FTM)*

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*

zero(), min(), 和 max() 应该为 noexcept

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 文档 关于 编译器支持

相关推荐

张一山身体怎么了得什么病严重吗 为什么不再参加真人秀
短信已送达是什么意思
365bet大陆网站

短信已送达是什么意思

📅 07-26 👁️ 8371
GK是正版嗎?GK的意思是什麼?模型迷必須了解的2種GK圈!
365平台被黑不给出款怎么办

GK是正版嗎?GK的意思是什麼?模型迷必須了解的2種GK圈!

📅 10-04 👁️ 1332