Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/compiler support"

From cppreference.com
< cpp
(New Clang features in C++17)
Line 783: Line 783:
 
| ibm={{yes|1=<span title="Linux LE / zLinux BE">13.1.2*</span>}}
 
| ibm={{yes|1=<span title="Linux LE / zLinux BE">13.1.2*</span>}}
 
| edg={{yes|4.11}}
 
| edg={{yes|4.11}}
 +
| msvc={{yes|"15" Preview 5}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row

Revision as of 20:31, 8 October 2016

 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 

The following table presents compiler support for new C++ features. These include C++11, C++14, C++17 and various technical specifications.

C++ feature
 
Paper(s)
 
Version
 
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 4.8 3.0 11.0*
14.0
4.8 15.0 5.13 Yes 8.4 2015
alignof N2341 4.5 2.9 14.0 4.8 15.0 5.13 Yes 8.4 2015
Atomic operations N2427 4.4 3.1 11.0 Yes 13.0 5.14 Yes 8.4 2015
auto N1984(v1.0) 4.4(v1.0) Yes 10.0(v0.9) 4.1(v0.9) 11.0(v0.9)
12.0(v1.0)
5.13 Yes 8.4 2015 A.06.25
C99 preprocessor N1653 4.3 Yes 14.0* 4.1 11.1 5.9 Yes 8.4 2015
constexpr N2235 4.6 3.1 14.0* 4.6 13.0*
14.0
5.13 Yes 8.4 2015 A.06.28
decltype v1.0: N2343

v1.1: N3276

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)
5.13 Yes 8.4 2015 A.06.25 8.52(v1.0)
Defaulted and deleted functions N2346 4.4 3.0 12.0 4.1 12.0 5.13 Yes 8.4 2015 A.06.25
Delegating constructors N1986 4.7 3.0 12.0 4.7 14.0 5.13 Yes 8.4 2015 A.06.28
Explicit conversion operators N2437 4.5 3.0 12.0 4.4 13.0 5.13 Yes 8.4 2015 A.06.27
Extended friend declarations N1791 4.7 2.9 10.0*
12.0
4.1 11.1*
12.0
5.13 Yes 8.4 2015 A.06.25
extern template N1987 3.3 Yes 6.0 3.9 9.0 5.13 Yes 8.4 2015 A.06.25
Forward enum declarations N2764 4.6 3.1 11.0 4.5 11.1*
14.0
5.13 Yes 8.4 2015
Inheriting constructors N2540 4.8 3.3 14.0 4.8 15.0 5.13 Yes 8.4 2015
Initializer lists N2672 4.4 3.1 12.0 4.5 13.0*
14.0
5.13 Yes 8.4 2015 A.06.28
Lambda expressions v0.9: N2550

v1.0: N2658
v1.1: N2927

4.5(v1.1) 3.1 10.0(v1.0)
11.0(v1.1)
4.1(v1.1) 12.0(v1.1) 5.13 Yes 8.4 2015 A.06.25
Local and unnamed types as template parameters N2657 4.5 2.9 10.0 4.2 12.0 5.13 Yes 8.4 2015
long long N1811 Yes Yes Yes Yes Yes Yes Yes 8.4 2015 Yes Yes
Inline namespaces N2535 4.4 2.9 14.0 4.5 14.0 5.13 Yes 8.4 2015 A.06.28
New character types N2249 4.4 2.9 14.0 4.4 12.1*
14.0
5.13 Yes 8.4 2015 A.06.27 8.52
Trailing function return types N2541 4.4 2.9 10.0 4.1 12.0 5.13 Yes 8.4 2015 A.06.27
nullptr N2431 4.6 2.9 10.0 4.2 12.1 5.13 Yes 8.4 2015 A.06.27 8.52
Unicode string literals N2442 4.4 3.0 14.0 4.7 11.0* 5.7 Yes 8.4 2015 A.06.28 8.52
Raw string literals N2442 4.5 Yes 12.0 4.7 14.0 5.13 Yes 8.4 2015 A.06.28 8.52
User-defined literals N2765 4.7 3.1 14.0 4.8 15.0 5.14 Yes 8.4 2015
Right angle brackets N1757 4.3 Yes 8.0 4.1 11.0 5.13 Yes 8.4 2015
R-value references v1.0: N2118

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

