C++17 Features Supported by Intel® C++ Compiler


Standard#Language FeaturesVersion 11.0~16.0Version 17.0Version 18.0Version 19.0Version 19.0.1
N3928static_assert with no messageNoNoYesYesYes
N4086Disabling trigraph expansion by defaultNoNoNoNoYes
N4051typename in a template template parameterNoYesYesYesYes
N3922New auto rules for direct-list-initializationNoYesYesYesYes
N4295Fold expressionsNoNoNoYesYes
N4267u8 character literalsNoYesYesYesYes
N4230Nested namespace definitionNoYesYesYesYes
N4266Attributes for namespaces and enumeratorsNoYesYesYesYes
N4268Allow constant evaluation for all non-type template argumentsNoNoNoNoYes
P0001R1Remove deprecated register storage classNoNoYesYesYes
P0002R1Remove deprecated bool incrementNoNoYesYesYes
P0012R1Make exception specifications part of the type systemNoNoYesYesYes
P0061R1__has_include in preprocessor conditionalsNoNoYesYesYes
P0188R1[[fallthrough]] attributeNoNoYesYesYes
P0189R1[[nodiscard]] attributeNoNoYesYesYes
P0189R1[[nodiscard]] attributeNoNoYesYesYes
P0212R1[[maybe_unused]] attributeNoNoYesYes
P0184R0Generalizing the Range-Based For LoopNoNoYesYesYes
P0138R2Direct-list-initialization of enumsNoNoYesYesYes
P0245R1Hexadecimal floating-point literalsNoNoYesYesYes
P0028R4Using attribute namespaces without repetitionNoNoYesYesYes
P0283R2Requirement to ignore unknown attributesNoNoYesYesYes
P0217R3Structured bindingsNoNoNoYesYes
P0305R1Separate variable and condition for if and switchNoNoNoYesYes
P0386R2Inline VariableNoNoNoYesYes
P0138R2Construction rules for enum classesNoNoNoYesYes
P0003R5Removing deprecated dynamic exception specificationsNoNoNoYesYes
P0170R1constexpr lambda expressionsNoNoNoYesYes
P0018R3Lambda capture of *thisNoNoNoYesYes
P0292R2constexpr if-statementsNoNoNoYesYes
P0522R0Matching template parameters to compatible argumentsNoNoNoNoYes
P0145R3Stricter expression evaluation orderNoNoNoNoYes
P0135R1Guaranteed copy elisionNoNoNoNoYes
P0127R2Non-type template parameters with auto typeNoNoNoNoYes
P0091R3Template argument deduction for class templatesNoNoNoNoYes
P0017R1Aggregate initialization of classes with base classesNoNoNoNoYes
P0136R1New specification for inheriting constructors (DR1941 et al)NoNoNoNoNo

Use compiler option -std=c++17 (/Qstd=c++17) to enable C++17 features.

Other relevant articles:

  1. Clang C++ standards support: http://clang.llvm.org/cxx_status.html
  2. Microsoft Visual Studio Compiler C++ standards support: http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx
  3. Intel Compiler C++11 support status: https://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler
  4. Intel Compiler C++14 support status: https://software.intel.com/en-us/articles/c14-features-supported-by-intel-c-compiler
For more complete information about compiler optimizations, see our Optimization Notice.



Support - I wanted to concur with @simmse above. Stating that https://en.cppreference.com/w/cpp/compiler_support is up to date and linking to the page from here would be very helpful.

Thanks, Paul


Hello Support,

What I am looking for, as well I am sure many others, is something similar to how the C++ Reference page displays the details.  A close second is the Visual Studio conformance page.  There are 53 distinct C++17 rows in the C++ Reference table, whereas above are 37.  The reference URLs are below.

C++ compiler support on C++ Reference (https://en.cppreference.com/w/cpp/compiler_support)

Visual Studio Language Conformance on Microsoft (https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance?view=vs-2017)

C++ conformance improvements in Visual Studio 2017 versions 15.0, 15.3, 15.5, 15.6, 15.7, 15.8, 15.9 (https://docs.microsoft.com/en-us/cpp/cpp-conformance-improvements-2017?view=vs-2017)



Hello Support,

When will this page be updated to reflect the recent 19.0 release and successive updates?  The last update on this page is just over one year ago.



Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.