Standard# | Language Features | Version 11.0~16.0 | Version 17.0 | Version 18.0 | Version 19.0 | Version 19.1.0 |
N3928 | static_assert with no message | No | No | Yes | Yes | Yes |
N4086 | Disabling trigraph expansion by default | No | No | No | No | No |
N4051 | typename in a template template parameter | No | Yes | Yes | Yes | Yes |
N3922 | New auto rules for direct-list-initialization | No | Yes | Yes | Yes | Yes |
N4295 | Fold expressions | No | No | No | Yes | Yes |
N4267 | u8 character literals | No | Yes | Yes | Yes | Yes |
N4230 | Nested namespace definition | No | Yes | Yes | Yes | Yes |
N4266 | Attributes for namespaces and enumerators | No | Yes | Yes | Yes | Yes |
N4268 | Allow constant evaluation for all non-type template arguments | No | No | No | Yes | Yes |
P0001R1 | Remove deprecated register storage class | No | No | Yes | Yes | Yes |
P0002R1 | Remove deprecated bool increment | No | No | Yes | Yes | Yes |
P0012R1 | Make exception specifications part of the type system | No | No | Yes | Yes | Yes |
P0061R1 | __has_include in preprocessor conditionals | No | No | Yes | Yes | Yes |
P0188R1 | [[fallthrough]] attribute | No | No | Yes | Yes | Yes |
P0189R1 | [[nodiscard]] attribute | No | No | Yes | Yes | Yes |
P0189R1 | [[nodiscard]] attribute | No | No | Yes | Yes | Yes |
P0212R1 | [[maybe_unused]] attribute | No | No | Yes | Yes | Yes |
P0184R0 | Generalizing the Range-Based For Loop | No | No | Yes | Yes | Yes |
P0138R2 | Direct-list-initialization of enums | No | No | Yes | Yes | Yes |
P0245R1 | Hexadecimal floating-point literals | No | No | Yes | Yes | Yes |
P0028R4 | Using attribute namespaces without repetition | No | No | Yes | Yes | Yes |
P0283R2 | Requirement to ignore unknown attributes | No | No | Yes | Yes | Yes |
P0217R3 | Structured bindings | No | No | No | Yes | Yes |
P0305R1 | Separate variable and condition for if and switch | No | No | No | Yes | Yes |
P0386R2 | Inline Variable | No | No | No | Yes | Yes |
P0138R2 | Construction rules for enum classes | No | No | No | Yes | Yes |
P0003R5 | Removing deprecated dynamic exception specifications | No | No | No | Yes | Yes |
P0170R1 | constexpr lambda expressions | No | No | No | Yes | Yes |
P0018R3 | Lambda capture of *this | No | No | No | Yes | Yes |
P0292R2 | constexpr if-statements | No | No | No | Yes | Yes |
P0522R0 | Matching template parameters to compatible arguments | No | No | No | No | Yes |
P0145R3 | Stricter expression evaluation order | No | No | No | No | Yes |
P0135R1 | Guaranteed copy elision | No | No | No | No | Yes |
P0127R2 | Non-type template parameters with auto type | No | No | No | No | Yes |
P0091R3 | Template argument deduction for class templates | No | No | No | No | Yes |
P0017R1 | Aggregate initialization of classes with base classes | No | No | No | No | Yes |
P0136R1 | New specification for inheriting constructors (DR1941 et al) | No | No | No | No | No |
P0195R2 | Pack expansions in using-declarations | No | No | No | Yes | Yes |
P0091R3 | Template argument deduction for class templates | No | No | No | No | Yes |
P0035R4 | Dynamic memory allocation for over-aligned data | No | No | No | Yes | Yes |
Use compiler option -std=c++17 (/Qstd=c++17) to enable C++17 features.
Other relevant articles:
- Clang C++ standards support: http://clang.llvm.org/cxx_status.html
- Microsoft Visual Studio Compiler C++ standards support: https://devblogs.microsoft.com/cppblog/c111417-features-in-vs-2015-preview/
- Intel Compiler C++11 support status: /content/www/cn/zh/develop/articles/c0x-features-supported-by-intel-c-compiler.html
- Intel Compiler C++14 support status: /content/www/cn/zh/develop/articles/c14-features-supported-by-intel-c-compiler.html