この記事は、インテル® デベロッパー・ゾーンに掲載されている「C++11 Features Supported by Intel® C++ Compiler」(http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler) の日本語参考訳です。
バージョン 11.0 以降のインテル® C++ コンパイラーは、C++11 (以前は C++0x と呼ばれていました) の機能のいくつかをサポートしてきました。Windows*、Linux* そして Mac OS* X 版の 2013 SP1 (2013年 9 月リリース) 以降では、さらに C++11 の機能がサポートされています。この記事では、各バージョン間でサポートされる C++11 の機能一覧を紹介します。
標準化# |
言語機能 |
V11.1 |
V12.0 |
V12.0 |
V13.0 |
V14.0*1 |
V15.0*1 |
---|---|---|---|---|---|---|---|
Rvalue によるクラスオブジェクトの初期化(Initialization of class objects by rvalues) |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
静的チェック(static_assert) |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
auto 型の複数宣言子(Multi-declarator auto) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
連続した右角括弧(Right angle brackets) |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
拡張 friend 宣言(Extended friend declarations) |
一部 |
Yes |
Yes |
Yes |
Yes |
Yes |
|
auto: 初期化式から変数の型を推測 (auto: Deducing the type of variable from its initializer expression) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
デリゲート・コンストラクター (Delegating constructors) |
– |
– |
– |
– |
Yes |
Yes |
|
extern テンプレート (Extern templates) |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
Rvalue の参照 (Rvalues references) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
リテラル内のユニバーサル文字列名 (Universal character names in literals) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
一般化された定数式 (Generalized constant expressions) |
– |
– |
– |
一部 |
Yes |
Yes |
|
可変個引数テンプレート v0.9 (variadic templates v0.9) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
char16_t/char32_t 型 (char16_t/char32_t types) |
– |
– |
Windows で一部。Linux と Mac OS X では Yes |
Windows で一部。Linux と Mac OS X では Yes |
Yes |
Yes |
|
拡張 sizeof (Extended sizeof) |
– |
– |
– |
– |
Yes |
Yes |
|
エイリアス・テンプレート (alias templates) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
アライメント: C++ プログラミング言語へのアライメント追加サポート (Alignment: Adding Alignment Support to the C++) |
– |
– |
– |
– |
– |
Yes |
|
標準レイアウトと trival 型 (Standard-layout and trivial types) |
– |
– |
– |
– |
Yes |
Yes |
|
Decltype 型指定子1.0 (decltype v1.0) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
delete 関数とデフォルト関数 (deleted and defaulted functions) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
暗黙の列挙型ベースとスコープ列挙型 (Explicit enum bases and scoped enums) |
– |
– |
– |
Yes |
Yes |
Yes |
|
強い型つけの列挙型 (Strongly typed enums) |
一部 |
一部 |
一部 |
一部 |
Yes |
Yes |
|
ヌルポインター (nullptr) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
明示的な変換演算子 (Explicit conversion operators) |
– |
– |
– |
Yes |
Yes |
Yes |
|
*this のための rvalue 参照 (Rvalue references for *this) |
– |
– |
– |
– |
Yes |
Yes |
|
Raw 文字列 (Raw string literals) |
– |
– |
– |
– |
Yes |
Yes |
|
Inline namespaces |
– |
– |
– |
– |
Yes |
Yes |
|
コンストラクターの継承 (Inheriting constructors) |
– |
– |
– |
– |
– |
Yes |
|
auto: 末尾戻り型 (auto: Trailing return types) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
後置する戻り値 (Late-specified return types) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
無制限の共用体 (Unrestricted unions) |
– |
– |
– |
– |
Linux* & OS X* でサポート |
Linux* & OS X* でサポート |
|
auto 1.0: 記憶域クラス指定子としての auto の排除 (auto v1.0: Removal of auto as a storage-class specifier) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
ラムダ v0.9: ラムダ式とクロージャー (Lambdas v0.9: Lambda Expressions and Closures) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
可変個引数テンプレート v1.0 (variadic templates v1.0) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
新しい表現スタイルの SFINAE (New-style Expression SFINAE (N2634)) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
テンプレート引数としてのローカル型と無名型 (Local and unnamed types as template arguments) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
ラムダ v1.0:ラムダ関数の const 状態 (Lambdas v1.0: Constness of Lambda Functions) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
ガベージコレクションの最小サポート (Minimal support for garbage collection) |
– |
– |
– |
– |
– |
Windows * でサポート |
|
一般的な初期化子のリスト (General initializer lists) |
– |
– |
– |
一部 |
Yes |
Yes |
|
非スタティック・データ・メンバーの初期化子 (Non-static data member initializers) |
– |
– |
– |
– |
Yes |
Yes |
|
標準属性 (Standard attributes (N2761)) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
列挙型の先行宣言 (Forward declared enums) |
一部 |
一部 |
一部 |
一部 |
Yes |
Yes |
|
ユーザー定義リテラル (User-defined literals) |
– |
– |
– |
– |
– |
Yes |
|
Rvalue 参照v2 (Rvalue references v2) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
ラムダ v1.1: C++0x ラムダの新しい呼称 (Lambdas v1.1: New wording for C++0x Lambdas) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
明示的な仮想関数オーバーライド (Explicit Virtual Overrides) |
– |
– |
– |
– |
Yes |
Yes |
|
範囲に基づく for ループ (Range-based for loops) |
– |
– |
– |
Yes |
Yes |
Yes |
|
追加の型特性 (Additional type traits) |
– |
– |
– |
Yes |
Yes |
Yes |
|
noexcept もしくはムーブ・コンストラクターがスローするのを許可する (noexcept or Allowing move constructors to throw) |
– |
– |
– |
– |
Yes |
Yes |
|
ラムダから関数ポインターへの暗黙の変換 (Conversions of lambdas to function pointers) |
– |
– |
– |
Yes |
Yes |
Yes |
|
RValue: 移動用の特殊なメンバー関数の定義 (RValues: Defining Move Special Member Functions) |
– |
– |
– |
– |
Yes |
Yes |
|
明示的な仮想関数オーバーライド -> オーバーライド制御: 属性を排除 (Explicit virtual overrides -> Override control: Eliminating Attributes) |
– |
– |
– |
– |
Yes |
Yes |
|
override と final (override and final) |
– |
– |
– |
– |
Yes |
Yes |
|
decltype v1.1 : decltype と呼び出し式 (decltype v1.1: Decltype and Call Expressions) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
テンプレート外部での typename の許可 (Allow typename outside of templates) |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
関数テンプレート用のデフォルトのテンプレート引数 (Default template arguments for function templates) |
– |
– |
Yes |
Yes |
Yes |
Yes |
|
コア言語機能:コンカレンシー |
|||||||
exception_ptr |
– |
Yes |
Yes |
Yes |
Yes |
Yes |
|
リワードされたシーケンスポイント (Reworded sequence points) |
– |
– |
– |
– |
– |
Yes |
|
quick_exit |
– |
– |
– |
– |
– |
Linux* & OS X* でサポート |
|
アトミック型と操作 (atomic types and operations) |
– |
– |
– |
Yes |
Yes |
Yes |
|
メモリーモデル (Memory model) |
– |
– |
– |
– |
– |
Linux* & OS X* でサポート |
|
シグナル・ハンドラー内のアトミック (Atomics in signal handlers) |
– |
– |
– |
– |
– |
Linux* & OS X* でサポート |
|
スレッド・ローカル・ストレージ (Thread-local storage) |
– |
– |
– |
– |
– |
Linux* & OS X* でサポート |
|
マジック・スタティック (Magic statics) |
Linux* & OS X* でサポート |
Linux* & OS X* でサポート |
Linux* & OS X* でサポート |
Linux* & OS X* でサポート |
Linux* & OS X* でサポート |
Linux* & OS X* でサポート |
|
データ依存オーダー (Data-dependency ordering) |
– |
– |
– |
– |
– |
– |
|
強い比較と入れ換え (Strong compare and exchange) |
– |
– |
– |
Yes |
Yes |
Yes |
|
双方向フェンス (Bidirectional fences) |
– |
– |
– |
Yes |
Yes |
Yes |
|
データ依存オーダー: 関数アノテーション (Data-dependency ordering: function annotation) |
– |
– |
– |
– |
– |
Yes |
|
コア言語機能:C99 (Core Language Features: C99) |
|||||||
C99 プリプロセッサー (C99 preprocessor) |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
long long |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
__func__ |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
|
拡張整数型 (Extended integer types) |
– |
– |
– |
– |
– |
Linux* & OS X* でサポート |
- Linux* では、完全な C++11 のサポートには gcc 4.8 以降の環境が必要です。
- Windows 環境で、Visual Studio* 2010 もしくは 2012 とともにインテル® C++ コンパイラーを利用する場合、C++11 の機能は Visual Studio 2012 でサポートされる機能がデフォルトとして有効になります。すべての機能を有効にするには、”/Qstd=c++11” オプションを使用してください。
- Linux と Mac OS X 環境では、 “-std=c++11″ オプションを使用します。
- /Qstd=c++0x (Linux と Mac OS X では、-std=c++0x ) オプションは、まだ利用できます。/Qstd=c++11 (Linuxと Mac OS X では、-std=c++11) と同じ意味を持ちます。/Qstd (Linux* と Mac OS* X では、-std) の詳細については、製品ドキュメントを参照してください。
-
インテル® メニー・インテグレーテッド・コア・アーキテクチャー (インテル® MIC) 向けにアプリケーションをビルドする場合
- Linux 環境:利用できる言語機能は、インストールされている gcc* のバージョンに依存します。インテル® メニーコア・プラットフォーム・ソフトウェア・スタック (インテル® MPSS) ディストリビューションの一部として提供されるインテル® MIC アーキテクチャー上の gcc コンパイラー、ヘッダーファイル、そしてライブラリーは、実験版の gcc 4.7.0 です。このバージョンは、最終版の gcc 4.7.0 にあるいくつかの機能がサポートされていません。例えば、実験版の gcc は、allocator_traits をサポートしていません。
- Windows 環境:インテル® メニーコア・プラットフォーム・ソフトウェア・スタック (インテル® MPSS) ディストリビューションの一部として提供されるインテル® MIC アーキテクチャー上の gcc コンパイラー、ヘッダーファイル、そしてライブラリーは、実験版の gcc 4.7.0 です。このバージョンは、最終版の gcc 4.7.0 にあるいくつかの機能がサポートされていません。例えば、実験版の gcc は、allocator_traits をサポートしていません。
関連記事
- C99 の機能に関しては、「インテル® C++ コンパイラーでサポートされる C99 の機能」を参照ください。
- C++14 の機能に関しては、「インテル® C++ コンパイラーでサポートされる C++14 の機能」を参照ください。
- C++17 の機能に関しては、「インテル® C++ コンパイラーでサポートされる C++17 の機能」を参照ください。
- C++11 のよくある問い合わせ
- Microsoft* Visual Studio* 2012/2013 における C++11 の機能サポート
- GNU* gcc における C++11 の機能サポート
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。