Difference between revisions of "C++17 support in compilers"

From KlayGE
Jump to: navigation, search
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 || {{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 || {{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 || {{No}}No || {{Yes}}3.8 ||
+
| 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 || {{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 || {{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 || {{No}}No || {{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 || {{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

See Also

C++11 support in compilers

C++14 support in compilers

References