4.3(v1.0)
4.5(v2.1)
4.6(v3.0)
Yes 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)
5.13 Yes 8.4 2015 A.06.25
static_assert N1720 4.3 2.9 10.0 4.1 11.0 5.13 Yes 8.4 2015 A.06.25 8.52
Strongly-typed enum N2347 4.4 2.9 11.0 4.0 13.0 5.13 Yes 8.4 2015 A.06.25
Template aliases N2258 4.7 3.0 12.0 4.2 12.1 5.13 Yes 8.4 2015 A.06.27
Thread-local storage N2659 4.4*
4.8
3.3*
3.3
10.0*
14.0
4.8 11.1*
15.0*
5.9* Yes 8.4 2015 8.52*
Unrestricted unions N2544 4.6 3.0 14.0 4.6 14.0* 5.13 Yes 8.4 2015 A.06.28
Type traits N1836 4.3 3.0 8.0 4.0 10.0 5.13 Yes 8.4 2015 6.16
Variadic templates v0.9: N2242

v1.0: N2555

4.3(v0.9)
4.4(v1.0)
2.9(v1.0) 12.0 4.1(v0.9) 12.1(v1.0) 5.13 Yes 8.4 2015 A.06.27
Range-for loop N2930 4.6 3.0 11.0 4.5 13.0 5.13 Yes 8.4 2015 A.06.28
override and final v0.8: N2928

v0.9: N3206
v1.0: N3272

4.7 2.9 8.0(v0.8)
11.0(v1.0)
4.8(v1.0) 12.0(v0.8)
14.0(v1.0)
5.13 Yes 8.4 2015
Attributes N2761 4.8 3.3 14.0 4.2 12.1 5.13 Yes 8.4 2015 A.06.27
ref-qualifiers N2439 4.8.1 2.9 14.0 4.7 14.0 5.13 Yes 8.4 2015 A.06.28
Non-static data member initializers N2756 4.7 3.0 12.0 4.6 14.0 5.13 Yes 8.4 2015 A.06.28
Dynamic initialization and destruction with concurrency (magic statics) N2660 4.3 2.9 14.0 Yes 11.1* 5.13 Yes 8.4 2015 A.06.25
noexcept N3050 4.6 3.0 14.0 4.5 14.0 5.13 Yes 8.4 2015 A.06.28
C++ feature
 
Paper(s)
 
Version
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
Tweaked wording for contextual conversions N3323 4.9 3.4 12.0 4.9 16.0
Binary literals N3472 4.3/4.9 2.9 14.0 4.10 11.0 5.14 2015
decltype(auto), Return type deduction for normal functions N3638 4.8/4.9 3.3/3.4 14.0 4.9 15.0
Initialized/Generalized lambda captures (init-capture) N3648 4.5/4.9 3.4 14.0 4.10 15.0  ?
Generic (polymorphic) lambda expressions N3649 4.9 3.4 14.0 4.10 16.0  ?
Variable templates N3651 5.0 3.4 14.2 4.11 17.0
Extended constexpr N3652 5 3.4 "15" Preview 5 4.11 17.0
Member initializers and aggregates (NSDMI) N3653 5 3.3 "15" Preview 4 4.9 16.0 5.14
Clarifying memory allocation (avoiding/fusing allocations) N3664 N/A 3.4 N/A N/A
Deprecated attribute N3760 4.9 3.4 14.0 4.9 15.0*
16.0
5.14
Sized deallocation N3778 5 3.4 14.0 4.10.1 17.0 5.14
Single quote as digit separator N3781 4.9 3.4 14.0 4.10 16.0 5.14 2015
std::result_of and SFINAE N3462 5.0 Yes 14.2 N/A N/A Yes
constexpr for <complex> N3302 5.0 3.4 14.0 N/A N/A
constexpr for <chrono> N3469 5.0 3.4 14.0 N/A N/A
constexpr for <array> N3470 5.0 3.4 14.0 N/A N/A
constexpr for <initializer_list>, <utility> and <tuple> N3471 5.0 3.4 14.0 N/A N/A
Improved std::integral_constant N3545 5.0 3.4 14.0 N/A N/A
User-defined literals for <chrono> and <string> N3642 5.0 3.4 14.0 N/A N/A
Null forward iterators N3644 5.0* 3.4 14.0 N/A N/A
std::quoted N3654 5.0 3.4 14.0 N/A N/A
Heterogeneous associative lookup N3657 5.0 3.4 14.0 N/A N/A
std::integer_sequence N3658 5.0 3.4 14.0 N/A N/A
std::shared_mutex (timed) N3659 5.0 3.4 14.0 N/A N/A
std::exchange N3668 5.0 3.4 14.0 N/A N/A
fixing constexpr member functions without const N3669 5.0 3.4 14.0 N/A N/A
std::get<T>() N3670 5.0 3.4 14.0 N/A N/A
Dual-Range std::equal, std::is_permutation, std::mismatch N3671 5.0 3.4 14.0 N/A N/A
C++ feature
 
