C++17 support in compilers

From KlayGE
Jump to: navigation, search

C++17 Core Language Features

Language Feature Proposal MSVC GCC ICC Clang Alternative
static_assert with no message N3928 15.0 6 No 3.5 C++11's static_assert
Disabling trigraph expansion by default N4086 12.0 5.1 No 3.5
typename in a template template parameter N4051 14.0 5 17.0 3.5
New auto rules for direct-list-initialization N3922 14.0 5 17.0 3.8
Fold expressions N4295 No 6 No 3.6
Attributes for namespaces and enumerators N4266 14.0 6 No 3.6
u8 character literals N4267 14.0 6 17.0 3.6
Nested namespace definition N4230 15.0 6 17.0 3.6
Allow constant evaluation for all non-type template arguments N4268 No 6 No 3.6
Remove deprecated register storage class P0001R1 No 7 No 3.8
Remove deprecated bool increment P0002R1 No 7 No 3.8
Make exception specifications part of the type system P0012R1 No 7 No No
__has_include in preprocessor conditionals P0061R1 No 5 No Yes
New specification for inheriting constructors (DR1941 et al) P0136R1 No 7 No 3.9
[[fallthrough]] attribute P0188R1 15.0 7 No 3.9
[[nodiscard]] attribute P0189R1 No 7 No 3.9
[[maybe_unused]] attribute P0212R1 No 7 No 3.9
Aggregate initialization of classes with base classes P0017R1 No 7 No 3.9
constexpr lambda expressions P0170R1 No 7 No No
Unary Folds and Empty Parameter Packs P0036R0 No 6 No 3.9
Differing begin and end types in range-based for P0184R0 15.0 6 No 3.9
Lambda capture of *this P0018R3 No 7 No 3.9
Direct-list-initialization of enums P0138R2 No 7 No 3.9
Hexadecimal floating-point literals P0245R1 No 3.0 No Yes
Using attribute namespaces without repetition P0028R4 No 7 No 3.9
Dynamic memory allocation for over-aligned data P0035R4 No 7 No No
Template argument deduction for class templates P0091R3 No 7 No No
Non-type template parameters with auto type P0127R2 No 7 No No
Guaranteed copy elision P0135R1 No 7 No No
Stricter expression evaluation order P0145R3 No 7 No No
Requirement to ignore unknown attributes P0283R2 No Yes No Yes
constexpr if-statements P0292R2 No 7 No 3.9
Inline variables P0386R2 No 7 No 3.9
Structured bindings P0217R3 No 7 No No
Separate variable and condition for if and switch P0305R1 No 7 No 3.9
Matching template template parameters to compatible arguments P0522R0 No 7 No No
Removing deprecated dynamic exception specifications P0003R5 No 7 No No
Pack expansions in using-declarations P0195R2 No No No No

See Also

C++11 support in compilers

C++14 support in compilers