インテル® C++ コンパイラーでサポートされる C++11 の機能

インテル® DPC++/C++ コンパイラー

この記事は、インテル® デベロッパー・ゾーンに掲載されている「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
Update 6
または 12.1

V13.0

V14.0*1

V15.0*1
および
それ以降

N1610

Rvalue によるクラスオブジェクトの初期化(Initialization of class objects by rvalues)

Yes

Yes

Yes

Yes

Yes

Yes

N1720

静的チェック(static_assert)

Yes

Yes

Yes

Yes

Yes

Yes

N1737

auto 型の複数宣言子(Multi-declarator auto)

Yes

Yes

Yes

Yes

Yes

N1757

連続した右角括弧(Right angle brackets)

Yes

Yes

Yes

Yes

Yes

Yes

N1791

拡張 friend 宣言(Extended friend declarations)

一部

Yes

Yes

Yes

Yes

Yes

N1984

auto: 初期化式から変数の型を推測 (auto: Deducing the type of variable from its initializer expression)

Yes

Yes

Yes

Yes

Yes

N1986

デリゲート・コンストラクター (Delegating constructors)

Yes

Yes

N1987

extern テンプレート (Extern templates)

Yes

Yes

Yes

Yes

Yes

Yes

N2118

Rvalue の参照 (Rvalues references)

Yes

Yes

Yes

Yes

Yes

N2170

リテラル内のユニバーサル文字列名 (Universal character names in literals)

Yes

Yes

Yes

Yes

N2235

一般化された定数式 (Generalized constant expressions)

一部

Yes

Yes

N2242

可変個引数テンプレート v0.9 (variadic templates v0.9)

Yes

Yes

Yes

Yes

N2249

char16_t/char32_t 型 (char16_t/char32_t types)

Windows で一部。Linux と Mac OS X では Yes

Windows で一部。Linux と Mac OS X では Yes

Yes

Yes

N2253

拡張 sizeof (Extended sizeof)

Yes

Yes

N2258

エイリアス・テンプレート (alias templates)

Yes

Yes

Yes

Yes

N2341

アライメント: C++ プログラミング言語へのアライメント追加サポート (Alignment: Adding Alignment Support to the C++)

Yes

N2342

標準レイアウトと trival 型 (Standard-layout and trivial types)

Yes

Yes

N2343

Decltype 型指定子1.0 (decltype v1.0)

Yes

Yes

Yes

Yes

Yes

N2346

delete 関数とデフォルト関数 (deleted and defaulted functions)

Yes

Yes

Yes

Yes

Yes

N2347

暗黙の列挙型ベースとスコープ列挙型 (Explicit enum bases and scoped enums)

Yes

Yes

Yes

N2347

強い型つけの列挙型 (Strongly typed enums)

一部

一部

一部

一部

Yes

Yes

N2431

ヌルポインター (nullptr)

Yes

Yes

Yes

Yes

N2437

明示的な変換演算子 (Explicit conversion operators)

Yes

Yes

Yes

N2439

*this のための rvalue 参照 (Rvalue references for *this)

Yes

Yes

N2442

Raw 文字列 (Raw string literals)

Yes

Yes

N2535

Inline namespaces

Yes

Yes

N2540

コンストラクターの継承 (Inheriting constructors)

Yes

N2541

auto: 末尾戻り型 (auto: Trailing return types)

Yes

Yes

Yes

Yes

Yes

N2541

後置する戻り値 (Late-specified return types)

Yes

Yes

Yes

Yes

N2544

無制限の共用体 (Unrestricted unions)

Linux* & OS X* でサポート

Linux* & OS X* でサポート

N2546

auto 1.0: 記憶域クラス指定子としての auto の排除 (auto v1.0: Removal of auto as a storage-class specifier)

Yes

Yes

Yes

Yes

Yes

N2550

ラムダ v0.9: ラムダ式とクロージャー (Lambdas v0.9: Lambda Expressions and Closures)

Yes

Yes

Yes

Yes

Yes

N2555

可変個引数テンプレート v1.0 (variadic templates v1.0)

Yes

Yes

Yes

Yes

N2634

新しい表現スタイルの SFINAE (New-style Expression SFINAE (N2634))

Yes

Yes

Yes

Yes

N2657

テンプレート引数としてのローカル型と無名型 (Local and unnamed types as template arguments)

Yes

Yes

Yes

Yes

Yes

N2658

ラムダ v1.0:ラムダ関数の const 状態 (Lambdas v1.0: Constness of Lambda Functions)

Yes

Yes

Yes

Yes

Yes

N2670

