Difference between revisions of "C++17 support in compilers"
From KlayGE
Gongminmin (Talk | contribs) |
Gongminmin (Talk | contribs) |
||
Line 8: | Line 8: | ||
| Disabling trigraph expansion by default || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4086.html N4086] || {{Yes}}12.0 || {{Yes}}5.1 || {{No}}No || {{Yes}}3.5 || | | Disabling trigraph expansion by default || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4086.html N4086] || {{Yes}}12.0 || {{Yes}}5.1 || {{No}}No || {{Yes}}3.5 || | ||
|- | |- | ||
− | | typename in a template template parameter || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html N4051] || {{Yes}}14.0 || {{Yes}}5 || {{ | + | | typename in a template template parameter || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html N4051] || {{Yes}}14.0 || {{Yes}}5 || {{Yes}}17.0 || {{Yes}}3.5 || |
|- | |- | ||
− | | New auto rules for direct-list-initialization || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html N3922] || {{Yes}}14.0 || {{Yes}}5 || {{ | + | | New auto rules for direct-list-initialization || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html N3922] || {{Yes}}14.0 || {{Yes}}5 || {{Yes}}17.0 || {{Yes}}3.8 || |
|- | |- | ||
| Fold expressions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4295.html N4295] || {{No}}No || {{Yes}}6 || {{No}}No || {{Yes}}3.6 || | | Fold expressions || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4295.html N4295] || {{No}}No || {{Yes}}6 || {{No}}No || {{Yes}}3.6 || | ||
Line 16: | Line 16: | ||
| Attributes for namespaces and enumerators || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4266.html N4266] || {{Yes}}14.0 || {{Yes}}6 || {{No}}No || {{Yes}}3.6 || | | Attributes for namespaces and enumerators || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4266.html N4266] || {{Yes}}14.0 || {{Yes}}6 || {{No}}No || {{Yes}}3.6 || | ||
|- | |- | ||
− | | u8 character literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4267.html N4267] || {{Yes}}14.0 || {{Yes}}6 || {{ | + | | u8 character literals || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4267.html N4267] || {{Yes}}14.0 || {{Yes}}6 || {{Yes}}17.0 || {{Yes}}3.6 || |
|- | |- | ||
− | | Nested namespace definition || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html N4230] || {{Yes}}15.0 || {{Yes}}6 || {{ | + | | Nested namespace definition || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html N4230] || {{Yes}}15.0 || {{Yes}}6 || {{Yes}}17.0 || {{Yes}}3.6 || |
|- | |- | ||
| Allow constant evaluation for all non-type template arguments || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4268.html N4268] || {{No}}No || {{Yes}}6 || {{No}}No || {{Yes}}3.6 || | | Allow constant evaluation for all non-type template arguments || [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4268.html N4268] || {{No}}No || {{Yes}}6 || {{No}}No || {{Yes}}3.6 || |
Revision as of 01:02, 2 January 2017
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 |