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


Starting in 11.0 the Intel(R) C++ Compiler has supported some of the C++11 features (previously called C++0x). With the latest release of Intel C++ Compiler for Windows*, Linux* and macOS* , more C++11 features are supported.

Standard#Core Language FeaturesVersion 11.1Version 12.0Version 12.0 Update 6 or 12.1Version 13.0Version 14.0*1Version 15.0*1 & Later
N1610Initialization of class objects by rvaluesYesYesYesYesYesYes
N1720static_assertYesYesYesYesYesYes
N1737Multi-declarator auto-YesYesYesYesYes
N1757Right angle bracketsYesYesYesYesYesYes
N1791Extended friend declarationsPartialYesYesYesYesYes
N1984auto: Deducing the type of variable from its initializer expression-YesYesYesYesYes
N1986Delegating constructors----YesYes
N1987Extern templatesYesYesYesYesYesYes
N2118Rvalues references-YesYesYesYesYes
N2170Universal character names in literals--YesYesYesYes
N2235Generalized constant expressions---PartialYesYes
N2242variadic templates v0.9--YesYesYesYes
N2249char16_t/char32_t types--Partial on Windows;
Yes on Linux & macOS
Partial on Windows;
Yes on Linux & macOS
Yes (VS)Yes
N2253Extended sizeof----YesYes
N2258alias templates--YesYesYesYes
N2341Alignment: Adding Alignment Support to the C++ Programming Language-----Yes
N2342Standard-layout and trivial types----YesYes
N2343decltype v1.0-YesYesYesYesYes
N2346deleted and defaulted functions-YesYesYesYesYes
N2347Explicit enum bases and scoped enums---YesYesYes
N2347Strongly typed enumsPartialPartialPartialPartialYesYes
N2431nullptr--YesYesYesYes
N2437Explicit conversion operators---YesYesYes
N2439Rvalue references for *this----YesYes
N2442Raw string literals----YesYes
N2535Inline namespaces----YesYes
N2540Inheriting constructors-----Yes
N2541auto: Trailing return types-YesYesYesYesYes
N2541Late-specified return types--YesYesYesYes
N2544Unrestricted unions----Yes on Linux & OS XYes on Linux & OS X
N2546auto v1.0: Removal of auto as a storage-class specifier-YesYesYesYesYes
N2550Lambdas v0.9: Lambda Expressions and Closures-YesYesYesYesYes
N2555variadic templates v1.0--YesYesYesYes
N2634New-style Expression SFINAE (N2634)--YesYesYesYes
N2657Local and unnamed types as template arguments-YesYesYesYesYes
N2658Lambdas v1.0: Constness of Lambda Functions-YesYesYesYesYes
N2670Minimal support for garbage collection-----Yes on Windows
N2672General initializer lists---PartialYesYes
N2756Non-static data member initializers----YesYes
N2761Standard attributes (N2761)--YesYesYesYes
N2764Forward declared enumsPartialPartialPartialPartialYesYes
N2765User-defined literals-----Yes
N2844Rvalue references v2-YesYesYesYesYes
N2927Lambdas v1.1: New wording for C++0x Lambdas-YesYesYesYesYes
N2928Explicit Virtual Overrides----YesYes
N2930Range-based for loops---YesYesYes
N2947Additional type traits---YesYesYes
N3050noexcept or Allowing move constructors to throw----YesYes
N3052Conversions of lambdas to function pointers---YesYesYes
N3053RValues: Defining Move Special Member Functions----YesYes
N3206Explicit virtual overrides -> Override control: Eliminating Attributes----YesYes
N3272override and final----YesYes
N3276decltype v1.1: Decltype and Call Expressions-YesYesYesYesYes
Core issue 382Allow typename outside of templates-YesYesYesYesYes
DR226Default template arguments for function templates--YesYesYesYes
 Core Language Features: Concurrency      
N2179exception_ptr-YesYesYesYesYes
N2239Reworded sequence points-----Yes
N2440quick_exit-----Yes on Linux/OS X
N2427atomic types and operations---YesYesYes
N2429Memory model-----Yes on Linux/OS X
N2547Atomics in signal handlers-----Yes on Linux/OS X
N2659Thread-local storage----No on Linux/OS X
Yes on Windows in VS2015 mode
Yes on Linux/OS X
Yes on Windows in VS2015 mode
N2660Magic staticsYes on Linux/OS XYes on Linux/OS XYes on Linux/OS XYes on Linux/OS XYes for all OSes, but on Windows in VS2015 mode only Yes for all OSes, but on Windows in VS2015 mode only
N2664Data-dependency ordering------
N2748Strong compare and exchange---YesYesYes
N2752Bidirectional fences---YesYesYes
N2782Data-dependency ordering: function annotation-----Yes
 Core Language Features: C99      
