C++ 编译器支持情况表

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

目录


下表为各个编译器对新的 C++ 功能特性的支持情况。这些功能特性包括 C++11C++14C++17 、和其后被采纳的标准的版本,还有几个技术规范的内容。

[编辑] C++2a 功能特性

注意此列表可能更改,由于草案 C++2a 标准的进化。

C++2a 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
概念 P0734R0 c++2a-lang 6.1
(仅 TS)


位域的默认成员初始化器 P0683R1 c++2a-lang 6


const& 限定的指向成员指针 P0704R1 c++2a-lang 6


允许 lambda 捕获 [=, this] P0409R2 c++2a-lang 6


__VA_OPT__ P0306R4 c++2a-lang SVN SVN


指代初始化器 P0329R4 c++2a-lang 4.7 (部分)* 3.0 (部分)*


泛型 lambda 的模板形参列表 P0428R2 c++2a-lang


类模板实参推导中的 initializer_list 构造函数 P0702R1 c++2a-lang 6


基于范围 for 的初始化语句 P0614R1 c++2a-lang


三路比较运算符 <=> P0515R0 c++2a-lang


三路比较运算符库支持 <compare> P0515R3 c++2a


std::endian P0463R1 c++2a


扩展 std::make_shared 以支持数组 P0674R1 c++2a


浮点原子类型 P0020R6 c++2a


同步的有缓冲输出流 P0053R7 c++2a


<algorithm><utility>constexpr P0202R3 c++2a


<complex> 的更多 constexpr P0415R1 c++2a


std::remove_cvref P0550R2 c++2a 6


字符串前缀和后缀检查 P0457R2 c++2a 6


转换指针到裸指针的工具 P0653R2 c++2a 6


C++ 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++


[编辑] C++ 2017 功能特性

C++ 2017 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
直接列表初始化的新 auto 规则 N3922 c++17-lang 5.0 3.8 19.0* 4.10.1 17.0 17.7
无消息的 static_assert N3928 c++17-lang 6 2.5 19.1* 4.12 18.0 17.7
模板模板形参中的 typename N4051 c++17-lang 5.0 3.5 19.0* 4.10.1 17.0 17.7
移除三标符 N4086 c++17-lang 5.1 3.5 16.0*
嵌套命名空间定义 N4230 c++17-lang 6 3.6 19.0* 4.12 17.0 17.7
命名空间和枚举项的属性 N4266 c++17-lang 4.9 (命名空间) / 6 (枚举项) 3.6 19.0* 4.11 17.0 17.7
u8 字符字面量 N4267 c++17-lang 6 3.6 19.0* 4.11 17.0 17.7
允许所有非类型模板实参的常量求值 N4268 c++17-lang 6 3.6
折叠表达式 N4295 c++17-lang 6 3.6 19.1* 4.14
移除 register 关键字的已弃用使用 P0001R1 c++17-lang 7 3.8 19.1* 4.13 18.0 17.7
移除弃用的 operator++(bool) P0002R1 c++17-lang 7 3.8 19.1* 4.13 18.0 17.7
从 C++17 移除弃用的异常规定 P0003R5 c++17-lang 7 4 19.1* 4.14
令异常规定为类型系统的一部分 P0012R1 c++17-lang 7 4 19.1* 4.14
有基类的类的聚合初始化 P0017R1 c++17-lang 7 3.9
*this 的 lambda 捕获 P0018R3 c++17-lang 7 3.9 19.1* 4.14
使用属性命名空间而不重复 P0028R4 c++17-lang 7 3.9 19.1* 4.13 18.0 17.7
过对齐数据的动态内存分配 P0035R4 c++17-lang 7 4 19.5 4.14
一元折叠表达式和空形参包 P0036R0 c++17-lang 6 3.9 19.1* 4.14
预处理器条件中的 __has_include P0061R1 c++17-lang 5.0 19.1* 4.13 18.0 17.7
类模板的模板实参推导 P0091R3 c++17-lang 7 5
拥有 auto 类型的非类型模板形参 P0127R2 c++17-lang 7 4
受保证的复制消除 P0135R1 c++17-lang 7 4 19.1* 4.15
继承构造函数的新规定 (DR1941 等) P0136R1 c++17-lang 7 3.9
枚举的直接列表初始化 P0138R2 c++17-lang 7 3.9 19.1* 4.14 18.0
更严格的表达式求值顺序 P0145R3 c++17-lang 7 4
constexpr lambda 表达式 P0170R1 c++17-lang 7 5 19.1* 4.14
基于范围 for 的相异 begin 和 end 类型 P0184R0 c++17-lang 6 3.9 19.1* 4.12 18.0 17.7
[[fallthrough]] 属性 P0188R1 c++17-lang 7 3.9 19.1* 4.13 18.0 17.7
[[nodiscard]] 属性 P0189R1 c++17-lang 7 3.9 19.1* 4.13 18.0 17.7
using 声明中的包展开 P0195R2 c++17-lang 7 4
[[maybe_unused]] 属性 P0212R1 c++17-lang 7 3.9 19.1* 4.13 18.0 17.7
结构化绑定 P0217R3 c++17-lang 7 4 19.1* 4.14 18.0
十六进制浮点字面量 P0245R1 c++17-lang 3.0 19.1* 4.13 18.0 17.7
忽略未知属性 P0283R2 c++17-lang 3.9 19.1* 4.13 18.0 17.7
constexpr if 语句 P0292R2 c++17-lang 7 3.9 19.1* 4.14
if 和 switch 的 init-statements P0305R1 c++17-lang 7 3.9 19.1* 4.14 18.0
inline 变量 P0386R2 c++17-lang 7 3.9* 19.1* 4.14
DR :模板模板实参的匹配排除兼容的模板 P0522R0 c++17-lang 7 4
并行 TS 的标准化 P0024R2 c++17 18.0*
std::uncaught_exceptions() N4259 c++17 6 3.7 19.0*
接合 map 和 set P0083R3 c++17 7 19.5 N/A
改进 std::pairstd::tuple N4387 c++17 6.1 4 19.0* N/A N/A
std::shared_mutex (无时限) N4508 c++17 6 3.7 19.0* N/A N/A
初等字符串转换 P0067R5 c++17 SVN (部分) N/A
std::string_view N3921 c++17 7 4.0 19.1* N/A
C++ 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++

