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++ Composer XE for Windows*, Linux* and Mac OS* X 2013 SP1, more C++11 features are supported.

Standard# Core Language Features Version 11.1 Version 12.0 Version 12.0 Update 6 or 12.1 Version 13.0 Version 14.0*1 Version 15.0*1 & Later
N1610 Initialization of class objects by rvalues Yes Yes Yes Yes Yes Yes
N1720 static_assert Yes Yes Yes Yes Yes Yes
N1737 Multi-declarator auto - Yes Yes Yes Yes Yes
N1757 Right angle brackets Yes Yes Yes Yes Yes Yes
N1791 Extended friend declarations Partial Yes Yes Yes Yes Yes
N1984 auto: Deducing the type of variable from its initializer expression - Yes Yes Yes Yes Yes
N1986 Delegating constructors - - - - Yes Yes
N1987 Extern templates Yes Yes Yes Yes Yes Yes
N2118 Rvalues references - Yes Yes Yes Yes Yes
N2170 Universal character names in literals - - Yes Yes Yes Yes
N2235 Generalized constant expressions - - - Partial Yes Yes
N2242 variadic templates v0.9 - - Yes Yes Yes Yes
N2249 char16_t/char32_t types - - Partial on Windows;
Yes on Linux & Mac OS X
Partial on Windows;
Yes on Linux & Mac OS X
Yes Yes
N2253 Extended sizeof - - - - Yes Yes
N2258 alias templates - - Yes Yes Yes Yes
N2341 Alignment: Adding Alignment Support to the C++ Programming Language - - - - - Yes
N2342 Standard-layout and trivial types - - - - Yes Yes
N2343 decltype v1.0 - Yes Yes Yes Yes Yes
N2346 deleted and defaulted functions - Yes Yes Yes Yes Yes
N2347 Explicit enum bases and scoped enums - - - Yes Yes Yes
N2347 Strongly typed enums Partial Partial Partial Partial Yes Yes
N2431 nullptr - - Yes Yes Yes Yes
N2437 Explicit conversion operators - - - Yes Yes Yes
N2439 Rvalue references for *this - - - - Yes Yes
N2442 Raw string literals - - - - Yes Yes
N2535 Inline namespaces - - - - Yes Yes
N2540 Inheriting constructors - - - - - Yes
N2541 auto: Trailing return types - Yes Yes Yes Yes Yes
N2541 Late-specified return types - - Yes Yes Yes Yes
N2544 Unrestricted unions - - - - Yes on Linux & OS X Yes on Linux & OS X
N2546 auto v1.0: Removal of auto as a storage-class specifier - Yes Yes Yes Yes Yes
N2550 Lambdas v0.9: Lambda Expressions and Closures - Yes Yes Yes Yes Yes
N2555 variadic templates v1.0 - - Yes Yes Yes Yes
N2634 New-style Expression SFINAE (N2634) - - Yes Yes Yes Yes
N2657 Local and unnamed types as template arguments - Yes Yes Yes Yes Yes
N2658 Lambdas v1.0: Constness of Lambda Functions - Yes Yes Yes Yes Yes
N2670 Minimal support for garbage collection - - - - - Yes on Windows
N2672 General initializer lists - - - Partial Yes Yes
N2756 Non-static data member initializers - - - - Yes Yes
N2761 Standard attributes (N2761) - - Yes Yes Yes Yes
N2764 Forward declared enums Partial Partial Partial Partial Yes Yes
N2765 User-defined literals - - - - - Yes
N2844 Rvalue references v2 - Yes Yes Yes Yes Yes
N2927 Lambdas v1.1: New wording for C++0x Lambdas - Yes Yes Yes Yes Yes
N2928 Explicit Virtual Overrides - - - - Yes Yes
N2930 Range-based for loops - - - Yes Yes Yes
N2947 Additional type traits - - - Yes Yes Yes
N3050 noexcept or Allowing move constructors to throw - - - - Yes Yes
N3052 Conversions of lambdas to function pointers - - - Yes Yes Yes
N3053 RValues: Defining Move Special Member Functions - - - - Yes Yes
N3206 Explicit virtual overrides -> Override control: Eliminating Attributes - - - - Yes Yes
N3272 override and final - - - - Yes Yes
N3276 decltype v1.1: Decltype and Call Expressions - Yes Yes Yes Yes Yes
Core issue 382 Allow typename outside of templates - Yes Yes Yes Yes Yes
DR226 Default template arguments for function templates - - Yes Yes Yes Yes
  Core Language Features: Concurrency            
