C++ 编译器支持情况表

来自cppreference.com
< cpp
 
 
C++ 语言
表达式
替代表示
字面量
布尔 - 整数 - 浮点
字符 - 字符串 - nullptr (C++11)
用户定义 (C++11)
工具设施
特性 (C++11)
类型
typedef 声明
类型别名声明 (C++11)
强制转换
隐式类型转换 - 显式类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
特殊成员函数
模板
杂项
 

目录


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


[编辑] 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 14.0 4.10.1 17.0
不带有消息的 static_assert N3928 c++17-lang 6 2.5 "15" Preview 5 4.12
模板模板形参中的 typename N4051 c++17-lang 5.0 3.5 14.0 4.10.1 17.0
移除三连符 N4086 c++17-lang 5.1 3.5
定义嵌套的命名空间 N4230 c++17-lang 6 3.6 14.3 4.12 17.0
命名空间和枚举符的特性 N4266 c++17-lang 4.9 (命名空间) / 6 (枚举符) 3.6 14.0 4.11
u8 字符字面量 N4267 c++17-lang 6 3.6 14.0 4.11 17.0
允许对所有非类型模板实参进行常量求值 N4268 c++17-lang 6 3.6
折叠表达式 N4295 c++17-lang 6 3.6
移除过时的 register 关键字用法 P0001R1 c++17-lang 7 3.8
移除过时的 operator++(bool) P0002R1 c++17-lang 7 3.8
C++17 移除过时的异常说明 P0003R5 c++17-lang 7 4.0
使异常说明进入类型系统 P0012R1 c++17-lang 7 4.0
为有基类的类进行聚合初始化 P0017R1 c++17-lang 7 3.9
Lambda 捕获 *this P0018R3 c++17-lang 7 3.9
不必重复使用特性命名空间 P0028R4 c++17-lang 7 3.9
过对齐数据的动态内存分配 P0035R4 c++17-lang 7 4.0
一元折叠表达式与空形参包 P0036R0 c++17-lang 6 3.9
预处理器条件编译支持 __has_include P0061R1 c++17-lang 5.0 Yes
类模板的模板实参推导 P0091R3 c++17-lang 7
具有 auto 类型的非类型模板形参 P0127R2 c++17-lang 7 4.0
确保进行复制消除 P0135R1 c++17-lang 7 4.0
对继承构造函数的新规范(DR1941 等) P0136R1 c++17-lang 7 3.9
枚举的直接列表初始化 P0138R2 c++17-lang 7 3.9
更严格的表达式求值顺序 P0145R3 c++17-lang 7 4.0
constexpr lambda 表达式 P0170R1 c++17-lang 7
在基于范围的 for 中支持不同的 begin 和 end 类型 P0184R0 c++17-lang 6 3.9 "15" Preview 5 4.12
[[fallthrough]] 特性 P0188R1 c++17-lang 7 3.9 "15" Preview 4
[[nodiscard]] 特性 P0189R1 c++17-lang 7 3.9
using-声明中的包展开式 P0195R2 c++17-lang 7 4.0
[[maybe_unused]] 特性 P0212R1 c++17-lang 7 3.9
结构化绑定 P0217R3 c++17-lang 7 4.0
十六进制浮点字面量 P0245R1 c++17-lang 3.0
忽略未知的特性 P0283R2 c++17-lang 3.9
constexpr if 语句 P0292R2 c++17-lang 7 3.9
if 和 switch 的初始化语句 P0305R1 c++17-lang 7 3.9
内联变量 P0386R2 c++17-lang 7 3.9
DR: 模板模板实参的匹配中不允许兼容的模板 P0522R0 c++17-lang 7 4.0
std::uncaught_exceptions() N4259 c++17 6 3.7 14.0
映射和集合容器的拼接 P0083R3 c++17 7
改进 std::pairstd::tuple N4387 c++17 4.0 14.2 N/A N/A
std::shared_mutex (无定时) N4508 c++17 6.0 3.7 14.2* N/A 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 12.0 4.9 16.0 13.1.2*
二进制字面量 N3472 c++14-lang 4.3/4.9 2.9 14.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 14.0 4.9 15.0 13.1.2*
有初始化的/一般化的 lambda 捕获 (init-capture) N3648 c++14-lang 4.5/4.9 3.4 14.0 4.10 15.0  ?
泛型(多态)lambda 表达式 N3649 c++14-lang 4.9 3.4 14.0 4.10 16.0 13.1.2*  ?
变量模板 N3651 c++14-lang 5.0 3.4 14.2 4.11 17.0 13.1.2*
扩展的 constexpr N3652 c++14-lang 5 3.4 "15" Preview 5 4.11 17.0 13.1.2*
成员初始化式与聚合(NSDMI) N3653 c++14-lang 5 3.3 "15" Preview 4 4.9 16.0 5.14
厘清内存分配(分配的避免/合并) N3664 c++14-lang N/A 3.4 N/A N/A
Deprecated 特性 N3760 c++14-lang 4.9 3.4 14.0 4.9 15.0*
16.0
13.1.2* 5.14
带有长度的内存回收 N3778 c++14-lang 5 3.4 14.0 4.10.1 17.0 5.14
使用单引号作为数字分隔符 N3781 c++14-lang 4.9 3.4 14.0 4.10 16.0 13.1.2* 5.14 2015
std::result_of 与 SFINAE N3462 c++14 5.0 14.2 N/A N/A
<complex> 中的 constexpr N3302 c++14 5.0 3.4 14.0 N/A N/A
<chrono> 中的 constexpr N3469 c++14 5.0 3.4 14.0 N/A N/A
<array> 中的 constexpr N3470 c++14 5.0 3.4 14.0 N/A N/A
<initializer_list><utility><tuple> 中的 constexpr N3471 c++14 5.0 3.4 14.0 N/A N/A
改进的 std::integral_constant N3545 c++14 5.0 3.4 14.0 N/A N/A
<chrono><string> 中的用户定义字面量 N3642 c++14 5.0 3.4 14.0 N/A N/A
空前向迭代器 N3644 c++14 5.0* 3.4 14.0 N/A N/A
std::quoted N3654 c++14 5.0 3.4 14.0 N/A N/A
关联容器的异质查找 N3657 c++14 5.0 3.4 14.0 N/A N/A
std::integer_sequence N3658 c++14 5.0 3.4 14.0 N/A N/A
std::shared_mutex(定时的) N3659 c++14 5.0 3.4 14.0 N/A N/A
std::exchange N3668 c++14 5.0 3.4 14.0 N/A N/A
修正没有 constconstexpr 成员函数 N3669 c++14 5.0 3.4 14.0 N/A N/A
std::get<T>() N3670 c++14 5.0 3.4 14.0 N/A N/A
接受两个范围的 std::equal, std::is_permutation, std::mismatch N3671 c++14 5.0 3.4 14.0 N/A 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++ 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 11.0*
14.0
4.8 15.0 13.1.2* 5.13 8.4 2015
alignof N2341 c++11 4.5 2.9 14.0 4.8 15.0 13.1.2* 5.13 8.4 2015
原子操作 N2427 c++11 4.4 3.1 11.0 Yes 13.0 13.1.2* 5.14 8.4 2015
auto N1984(v1.0) c++11 4.4(v1.0) 10.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 14.0* 4.1 11.1 10.1 5.9 8.4 2015 A.06.25
constexpr N2235 c++11 4.6 3.1 14.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 10.0(v1.0)
11.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 12.0 4.1 12.0 13.1 5.13 8.4 2015 A.06.25
委托构造函数 N1986 c++11 4.7 3.0 12.0 4.7 14.0 11.1 5.13 8.4 2015 A.06.28
显示类型转换运算符 N2437 c++11 4.5 3.0 12.0 4.4 13.0 12.1 5.13 8.4 2015 A.06.27
扩展的 friend 声明 N1791 c++11 4.7 2.9 10.0*
12.0
4.1 11.1*
12.0
11.1 5.13 8.4 2015 A.06.25
extern template N1987 c++11 3.3 6.0 3.9 9.0 11.1 5.13 8.4 2015 A.06.25
前置 enum 声明 N2764 c++11 4.6 3.1 11.0 4.5 11.1*
14.0
12.1 5.13 8.4 2015
继承构造函数 N2540 c++11 4.8 3.3 14.0 4.8 15.0 13.1.1* 5.13 8.4 2015
初始化式列表 N2672 c++11 4.4 3.1 12.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 10.0(v1.0)
11.0(v1.1)
4.1(v1.1) 12.0(v1.1) 13.1.2* 5.13 8.4 2015 A.06.25
使用局部的或无名的类型作为模板参数 N2657 4.5 2.9 10.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 14.0 4.5 14.0 11.1 5.13 8.4 2015 A.06.28
新字符类型 N2249 c++11 4.4 2.9 14.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 10.0 4.1 12.0 12.1 5.13 8.4 2015 A.06.27
nullptr N2431 c++11 4.6 2.9 10.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 14.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 12.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 14.0 4.8 15.0 13.1.2* 5.14 8.4 2015
右尖括号(>) N1757 c++11 4.3 8.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)
10.0(v2.0)
11.0(v2.1)
14.0(v3.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 10.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 11.0 4.0 13.0 12.1 5.13 8.4 2015 A.06.25
别名模板 N2258 c++11 4.7 3.0 12.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
10.0*
14.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 14.0 4.6 14.0* 13.1.2* 5.13 8.4 2015 A.06.28
类型特征 N1836 c++11 4.3 3.0 8.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) 12.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 11.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 8.0(v0.8)
11.0(v1.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 14.0 4.2 12.1 13.1.1* 5.13 8.4 2015 A.06.27
ref-qualifiers N2439 c++11 4.8.1 2.9 14.0 4.7 14.0 13.1.2* 5.13 8.4 2015 A.06.28
非静态数据成员初始化式 N2756 c++11 4.7 3.0 12.0 4.6 14.0 13.1.2* 5.13 8.4 2015 A.06.28
带有并发支持的动态初始化与销毁(magic statics) N2660 c++11 4.3 2.9 14.0 11.1* 13.1.2* 5.13 8.4 2015 A.06.25
noexcept N3050 c++11 4.6 3.0 14.0 4.5 14.0 13.1.1* 5.13 8.4 2015 A.06.28
动态指针安全性(GC 接口) n2670 c++11
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++
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++

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


[编辑] 参考文档

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

  • GCC (2016-06 更新)
  • Clang++ (2016-06 更新)
  • Microsoft Visual Studio (2016-06 更新)
  • C++11/C++14/C++17 核心语言支持状况
  • Intel C++ (2016-06 更新)
  • 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, 变量模板,厘清内存分配(分配的合并)”