C++ 编译器对C++11、14、17的支持情况

C++ 编译器支持情况表

下表为各个编译器对新的 C++ 功能特性的支持情况。这些功能特性包括 C++11 、 C++14 、 C++17 和之后接受的标准版本 (C++20/C++2a) ,还有几个技术规范的内容。

 

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)

 [折叠
允许 lambda 捕获 [=, this]P0409R2c++2a-lang86 5.1      
__VA_OPT__P0306R4c++2a-lang8 (部分)*6 5.1     

 

指派初始化器P0329R4c++2a-lang4.7 (部分)*
8
3.0 (部分)* 5.1     

 

泛型 lambda 的模板形参列表P0428R2c++2a-lang8  5.1     

 

位域的默认成员初始化器P0683R1c++2a-lang86 5.1     

 

类模板实参推导中的 initializer_list 构造函数P0702R1c++2a-lang8619.14*5.0     

 

const& 限定的成员指针P0704R1c++2a-lang86 5.1     

 

概念 (concept)P0734R0c++2a-lang6
(仅 TS)
         
不求值语境中的 lambdaP0315R4c++2a-lang9        

 

三路比较运算符P0515R3c++2a-lang 8 (部分)*19.20*      

 

简化隐式 lambda 捕获P0588R1c++2a-lang8        

 

基于范围的 for 的初始化语句P0614R1c++2a-lang98       

 

可默认构造且可赋值的无状态 lambdaP0624R2c++2a-lang98 5.1     

 

与预置的复制构造函数的 const 不匹配P0641R2c++2a-lang98 5.1     

 

特化上的访问检查P0692R1c++2a-lang8 (部分)*       

 

ADL 与不可见的函数模板P0846R0c++2a-lang9        

 

令 constexpr 函数的实例化较不贪婪P0859R0c++2a-lang5.2 (部分)*
9
         
属性 [[likely]] 与 [[unlikely]]P0479R5c++2a-lang9  5.1     

 

使 typename 更可选P0634R3c++2a-lang9        

 

Lambda 初始化捕获中的包展开P0780R2c++2a-lang9        

 

属性 [[no_unique_address]]P0840R2c++2a-lang9  5.1      
契约P0542R5c++2a-lang         

 

销毁的 operator deleteP0722R3c++2a-lang96       

 

非类型模板形参中的类类型P0732R2c++2a-lang9        

 

explicit(bool)P0892R2c++2a-lang9  5.1     

 

整合功能特性测试宏P0941R2c++2a-lang53.419.15*5.0     

 

禁止聚合体有用户声明的构造函数P1008R1c++2a-lang98 5.1     

 

constexpr 虚函数P1064R0c++2a-lang9  5.1      
char8_tP0482R6c++2a-lang97       

 

std::is_constant_evaluated()P0595R2c++2a-lang9        

 

constexpr try-catch 代码块P1002R1c++2a-lang98 5.1     

 

立即函数P1073R3c++2a-lang   5.1     

 

嵌套内联命名空间P1094R2c++2a-lang98 5.1     

 

constexpr 的 dynamic_cast 和多态 typeidP1327R1c++2a-lang   5.1     

 

在 constexpr 中改变联合体的活跃成员P1330R0c++2a-lang9  5.1      
结构化绑定的扩展P1091R3
P1381R1
c++2a-lang         

 

更强的 Unicode 要求P1041R4
P1139R2
c++2a-lang        

 

参数化的聚合体初始化P0960R3c++2a-lang         

 

模块 (module)P1103R3c++2a-lang 8 (部分)       

 

协程 (coroutine)P0912R5c++2a-lang 8 (部分)       

 

std::endianP0463R1c++2a87 N/A     

 

std::remove_cvrefP0550R2c++2a9619.20*N/A     

 

扩展 std::make_shared 以支持数组P0674R1c++2a   N/A      
原子性浮点算术P0020R6c++2a   N/A     

 

同步缓冲的 ostreamP0053R7c++2a   N/A     

 

<algorithm> 与 <utility> 的 constexprP0202R3c++2a 8 N/A     

 

<complex> 的更多 constexprP0415R1c++2a9  N/A     

 

字符串前缀与后缀检查P0457R2c++2a96 N/A     

 

operator<=> 的库支持 <compare>P0515R3c++2a 719.20*N/A     

 

转换指针为裸指针的工具P0653R2c++2a86 N/A     

 

原子性的 shared_ptr 与 weak_ptrP0718R2c++2a   N/A      
std::spanP0122R7c++2a 7 N/A     

 

日历时区P0355R7c++2a 7 N/A     

 

<version>P0754R2c++2a97 N/A      
std::atomic_refP0019R8c++2a   N/A     

 

整数的 2 的幂的运算P0556R3c++2a9  N/A     

 

std::bit_cast()P0476R2c++2a   N/A     

 

std::destroying_deleteP0722R3c++2a9  N/A     

 

概念库P0898R3c++2a   N/A      
一致的容器擦除P1209R0c++2a98 N/A      
C++2a 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

 

C++17 功能特性

C++17 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

 [折叠
直接列表初始化的新 auto 规则N3922c++17-lang53.819.0*4.10.117.0    17.7
无消息的 static_assertN3928c++17-lang62.519.10*4.1218.0    17.7
模板模板形参中的 typenameN4051c++17-lang53.519.0*4.10.117.0    17.7
移除三标符N4086c++17-lang53.516.0*5.0      
嵌套命名空间定义N4230c++17-lang63.619.0*4.1217.0    17.7
命名空间和枚举项的属性N4266c++17-lang4.9 (命名空间) / 6 (枚举项)3.619.0*4.1117.0    17.7
u8 字符字面量N4267c++17-lang63.619.0*4.1117.0    17.7
允许所有非类型模板实参的常量求值N4268c++17-lang63.619.12*5.0      
折叠表达式N4295c++17-lang63.619.12*4.1419.0    18.1
移除 register 关键字的已弃用用法P0001R1c++17-lang73.819.11*4.1318.0    17.7
移除已弃用的 operator++(bool)P0002R1c++17-lang73.819.11*4.1318.0    17.7
从 C++17 移除已弃用的异常规定P0003R5c++17-lang7419.10*4.1419.0     
令异常规定为类型系统的一部分P0012R1c++17-lang7419.12*4.1419.0     
有基类的类的聚合初始化P0017R1c++17-lang73.919.14*5.0      
*this 的 lambda 捕获P0018R3c++17-lang73.919.11*4.1419.0    18.1
使用属性命名空间而不重复P0028R4c++17-lang73.919.11*4.1318.0    17.7
过对齐数据的动态内存分配P0035R4c++17-lang7419.12*4.14      
一元折叠表达式和空形参包P0036R0c++17-lang63.919.12*4.14      
预处理器条件中的 __has_includeP0061R1c++17-lang519.11*4.1318.0    17.7
类模板实参推导P0091R3c++17-lang7519.14*5.0     19.1
具有 auto 类型的非类型模板形参P0127R2c++17-lang7419.14*5.0     19.1
有保证的复制消除P0135R1c++17-lang7419.13*5.0     19.1
继承构造函数的新规定 (DR1941 等)P0136R1c++17-lang73.919.14*       
替换含引用成员的类对象P0137R1c++17-lang7619.14*5.0      
枚举的直接列表初始化P0138R2c++17-lang73.919.11*4.1418.0     
更严格的表达式求值顺序P0145R3c++17-lang7419.14*5.0      
constexpr lambda 表达式P0170R1c++17-lang7519.11*4.1419.0    18.1
基于范围 for 的相异 begin 和 end 类型P0184R0c++17-lang63.919.10*4.1218.0    17.7
[[fallthrough]] 属性P0188R1c++17-lang73.919.10*4.1318.0    17.7
[[nodiscard]] 属性P0189R1c++17-lang73.919.11*4.1318.0    17.7
using 声明中的包展开P0195R2c++17-lang7419.14*5.0      
[[maybe_unused]] 属性P0212R1c++17-lang73.919.11*4.1318.0    17.7
结构化绑定P0217R3c++17-lang7419.11*4.1419.0    18.1
十六进制浮点字面量P0245R1c++17-lang3.019.11*4.1318.0    17.7
忽略未知属性P0283R2c++17-lang3.919.11*4.1318.0    17.7
constexpr if 语句P0292R2c++17-lang73.919.11*4.1419.0    18.1
if 和 switch 的初始化语句P0305R1c++17-lang73.919.11*4.1418.0    18.1
内联变量P0386R2c++17-lang73.9*19.12*4.1419.0    18.1
DR :模板模板实参的匹配排除了兼容的模板P0522R0c++17-lang7419.12*5.0      
std::uncaught_exceptionsN4259c++1763.719.0*N/AN/A    N/A
改进 std::pair 和 std::tupleN4387c++176419.0*N/AN/A    N/A
std::anyP0220R1c++177419.10*N/AN/A    N/A
std::variantP0088R3c++177419.10*N/AN/A    N/A
std::optionalP0220R1c++177419.10*N/AN/A    N/A
std::shared_mutex (无时限)N4508c++1763.719.0*N/AN/A    N/A
std::string_viewN3921c++177419.10*N/AN/A    N/A
并行 TS 的标准化P0024R2c++17  19.14*
(部分)
N/A18.0*    N/A
C++17 应当指代 C11 而不是 C99P0063R3c++179719.0*
(部分)*
N/AN/A    N/A
初等字符串转换P0067R5c++178 (无浮点) 19.14*(无浮点)
19.15*
N/AN/A    N/A
数学特殊函数P0226R1c++177 19.14*N/AN/A    N/A
接合 map 和 setP0083R3c++177819.12*N/AN/A    N/A
硬件干涉大小P0154R1c++17  19.11*N/AN/A    N/A
std::filesystemP0218R1c++178719.14*N/AN/A    N/A
std::byteP0298R3c++177519.11*N/AN/A    N/A
C++17 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

 

C++14 功能特性

C++14 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

 [折叠
按语境转换的遣词调整N3323c++14-lang4.93.418.0*4.916.013.1.2*5.15 8.616.1
二进制字面量N3472c++14-lang4.3/4.92.919.0*4.1011.013.1.2*5.14 8.62015
decltype(auto) ,普通函数的返回类型推导N3638c++14-lang4.8/4.93.3/3.419.0*4.915.013.1.2*5.15 8.616.1
带初始化/泛化的 lambda 捕获 (init-capture)N3648c++14-lang4.5/4.93.419.0*4.1015.0 5.15 8.616.1
泛型(多态) lambda 表达式N3649c++14-lang4.93.419.0*4.1016.013.1.2*5.15 8.616.1
变量模板N3651c++14-lang53.419.0*4.1117.013.1.2*5.15 8.617.4
扩展的 constexprN3652c++14-lang53.419.10*4.1117.013.1.2*5.15 8.617.4
成员初始化器与聚合体 (NSDMI)N3653c++14-lang53.319.10*4.916.0 5.14 8.616.1
澄清内存分配(分配的免除/融合)N3664c++14-langN/A3.4N/AN/A  N/A 8.617.4
[[deprecated]] 属性N3760c++14-lang4.93.419.0*4.915.0*
16.0
13.1.2*5.14 8.616.1
具大小解分配N3778c++14-lang53.419.0*4.10.117.0 5.14 8.616.1
单引号作为数位分隔符N3781c++14-lang4.93.419.0*4.1016.013.1.2*5.14 8.62015
std::result_of 与 SFINAEN3462c++14519.0*N/AN/A 5.158.6N/A
<complex> 的 constexprN3302c++1453.419.0*N/AN/A 5.15 8.6N/A
<chrono> 的 constexprN3469c++1453.419.0*N/AN/A 5.15 8.6N/A
<array> 的 constexprN3470c++1453.419.0*N/AN/A 5.15 8.6N/A
<initializer_list> 、 <utility> 和 <tuple> 的 constexprN3471c++1453.419.0*N/AN/A 5.15 8.6N/A
改进的 std::integral_constantN3545c++1453.419.0*N/AN/A 5.15 8.6N/A
<chrono> 和 <string> 的用户定义字面量N3642c++1453.419.0*N/AN/A 5.15 8.6N/A
空向前迭代器N3644c++145*3.419.0*N/AN/A 5.15 8.6N/A
std::quotedN3654c++1453.419.0*N/AN/A 5.15 8.6N/A
异质关联查找N3657c++1453.419.0*N/AN/A 5.15 8.6N/A
std::integer_sequenceN3658c++1453.419.0*N/AN/A 5.15 8.6N/A
std::shared_timed_mutexN3659c++1453.419.0*N/AN/A 5.15 8.6N/A
std::exchangeN3668c++1453.419.0*N/AN/A 5.15 8.6N/A
修正无 const 的 constexpr成员函数N3669c++1453.419.0*N/AN/A 5.15 8.6N/A
std::get<T>()N3670c++1453.419.0*N/AN/A 5.15 8.6N/A
双范围的 std::equal 、 std::is_permutation 、 std::mismatchN3671c++1453.419.0*N/AN/A 5.15 8.6N/A
C++14 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

 

C++11 功能特性

C++11 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

HP aCC

Digital Mars C++

 [折叠
alignasN2341c++114.83.019.0*4.815.013.1.2*5.138.62015  
alignofN2341c++114.52.919.0*4.815.013.1.2*5.138.42015  
原子操作N2427c++114.43.117.0*Yes13.013.1.2*5.148.42015  
autoN1984(v1.0)c++114.4(v1.0)16.0*3.911.0(v0.9)
12.0(v1.0)
11.1(v1.0)5.138.42015A.06.25 
C99 预处理器N1653c++114.319.0*
(部分:变参宏有漏洞)
4.111.110.15.98.42015A.06.25
constexprN2235c++114.63.119.0*
(部分)
4.613.0*
14.0
12.1*
13.1
5.138.42015A.06.28 
decltypev1.0: N2343

v1.1: N3276

c++114.3(v1.0)
4.8.1(v1.1)
2.916.0*4.2(v1.0)
4.8(v1.1)
11.0(v1.0)
12.0(v1.1)
11.1(v1.0)5.138.42015A.06.258.52(v1.0)
预置和弃置的函数N2346c++114.43.018.0*4.112.013.15.138.42015A.06.25 
委托构造函数N1986c++114.73.018.0*4.714.011.15.138.42015A.06.28 
显式转换运算符N2437c++114.53.018.0*4.413.012.15.138.42015A.06.27 
扩展的 friend 声明N1791c++114.72.916.0*
(部分)
18.0*
4.111.1*
12.0
11.15.138.42015A.06.25 
extern templateN1987c++113.312.0*3.99.011.15.138.42015A.06.25 
前置 enum 声明N2764c++114.63.117.0*4.511.1*
14.0
12.15.138.42015  
继承的构造函数N2540c++114.83.319.0*4.815.013.1.1*5.138.42015  
初始化器列表N2672c++114.43.118.0*4.513.0*
14.0
13.1.2*5.138.42015A.06.28 
Lambda 表达式v0.9: N2550

v1.0: N2658
v1.1: N2927

c++114.5(v1.1)3.116.0*(v1.0)
17.0*(v1.1)
4.1(v1.1)12.0(v1.1)13.1.2*5.138.42015A.06.25 
局部及无名类型作为模板形参N2657c++114.52.916.0*4.212.013.1.2*5.138.42015A.06.27 
long longN1811c++1114.0*8.42015
内联命名空间N2535c++114.42.919.0*4.514.011.15.138.42015A.06.28 
新字符类型N2249c++114.42.919.0*4.412.1*
14.0
13.1.1*5.138.42015A.06.278.52
尾随的函数返回类型N2541c++114.42.916.0*4.112.012.15.138.42015A.06.27 
nullptrN2431c++114.62.916.0*4.212.113.15.138.42015A.06.278.52
Unicode 字符串字面量N2442c++114.43.019.0*4.711.0*10.1*
13.1.1*
5.78.42015A.06.288.52
原始字符串字面量N2442c++114.518.0*4.714.013.1.1*5.138.42015A.06.288.52
用户定义字面量N2765c++114.73.119.0*4.815.013.1.2*5.148.42015  
右角括号N1757c++114.314.0*4.111.012.15.138.42015  
右值引用v1.0: N2118

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

c++114.3(v1.0)
4.5(v2.1)
4.6(v3.0)
16.0*(v2.0)
17.0*(v2.1)
19.0*(v3.0)
4.5(v3.0)11.1(v1.0)
12.0(v2.0)
14.0(v3.0)
12.1(v2.1)5.138.42015A.06.25 
static_assertN1720c++114.32.916.0*4.111.011.15.138.42015A.06.258.52
强类型 enumN2347c++114.42.917.0*4.013.012.15.138.42015A.06.25 
模板别名N2258c++114.73.018.0*4.212.113.1.1*5.138.42015A.06.27 
线程局域存储N2659c++114.4*
4.8
3.3*
3.3
16.0*
(部分)
19.0*
4.811.1*
15.0*
10.1*
13.1.2*
5.9*8.42015 8.52*
无限制的联合体N2544c++114.63.019.0*4.614.0*13.1.2*5.138.42015A.06.28 
类型特征N1836c++114.33.014.0*4.010.013.1.35.138.420156.16 
变参模板v0.9: N2242

v1.0: N2555

c++114.3(v0.9)
4.4(v1.0)
2.9(v1.0)18.0*4.3(v0.9)
4.3(v1.0)
12.1(v1.0)11.1(v0.9)5.138.42015A.06.27 
范围 for 循环N2930c++114.63.017.0*4.513.013.1.2*5.138.42015A.06.28 
override 与 finalv0.8: N2928

v0.9: N3206
v1.0: N3272

c++114.72.914.0* (部分)
17.0*
4.8(v1.0)12.0(v0.8)
14.0(v1.0)
13.1.1*5.138.42015  
属性N2761c++114.83.319.0*4.212.113.1.1*5.138.42015A.06.27 
引用限定符N2439c++114.8.12.919.0*4.714.013.1.2*5.138.42015A.06.28 
非静态数据成员初始化器N2756c++114.73.018.0*4.614.013.1.2*5.138.42015A.06.28 
有并发的动态初始化及析构(魔法静态变量N2660c++114.32.919.0*11.1*13.1.2*5.138.42015A.06.25 
noexceptN3050c++114.63.019.0*4.514.013.1.1*5.138.42015A.06.28 
垃圾收集与基于可达性的泄漏检测N2670c++11            
垃圾收集与基于可达性的泄漏检测(库支持N2670c++116
(无操作)
3.4
(无操作)
19.0*
(无操作)
N/AN/A    N/A  
金额、时间及十六进制浮点 I/O 操纵符时间: N2071

金额: N2072

c++1153.819.0*N/AN/A 5.15  N/A  
C++11 功能特性
 
提案
 
版本
 

GCC

Clang

MSVC

EDG eccp

Intel C++

IBM XLC++

Sun/Oracle C++

Embarcadero C++ Builder

Cray

Portland Group (PGI)

HP aCC

Digital Mars C++

 

引用

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

  • GCC (更新于 2019-01 )
  • Clang++ (更新于 2017-09 )
  • Microsoft Visual Studio (更新于 2019-01 )
  • Intel C++ (更新于 2017-11 )
  • 并行 STL ( C++17 带执行策略支持的标准库算法的实现)
  • EDG (更新于 2019-03 )
  • Oracle C++ (2017-07 更新)
  • 5.15 中添加了完整 C++14 支持。
  • Oracle 提供对标准库的四种不同实现:
  • 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
  • libstdc++ (GCC runtime library, 根据不同发布版本对 C++11 和 C++14 有所支持)
  • IBM XL C++ (更新于 2018-05 )
  • IBM XL C++ for Linux
  • 核心语言支持状况: 13.1.6 起 C++11 完整, 16.1.0 中部分 C++14
  • IBM 在 Linux 上不提供 C++ 标准库实现(使用 GNU libstdc++ )
  • IBM XL C++ for AIX
  • HP aCC
  • Digital Mars C++
  • Embarcadero C++
  • 语言功能特性遵从状况 (RAD Studio 10.1 Berlin) ,包括老式编译器与 Clang 增强编译器(基于 Clang 3.3 )所支持的 C++11 功能特性
  • 语言功能特性遵从状况 (RAD Studio 10.3 Rio) ,包括老式编译器所支持的 C++11 功能特性,和 Clang 增强编译器(基于 Clang 5.0 )所支持的 C++11、 C++14 及 C++17 功能特性
  • Cray (更新于 2018-01 )
  • Portland Group (PGI) (更新于 2019-01 )
  • Texas Instruments (更新于 2018-05 )
  • Analog Devices (更新于 2018-05 )

转载:https://zh.cppreference.com/w/cpp/compiler_support

  • 12
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值