[编辑] C++ 2014 功能特性

C++ 2014 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
语境转换的遣词调整 N3323 c++14-lang 4.9 3.4 18.0* 4.9 16.0 13.1.2* 5.15 16.1
二进制字面量 N3472 c++14-lang 4.3/4.9 2.9 19.0* 4.10 11.0 13.1.2* 5.14 2015
decltype(auto) ,正常函数的返回类型推导 N3638 c++14-lang 4.8/4.9 3.3/3.4 19.0* 4.9 15.0 13.1.2* 5.15 16.1
初始化/泛化 lambda 捕获 (init-capture) N3648 c++14-lang 4.5/4.9 3.4 19.0* 4.10 15.0 5.15 16.1
泛型(多态) lambda 表达式 N3649 c++14-lang 4.9 3.4 19.0* 4.10 16.0 13.1.2* 5.15 16.1
变量模板 N3651 c++14-lang 5.0 3.4 19.0* 4.11 17.0 13.1.2* 5.15 17.4
扩展的 constexpr N3652 c++14-lang 5 3.4 19.1* 4.11 17.0 13.1.2* 5.15 17.4
成员初始化器与聚合体 (NSDMI) N3653 c++14-lang 5 3.3 19.1* 4.9 16.0 5.14 16.1
清晰化内存分配(避免/融合分配) N3664 c++14-lang N/A 3.4 N/A N/A N/A 17.4
deprecated 属性 N3760 c++14-lang 4.9 3.4 19.0* 4.9 15.0*
16.0
13.1.2* 5.14 16.1
具大小解分配 N3778 c++14-lang 5 3.4 19.0* 4.10.1 17.0 5.14 16.1
单引号作为数位分隔符 N3781 c++14-lang 4.9 3.4 19.0* 4.10 16.0 13.1.2* 5.14 2015
std::result_of 及 SFINAE N3462 c++14 5.0 19.0* N/A N/A 5.15 N/A
<complex>constexpr N3302 c++14 5.0 3.4 19.0* N/A N/A 5.15
<chrono>constexpr N3469 c++14 5.0 3.4 19.0* N/A N/A 5.15
<array>constexpr N3470 c++14 5.0 3.4 19.0* N/A N/A 5.15
<initializer_list><utility><tuple>constexpr N3471 c++14 5.0 3.4 19.0* N/A N/A 5.15
改进的 std::integral_constant N3545 c++14 5.0 3.4 19.0* N/A N/A 5.15
<chrono><string> 的用户定义字面量 N3642 c++14 5.0 3.4 19.0* N/A N/A 5.15
空向前迭代器 N3644 c++14 5.0* 3.4 19.0* N/A N/A 5.15
std::quoted N3654 c++14 5.0 3.4 19.0* N/A N/A 5.15
异相关联查找 N3657 c++14 5.0 3.4 19.0* N/A N/A 5.15
std::integer_sequence N3658 c++14 5.0 3.4 19.0* N/A N/A 5.15
std::shared_timed_mutex N3659 c++14 5.0 3.4 19.0* N/A N/A 5.15
std::exchange N3668 c++14 5.0 3.4 19.0* N/A N/A 5.15
修正无 constconstexpr 成员函数 N3669 c++14 5.0 3.4 19.0* N/A N/A 5.15
std::get<T>() N3670 c++14 5.0 3.4 19.0* N/A N/A 5.15
双范围的 std::equalstd::is_permutationstd::mismatch N3671 c++14 5.0 3.4 19.0* N/A N/A 5.15
C++ 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++