N2179 exception_ptr - Yes Yes Yes Yes Yes
N2239 Reworded sequence points - - - - - Yes
N2440 quick_exit - - - - - Yes on Linux/OS X
N2427 atomic types and operations - - - Yes Yes Yes
N2429 Memory model - - - - - Yes on Linux/OS X
N2547 Atomics in signal handlers - - - - - Yes on Linux/OS X
N2659 Thread-local storage - - - - - Yes on Linux/OS X
N2660 Magic statics Yes on Linux/OS X Yes on Linux/OS X Yes on Linux/OS X Yes on Linux/OS X Yes on Linux/OS X Yes on Linux/OS X
N2664 Data-dependency ordering - - - - - -
N2748 Strong compare and exchange - - - Yes Yes Yes
N2752 Bidirectional fences - - - Yes Yes Yes
N2782 Data-dependency ordering: function annotation - - - - - Yes
  Core Language Features: C99            
N1653 C99 preprocessor Yes Yes Yes Yes Yes Yes
N1811 long long Yes Yes Yes Yes Yes Yes
N2340 __func__ Yes Yes Yes Yes Yes Yes
N1988 Extended 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.
  3. On Linux or Mac OS X: 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 Mac OS X) is still supported. It is the same as /Qstd=c++11(-std=c++11 on Linux or Mac OS X).
    Please read the documentation for detail information under /Qstd (-std on Linux* or Mac OS* X) 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. C99 Support in Intel C++ Compiler article for supported C99 features.
  3. C++11 FAQ by Bjarne Stroustrup
  4. C++11 Features Supported in Microsoft Visual Studio* 2012/2013
  5. C++11 Features Supported in GNU* gcc
For more complete information about compiler optimizations, see our Optimization Notice.

Comments

Hi gg

Hi gg

Below is a test case I used to reproduce the issue your reported but I didn't see any problem. Could you please check the below test case and see if this models your test case. Are you using this computation inside any lambda function in specific which demands the compiler option -std=c++11. Please share more details on the specifics of your test case.

$ cat testarr.cc
#include<iostream>
#define SIZE 100
using namespace std;
int main(){
        float a[100], b[100];
        int size = SIZE;
        a[:] = 0;
        b[:] = __sec_implicit_index(0);
        a[0:size] = b[0:size]*13;
        for(int i = 0; i < size; i++)
                cout<<a[i]<<"\n";
        return 0;
}

$ icc -V
Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 13.1.2.183 Build 20130514
Copyright (C) 1985-2013 Intel Corporation.  All rights reserved.

$ icpc -std=c++11 testarr.cc -vec-report2 -o testarr
testarr.cc(7): (col. 2) remark: LOOP WAS VECTORIZED.
testarr.cc(8): (col. 9) remark: LOOP WAS VECTORIZED.
testarr.cc(9): (col. 6) remark: LOOP WAS VECTORIZED.
testarr.cc(10): (col. 2) remark: loop was not vectorized: existence of vector dependence.

$ ./testarr
0
13
26
39
52
65
78
91
104
117
130
143
156
169
182
195
208
221
234
247
260
273
286
299
312
325
338
351
364
377
390
403
416
429
442
455
468
481
494
507
520
533
546
559
572
585
598
611
624
637
650
663
676
689
702
715
728
741
754
767
780
793
806
819
832
845
858
871
884
897
910
923
936
949
962
975
988
1001
1014
1027
1040
1053
1066
1079
1092
1105
1118
1131
1144
1157
1170
1183
1196
1209
1222
1235
1248
1261
1274
1287

Thanks and Regards
Anoop



hello,

hello,

I have a c++ code with array cilk notations:

(A[0:size] = B[0:size]*13 ),

It is possible that this notation don't runs with "-std=c++11" option?

With that option my arrays are filled with nan and without are correct.

thanks a lot!!

gg

 




What about using Base::Base

What about using Base::Base constructors feature?

This thing is very useful in generic programming, when you want to inherit from the template parameter class. Like this:
 

template <class B>
class SomeRole : public B
{
public:
    using B::B;
    // ...
};

Of course you can use a new feature with a variable number of template parameters

template <class B>
class SomeRole : public B
{
public:
    template <class... Args>
    SomeRole(Args... args) : B(args...) {}
    // ...
};

but use using for constructors is very attractive sugar.




Is there a beta version 14 of

Is there a beta version 14 of Intel C++ Compiler available for evaluation purposes?

I am currently evaluating version 13 of Intel Composer 2013 on Windows 7 (x64) platform to compile our software written in C++11 and it does not compile. On the Linux platform, we use GNU C++ compiler with ease.

Most of the C++11 features are supported only in version 14 of the Intel c++ compiler per table above and hence the question. Thanks for your time.



Pages