C++17 support in compilers
From KlayGE
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 |