[编辑] C++ 2011 功能特性

C++ 2011 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
alignas N2341 c++11 4.8 3.0 19.0* 4.8 15.0 13.1.2* 5.13 2015
alignof N2341 c++11 4.5 2.9 19.0* 4.8 15.0 13.1.2* 5.13 8.4 2015
原子操作 N2427 c++11 4.4 3.1 17.0* Yes 13.0 13.1.2* 5.14 8.4 2015
auto N1984(v1.0) c++11 4.4(v1.0) 16.0 (v0.9)* 4.1(v0.9) 11.0(v0.9)
12.0(v1.0)
11.1(v1.0) 5.13 8.4 2015 A.06.25
C99 预处理器 N1653 4.3 19.0* 4.1 11.1 10.1 5.9 8.4 2015 A.06.25
constexpr N2235 c++11 4.6 3.1 19.0* 4.6 13.0*
14.0
12.1*
13.1
5.13 8.4 2015 A.06.28
decltype v1.0: N2343

v1.1: N3276

c++11 4.3(v1.0)
4.8.1(v1.1)
2.9 16.0 (v1.1)* 4.1(v1.0) 11.0(v1.0)
12.0(v1.1)
11.1(v1.0) 5.13 8.4 2015 A.06.25 8.52(v1.0)
默认化和被删除函数 N2346 c++11 4.4 3.0 18.0* 4.1 12.0 13.1 5.13 8.4 2015 A.06.25
委托构造函数 N1986 c++11 4.7 3.0 18.0* 4.7 14.0 11.1 5.13 8.4 2015 A.06.28
显式转换运算符 N2437 c++11 4.5 3.0 18.0* 4.4 13.0 12.1 5.13 8.4 2015 A.06.27
扩展的 friend 声明 N1791 c++11 4.7 2.9 16.0* 4.1 11.1*
12.0
11.1 5.13 8.4 2015 A.06.25
extern template N1987 c++11 3.3 12.0* 3.9 9.0 11.1 5.13 8.4 2015 A.06.25
前置 enum 声明 N2764 c++11 4.6 3.1 17.0* 4.5 11.1*
14.0
12.1 5.13 8.4 2015
继承的构造函数 N2540 c++11 4.8 3.3 19.0* 4.8 15.0 13.1.1* 5.13 8.4 2015
初始化器列表 N2672 c++11 4.4 3.1 18.0* 4.5 13.0*
14.0
13.1.2* 5.13 8.4 2015 A.06.28
Lambda 表达式 v0.9: N2550

v1.0: N2658
v1.1: N2927

c++11 4.5(v1.1) 3.1 16.0* 4.1(v1.1) 12.0(v1.1) 13.1.2* 5.13 8.4 2015 A.06.25
局部及无名类型作为模板形参 N2657 4.5 2.9 16.0* 4.2 12.0 13.1.2* 5.13 8.4 2015 A.06.27
long long N1811 c++11 8.4 2015
内联命名空间 N2535 c++11 4.4 2.9 19.0* 4.5 14.0 11.1 5.13 8.4 2015 A.06.28
新字符类型 N2249 c++11 4.4 2.9 19.0* 4.4 12.1*
14.0
13.1.1* 5.13 8.4 2015 A.06.27 8.52
尾随的函数返回类型 N2541 c++11 4.4 2.9 16.0* 4.1 12.0 12.1 5.13 8.4 2015 A.06.27
nullptr N2431 c++11 4.6 2.9 16.0* 4.2 12.1 13.1 5.13 8.4 2015 A.06.27 8.52
Unicode 字符串字面量 N2442 c++11 4.4 3.0 19.0* 4.7 11.0* 10.1*
13.1.1*
5.7 8.4 2015 A.06.28 8.52
原始字符串字面量 N2442 c++11 4.5 18.0* 4.7 14.0 13.1.1* 5.13 8.4 2015 A.06.28 8.52
用户定义字面量 N2765 c++11 4.7 3.1 19.0* 4.8 15.0 13.1.2* 5.14 8.4 2015
右角括号 N1757 c++11 4.3 14.0* 4.1 11.0 12.1 5.13 8.4 2015
右值引用 v1.0: N2118