ガベージコレクションの最小サポート (Minimal support for garbage collection)

Windows * でサポート

N2672

一般的な初期化子のリスト (General initializer lists)

一部

Yes

Yes

N2756

非スタティック・データ・メンバーの初期化子 (Non-static data member initializers)

Yes

Yes

N2761

標準属性 (Standard attributes (N2761))

Yes

Yes

Yes

Yes

N2764

列挙型の先行宣言 (Forward declared enums)

一部

一部

一部

一部

Yes

Yes

N2765

ユーザー定義リテラル (User-defined literals)

Yes

N2844

Rvalue 参照v2 (Rvalue references v2)

Yes

Yes

Yes

Yes

Yes

N2927

ラムダ v1.1: C++0x ラムダの新しい呼称 (Lambdas v1.1: New wording for C++0x Lambdas)

Yes

Yes

Yes

Yes

Yes

N2928

明示的な仮想関数オーバーライド (Explicit Virtual Overrides)

Yes

Yes

N2930

範囲に基づく for ループ (Range-based for loops)

Yes

Yes

Yes

N2947

追加の型特性 (Additional type traits)

Yes

Yes

Yes

N3050

noexcept もしくはムーブ・コンストラクターがスローするのを許可する (noexcept or Allowing move constructors to throw)

Yes

Yes

N3052

ラムダから関数ポインターへの暗黙の変換 (Conversions of lambdas to function pointers)

Yes

Yes

Yes

N3053

RValue: 移動用の特殊なメンバー関数の定義 (RValues: Defining Move Special Member Functions)

Yes

Yes

N3206

明示的な仮想関数オーバーライド -> オーバーライド制御: 属性を排除 (Explicit virtual overrides -> Override control: Eliminating Attributes)

Yes

Yes

N3272

override と final (override and final)

Yes

Yes

N3276

decltype v1.1 : decltype と呼び出し式 (decltype v1.1: Decltype and Call Expressions)

Yes

Yes

Yes

Yes

Yes

Core issue 382

テンプレート外部での typename の許可 (Allow typename outside of templates)

Yes

Yes

Yes

Yes

Yes

DR226

関数テンプレート用のデフォルトのテンプレート引数 (Default template arguments for function templates)

Yes

Yes

Yes

Yes

コア言語機能:コンカレンシー

N2179

exception_ptr

Yes

Yes

Yes

Yes

Yes

N2239

リワードされたシーケンスポイント (Reworded sequence points)

Yes

N2440

quick_exit

Linux* & OS X* でサポート

N2427

アトミック型と操作 (atomic types and operations)

Yes

Yes

Yes

N2429

メモリーモデル (Memory model)

Linux* & OS X* でサポート

N2547

シグナル・ハンドラー内のアトミック (Atomics in signal handlers)

Linux* & OS X* でサポート

N2659

スレッド・ローカル・ストレージ (Thread-local storage)

Linux* & OS X* でサポート

N2660

マジック・スタティック (Magic statics)

Linux* & OS X* でサポート

Linux* & OS X* でサポート

Linux* & OS X* でサポート

Linux* & OS X* でサポート

Linux* & OS X* でサポート

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

コア言語機能:C99 (Core Language Features: C99)

N1653

C99 プリプロセッサー (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)

Linux* & OS X* でサポート

  1. Linux* では、完全な C++11 のサポートには gcc 4.8 以降の環境が必要です。
  2. Windows 環境で、Visual Studio* 2010 もしくは 2012 とともにインテル® C++ コンパイラーを利用する場合、C++11 の機能は Visual Studio 2012 でサポートされる機能がデフォルトとして有効になります。すべての機能を有効にするには、”/Qstd=c++11” オプションを使用してください。
  3. Linux と Mac OS X 環境では、 “-std=c++11″ オプションを使用します。
  4. /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) の詳細については、製品ドキュメントを参照してください。
  5. インテル® メニー・インテグレーテッド・コア・アーキテクチャー (インテル® 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 をサポートしていません。

関連記事

  1. C99 の機能に関しては、「インテル® C++ コンパイラーでサポートされる C99 の機能」を参照ください。
  2. C++14 の機能に関しては、「インテル® C++ コンパイラーでサポートされる C++14 の機能」を参照ください。
  3. C++17 の機能に関しては、「インテル® C++ コンパイラーでサポートされる C++17 の機能」を参照ください。
  4. C++11 のよくある問い合わせ
  5. Microsoft* Visual Studio* 2012/2013 における C++11 の機能サポート
  6. GNU* gcc における C++11 の機能サポート


コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました