この記事は、インテル® デベロッパー・ゾーンに掲載されている「C++17 Features Supported by Intel® C++ Compiler」の日本語参考訳です。
標準化# | 言語機能 | V11.0-16.0 | V17.0 | V18.0 | V19.0 | V19.1.0 |
N3928 (英語) | メッセージなしの static_assert (static_assert with no message) |
No | No | Yes | Yes | Yes |
N4086 (英語) | デフォルトでトライグラフ拡張を無効化 (Disabling trigraph expansion by default) |
No | No | No | No | No |
N4051 (英語) | テンプレート・テンプレート引数の typename (typename in a template template parameter) |
No | Yes | Yes | Yes | Yes |
N3922 (英語) | 直接初期化の新しい auto 規則 (New auto rules for direct-list-initialization) |
No | Yes | Yes | Yes | Yes |
N4295 (英語) | 畳み込み式 (Fold expressions) |
No | No | No | Yes | Yes |
N4267 (英語) | UTF8 文字リテラル (u8 character literals) |
No | Yes | Yes | Yes | Yes |
N4230 (英語) | 入れ子になった namespace の定義 (Nested namespace definition) |
No | Yes | Yes | Yes | Yes |
N4266 (英語) | 名前空間と列挙子の属性 (Attributes for namespaces and enumerators) |
No | Yes | Yes | Yes | Yes |
N4268 (英語) | すべての非型テンプレート・パラメーターの定数評価 (Allow constant evaluation for all non-type template arguments) |
No | No | No | No | Yes |
P0001R1 (英語) | 非推奨であった register ストレージクラスを削除 (Remove deprecated register storage class) |
No | No | Yes | Yes | Yes |
P0002R1 (英語) | 非推奨であった bool 型のインクリメントを削除 (Remove deprecated bool increment) |
No | No | Yes | Yes | Yes |
P0012R1 (英語) | 例外仕様を型システムの一部にする (Make exception specifications part of the type system) |
No | No | Yes | Yes | Yes |
P0061R1 (英語) | プリプロセッサー条件の __has_include (__has_include in preprocessor conditionals) |
No | No | Yes | Yes | Yes |
P0188R1 (英語) | [[fallthrough]] 属性 ([[fallthrough]] attribute) |
No | No | Yes | Yes | Yes |
P0189R1 (英語) | [[nodiscard]] 属性 ([[nodiscard]] attribute) |
No | No | Yes | Yes | Yes |
P0212R1 (英語) | [[maybe_unused]] 属性 ([[maybe_unused]] attribute) |
No | No | Yes | Yes | Yes |
P0184R0 (英語) | 範囲指定ベースのループ (Generalizing the Range-Based For Loop) |
No | No | Yes | Yes | Yes |
P0138R2 (英語) | 列挙型の直接リスト初期化 (Direct-list-initialization of enums) |
No | No | Yes | Yes | Yes |
P0245R1 (英語) | 16 進浮動小数点リテラル (Hexadecimal floating-point literals) |
No | No | Yes | Yes | Yes |
P0028R4 (英語) | 繰り返しなしの名前空間属性の使用 (Using attribute namespaces without repetition) |
No | No | Yes | Yes | Yes |
P0283R2 (英語) | 不明な属性の無視 (Requirement to ignore unknown attributes) |
No | No | Yes | Yes | Yes |
P0217R3 (英語) | 構造体のバインド (Structured bindings) |
No | No | Yes | Yes | Yes |
P0305R1 (英語) | if 文と switch 文の変数と条件を分離 (Separate variable and condition for if and switch) |
No | No | Yes | Yes | Yes |
P0386R2 (英語) | インライン変数 (Inline Variable) |
No | No | No | Yes | Yes |
P0138R2 (英語) | 列挙型クラスの構文規則 (Construction rules for enum classes) |
No | No | No | Yes | Yes |
P0003R5 (英語) | 廃止予定の動的例外仕様の削除 (Removing deprecated dynamic exception specifications) |
No | No | No | Yes | Yes |
P0170R1 (英語) | constexpr ラムダ式 (constexpr lambda expressions) |
No | No | No | Yes | Yes |
P0018R3 (英語) | *this のラムダキャプチャー (Lambda capture of *this) |
No | No | No | Yes | Yes |
P0292R2 (英語) | if constexpr 文 (constexpr if-statements) |
No | No | No | Yes | Yes |
P0522R0 (英語) | テンプレート・パラメーターと互換性のある引数のマッチング (Matching template parameters to compatible arguments) |
No | No | No | No | Yes |
P0145R3 (英語) | 式の評価順序の調整 (Stricter expression evaluation order) |
No | No | No | No | Yes |
P0135R1 (英語) | コピー省略保証 (Guaranteed copy elision) |
No | No | No | No | Yes |
P0127R2 (英語) | auto による非型テンプレート・パラメーター宣言 (Non-type template parameters with auto type) |
No | No | No | No | Yes |
P0091R3 (英語) | クラス・テンプレートのテンプレート引数の推論 (Template argument deduction for class templates) |
No | No | No | No | Yes |
P0017R1 (英語) | 基本クラスを持つクラスの集約初期化 (Aggregate initialization of classes with base classes) |
No | No | No | No | Yes |
P0136R1 (英語) | コンストラクター継承の新仕様 (New specification for inheriting constructors (DR1941 et al)) |
No | No | No | No | No |
P0195R2 (英語) | using 宣言のパック展開 (Pack expansions in using-declarations) |
No | No | No | Yes | Yes |
P0091R3 (英語) | クラス・テンプレートのテンプレート引数推論 (Template argument deduction for class templates) |
No | No | No | No | Yes |
P0035R4 (英語) | コンストラクター継承の新仕様 (アライメント指定されたデータの動的メモリー割り当て) |
No | No | No | Yes | Yes |
C++17 の機能を有効にするには、/Qstd=c++17 (Windows*)、-std=c++17 (Linux* および macOS*) オプションを使用します。
その他の関連記事:
- Clang C++ の規格サポート: http://clang.llvm.org/cxx_status.html (英語)
- Microsoft* Visual Studio* コンパイラーの C++ 規格サポート: https://docs.microsoft.com/ja-jp/cpp/visual-cpp-language-conformance
- インテル® コンパイラー の C++11 サポート状況: https://www.isus.jp/products/c-compilers/c0x-features-supported-by-intel-c-compiler/
- インテル® コンパイラー の C++14 サポート状況: https://www.isus.jp/products/c-compilers/c14-features-supported-by-intel-c-compiler/
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。