v2.0: N2844
v2.1: N2844+
v3.0: N3053

c++11 4.3(v1.0)
4.5(v2.1)
4.6(v3.0)
16.0* 4.5(v3.0) 11.1(v1.0)
12.0(v2.0)
14.0(v3.0)
12.1(v2.1) 5.13 8.4 2015 A.06.25
static_assert N1720 c++11 4.3 2.9 16.0* 4.1 11.0 11.1 5.13 8.4 2015 A.06.25 8.52
强类型 enum N2347 c++11 4.4 2.9 17.0* 4.0 13.0 12.1 5.13 8.4 2015 A.06.25
模板别名 N2258 c++11 4.7 3.0 18.0* 4.2 12.1 13.1.1* 5.13 8.4 2015 A.06.27
线程局域存储 N2659 c++11 4.4*
4.8
3.3*
3.3
19.0* 4.8 11.1*
15.0*
10.1*
13.1.2*
5.9* 8.4 2015 8.52*
无限制的联合体 N2544 c++11 4.6 3.0 19.0* 4.6 14.0* 13.1.2* 5.13 8.4 2015 A.06.28
类型特性 N1836 c++11 4.3 3.0 14.0* 4.0 10.0 13.1.3 5.13 8.4 2015 6.16
变长模板 v0.9: N2242

v1.0: N2555

c++11 4.3(v0.9)
4.4(v1.0)
2.9(v1.0) 18.0* 4.1(v0.9) 12.1(v1.0) 11.1(v0.9) 5.13 8.4 2015 A.06.27
范围 for 循环 N2930 c++11 4.6 3.0 17.0* 4.5 13.0 13.1.2* 5.13 8.4 2015 A.06.28
overridefinal v0.8: N2928

v0.9: N3206
v1.0: N3272

c++11 4.7 2.9 17.0* 4.8(v1.0) 12.0(v0.8)
14.0(v1.0)
13.1.1* 5.13 8.4 2015
属性 N2761 c++11 4.8 3.3 19.0* 4.2 12.1 13.1.1* 5.13 8.4 2015 A.06.27
引用限定符 N2439 c++11 4.8.1 2.9 19.0* 4.7 14.0 13.1.2* 5.13 8.4 2015 A.06.28
非静态数据成员初始化器 N2756 c++11 4.7 3.0 18.0* 4.6 14.0 13.1.2* 5.13 8.4 2015 A.06.28
有并发的动态初始化及析构(魔法静态变量 N2660 c++11 4.3 2.9 19.0* 11.1* 13.1.2* 5.13 8.4 2015 A.06.25
noexcept N3050 c++11 4.6 3.0 19.0* 4.5 14.0 13.1.1* 5.13 8.4 2015 A.06.28
动态指针安全性( GC 接口) N2670 c++11 N/A
金额、时间及十六进制浮点 I/O 操纵符 时间: N2071

金额: N2072

c++11 5.1 3.8 19.0* N/A 5.15
C++ 功能特性
 
提案
 
版本
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++

[编辑] C++ 未来功能特性

* - 将鼠标移至版本号上查看注解


[编辑] 引用

各编译器厂商的兼容性检查单文档(这些通常比以上表格更能反映最新的情况)

  • GCC (更新于 2017-09 )
  • Clang++ (更新于 2017-09 )
  • Microsoft Visual Studio (更新于 2017-08 )
  • Intel C++ (更新于 2017-11 )
  • EDG (2016-01 更新)
  • Oracle C++ (2016-01 更新)
  • libCstd (RogueWave Standard Library version 2), 早于C++98
  • stlport4 (STLport Standard Library version 4.5.3), 早于C++03
  • stdcxx4 (Apache Standard Library version 4), 早于C++11
  • IBM XL C++ (2015-12 更新)
  • HP aCC
  • Digital Mars C++
  • Embarcadero C++
  • Cray (2015-12 更新)
  • [2] 声称 8.4 版支持除 alignas 外的全部 C++11
  • Portland Group (PGI) (2016-07 更新)
  • 2016 版发布注记 声称支持 C++14,但不支持“通用化的 constexpr 以及 constexpr 成员函数和隐含的 const, 变量模板,厘清内存分配(分配的合并)”