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

同カテゴリーの次の記事

インテル® Xeon® スケーラブル・プロセッサーのインテル® AVX-512 のベクトル長の拡張機能

この記事は、インテル® デベロッパー・ゾーンに掲載されている「C++17 Features Supported by Intel® C++ Compiler」の日本語参考訳です。


標準化# 言語機能 V11.0-16.0 V17.0 V18.0 V19.0
N3928 (英語) メッセージなしの static_assert
(static_assert with no message)
No No Yes Yes
N4086 (英語) デフォルトでトライグラフ拡張を無効化
(Disabling trigraph expansion by default)
No No No No
N4051 (英語) テンプレート・テンプレート引数の typename
(typename in a template template parameter)
No Yes Yes Yes
N3922 (英語) 直接初期化の新しい auto 規則
(New auto rules for direct-list-initialization)
No Yes Yes Yes
N4295 (英語) 畳み込み式
(Fold expressions)
No No No Yes
N4267 (英語) UTF8 文字リテラル
(u8 character literals)
No Yes Yes Yes
N4230 (英語) 入れ子になった namespace の定義
(Nested namespace definition)
No Yes Yes Yes
N4266 (英語) 名前空間と列挙子の属性
(Attributes for namespaces and enumerators)
No Yes Yes Yes
N4268 (英語) すべての非型テンプレート・パラメーターの定数評価
(Allow constant evaluation for all non-type template arguments)
No No No No
P0001R1 (英語) 非推奨であった register ストレージクラスを削除
(Remove deprecated register storage class)
No No Yes Yes
P0002R1 (英語) 非推奨であった bool 型のインクリメントを削除
(Remove deprecated bool increment)
No No Yes Yes
P0012R1 (英語) 例外仕様を型システムの一部にする
(Make exception specifications part of the type system)
No No Yes Yes
P0061R1 (英語) プリプロセッサー条件の __has_include
(__has_include in preprocessor conditionals)
No No Yes Yes
P0188R1 (英語) [[fallthrough]] 属性
([[fallthrough]] attribute)
No No Yes Yes
P0189R1 (英語) [[nodiscard]] 属性
([[nodiscard]] attribute)
No No Yes Yes
P0212R1 (英語) [[maybe_unused]] 属性
([[maybe_unused]] attribute)
No No Yes Yes
P0184R0 (英語) 範囲指定ベースのループ
(Generalizing the Range-Based For Loop)
No No Yes Yes
P0138R2 (英語) 列挙型の直接リスト初期化
(Direct-list-initialization of enums)
No No Yes Yes
P0245R1 (英語) 16 進浮動小数点リテラル
(Hexadecimal floating-point literals)
No No Yes Yes
P0028R4 (英語) 繰り返しなしの名前空間属性の使用
(Using attribute namespaces without repetition)
No No Yes Yes
P0283R2 (英語) 不明な属性の無視
(Requirement to ignore unknown attributes)
No No Yes Yes
P0217R3 (英語) 構造体のバインド
(Structured bindings)
No No Yes Yes
P0305R1 (英語) if 文と switch 文の変数と条件を分離
(Separate variable and condition for if and switch)
No No Yes Yes
P0386R2 (英語) インライン変数
(Inline Variable)
No No No Yes
P0138R2 (英語) 列挙型クラスの構文規則
(Construction rules for enum classes)
No No No Yes
P0003R5 (英語) 廃止予定の動的例外使用の削除
(Removing deprecated dynamic exception specifications)
No No No Yes
P0170R1 (英語) constexpr ラムダ式
(constexpr lambda expressions)
No No No Yes
P0018R3 (英語) *this のラムダキャプチャー
(Lambda capture of *this)
No No No Yes
P0292R2 (英語) if constexpr 文
(constexpr if-statements)
No No No Yes
P0522R0 (英語) テンプレート・パラメーターと互換性のある引数のマッチング
(Matching template parameters to compatible arguments)
No No No No
P0145R3 (英語) 式の評価順序の調整
(Stricter expression evaluation order)
No No No No
P0135R1 (英語) コピー省略保証
(Guaranteed copy elision)
No No No No
P0127R2 (英語) auto による非型テンプレート・パラメーター宣言
(Non-type template parameters with auto type)
No No No No
P0091R3 (英語) クラス・テンプレートのテンプレート引数の推論
(Template argument deduction for class templates)
No No No No
P0017R1 (英語) 基本クラスを持つクラスの集約初期化
(Aggregate initialization of classes with base classes)
No No No No
P0136R1 (英語) コンストラクター継承の新仕様
(New specification for inheriting constructors (DR1941 et al))
No No No No

C++17 の機能を有効にするには、/Qstd=c++17 (Windows*)、-std=c++17 (Linux* および macOS*) オプションを使用します。

その他の関連記事:

  1. Clang C++ の規格サポート: http://clang.llvm.org/cxx_status.html (英語)
  2. Microsoft* Visual Studio* コンパイラーの C++ 規格サポート: https://docs.microsoft.com/ja-jp/cpp/visual-cpp-language-conformance
  3. インテル® コンパイラー の C++11 サポート状況: https://www.isus.jp/products/c-compilers/c0x-features-supported-by-intel-c-compiler/
  4. インテル® コンパイラー の C++14 サポート状況: https://www.isus.jp/products/c-compilers/c14-features-supported-by-intel-c-compiler/

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

関連記事