N1653C99 preprocessorYesYesYesYesYesYes
N1811long longYesYesYesYesYesYes
N2340__func__YesYesYesYesYesYes
N1988Extended integer types-----Yes on Linux/OS X

Note:

  1. *1: * Full C++11 support requires gcc 4.8 environment or newer on Linux*
  2. On Windows: when using Intel C++ compiler with Visual Studio 2010* or 2012*, the C++11 features supported by Visual C++ 2010/2012 are enabled by default. Use "/Qstd=c++11" to turn on the support for all other cases.
    "char16_t/char32_t types" feature also requires Visual C++ 2015 or above.
  3. On Linux or macOS: the C++11 features supported by gcc on the path are enabled by default. Use "-std=c++11" to turn on the support for all other cases.
  4. /Qstd=c++0x (-std=c++0x on Linux or macOS) is still supported. It is the same as /Qstd=c++11(-std=c++11 on Linux or macOS).
    Please read the documentation for detail information under /Qstd (-std on Linux* or macOS*) option.
  5. On Building Applications for Intel® Many Integrated Core Architecture (Intel® MIC Architecture)
    • Linux: Note that language features available can depend on gcc* version installed. The version of gcc compiler, header files, and libraries that are provided as part of the Intel® Manycore Platform Software Stack (Intel® MPSS) distribution on Intel® MIC Architecture is an experimental 4.7.0 version. This version lacks full support for some gcc features that are available in the final release of the 4.7.0 gcc compiler and libraries. In particular, this version of gcc lacks the support for allocator_traits.
    • Windows: The version of header files and libraries that are provided as part of the Intel® MPSS distribution on Intel® MIC Architecture is an experimental 4.7.0 version. This version lacks full support for some gcc* features that are available in the final release of the 4.7.0 gcc libraries. In particular, this version of gcc lacks the support for allocator traits.

Other related articles

  1. C++14 Features Supported by Intel® C++ Compiler
  2.  C++17 Features Supported by Intel(R) C++ Compiler
  3. C99 Support in Intel C++ Compiler article for supported C99 features.
  4. C++11 FAQ by Bjarne Stroustrup
  5. C++11 Features Supported in Microsoft Visual Studio* 2012/2013
  6. C++11 Features Supported in GNU* gcc
For more complete information about compiler optimizations, see our Optimization Notice.

22 comments

Top
Sergey Kostrov's picture

It would be nice to see a last updated date for the article. Thanks.

Petros Mamales's picture

Jennifer, thank you for the clarification.
And I don't see any mention (or did not catch it ;-)) for constructor delegates.

Sergey Kostrov's picture

>>...The "variadic template" is supported since 12.0...

Thanks for the update, Jennifer.

Jennifer J. (Intel)'s picture

The "variadic template" is supported since 12.0. it is listed above.

With icl 12.x, use "/Qstd=c++0x". The default is compatible mode with the VS2010 if used with VS2010. If you want the full C++11 from icl, add "/Qstd=c++0x" option.

In icl13.0, both "/Qstd=c++0x" and "/Qstd=c++11" works. The default is still compatible mode with VS2010 if used with VS2010, and compatible mode with VS2012 if used with VS2012.

Sergey Kostrov's picture

>>...what about support for variadic templates?

That was done some time ago. I remember that some developers reported issues / problems some time ago.

Petros Mamales's picture

There does not seem to exist a flag /Qstd=c++11, on 12.1 ( at least in the visual configuration inputs ) for vs2010 (windows, obviously) . Only /Qstd=c++0x, which by the way is not on by default.
Is this equivalent ?

Matt Clarkson's picture

Are these for icpc or the icl.exe as I have found that icl.exe seems to be missing certain C++11 features.

anonymous's picture

icpc version 13.0 does not seem to support c++11 unions; the spec says "A union can have member functions (including constructors and destructors), but not virtual (10.3) functions. A union shall not have base classes. A union shall not be used as a base class. If a union contains a non-static data member of reference type the program is ill-formed. At most one non-static data member of a union may have a brace-or-equal-initializer. [ Note: If any non-static data member of a union has a non-trivial default constructor (12.1), copy constructor (12.8), move constructor (12.8), copy assignment operator (12.8), move assignment operator (12.8), or destructor (12.4), the corresponding member function of the union must be user-provided or it will be implicitly deleted (8.4.3) for the union. — end note ]" (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf) However, icpc tells me that default trivial constructors are diallowed member functions in, e.g.,

struct Foo {
int a;
Foo() = default;
};

union Bar {
Foo f;
double d;
};

int main() {
Bar b;
return b.f.a;
}

Is there some place that I should report this?

Jennifer J. (Intel)'s picture

Could you please post this issue to the Intel C++ Forum - http://software.intel.com/en-us/forums/intel-c-compiler/?
Which version of boost is used here?

Try this: create .i from g++; then build the .i with icpc.
I'm wondering if the boost lib has "#ifdef __INTEL_C".

Pages

Add a Comment

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