Paper(s)
 
Version
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++
New auto rules for direct-list-initialization N3922 3.8 14.0 4.10.1 17.0
static_assert with no message N3928 6 2.5 4.12
typename in a template template parameter N4051 5.0 3.5 14.0 4.10.1 17.0
std::uncaught_exceptions() N4152 6 3.7 14.0
Nested namespace definition N4230 6 3.6 14.3 4.12 17.0
Attributes for namespaces and enumerators N4266 4.9 (namespaces) / 6 (enumerators) 3.6 14.0 4.11
u8 character literals N4267 6 3.6 14.0 4.11 17.0
Allow constant evaluation for all non-type template arguments N4268 6 3.6
Fold Expressions N4295 6 3.6
Make exception specifications part of the type system P0012R1
Aggregate initialization of classes with base classes P0017R1 3.9
Lambda capture of *this P0018R3 3.9
Using attribute namespaces without repetition P0028R4 3.9
Dynamic memory allocation for over-aligned data P0035R4 7
Unary fold expressions and empty parameter packs P0036R0 6 3.9
__has_include in preprocessor conditionals P0061R1 5.0 Yes
Template argument deduction for class templates P0091R3
Non-type template parameters with auto type P0127R2 4.0
Guaranteed copy elision P0135R1
New specification for inheriting constructors (DR1941 et al) P0136R1 3.9
Direct-list-initialization of enumerations P0138R2 3.9
Stricter expression evaluation order P0145R3 7 4.0
constexpr lambda expressions P0170R1 7
Differing begin and end types in range-based for P0184 6 3.9 14.3 4.12
[[fallthrough]] attribute P0188 3.9 "15" Preview 4
[[nodiscard]] attribute P0189 7 3.9
[[maybe_unused]] attribute P0212 7 3.9
Structured Bindings P0217R3 4.0 (partial)
Ignore unknown attributes P0283R2 Yes 3.9
Hexadecimal floating-point literals P0245 3.0 Yes
constexpr if statements P0292R2 7 3.9
init-statements for if and switch P0305R1 3.9
Inline variables P0386R2 3.9
Improving std::pair and std::tuple N4387 Yes 14.2 N/A N/A
std::shared_mutex (untimed) N4508 6.0 3.7 14.2* N/A N/A
C++ feature
 
Paper(s)
 
Version
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
HP aCC
Digital Mars C++

* - hover over the version number to see notes


References

Individual vendor compatibility checklists (these are more up-to-date than the table above)

  • GCC (Updated 2016-06)
  • Clang++ (Updated 2016-06)
  • Microsoft Visual Studio (updated 2016-06)
  • C++11/C++14/C++17 core language support status
  • Intel C++ (Updated 2016-06)
  • EDG (Updated 2016-01)
  • Oracle C++ (updated 2016-01)
  • libCstd (RogueWave Standard Library version 2), predates C++98
  • stlport4 (STLport Standard Library version 4.5.3), predates C++03
  • stdcxx4 (Apache Standard Library version 4), predates C++11
  • IBM XL C++ (updated 2015-12)
  • HP aCC
  • Digital Mars C++
  • Embarcadero C++
  • Cray (updated 2015-12)
  • [2] For version 8.4, claims all of C++11 is supported except alignas
  • Portland Group (PGI) (updated 2016-07)
  • Release notes for 2016 claim C++14 support, except "generalized constexpr and constexpr member functions and implicit const, variable templates, clarifying memory allocation (merged allocation)"