Polyspace でサポートされる C++17 言語の要素
次の表には、C++17 以降に導入された C++ 言語の要素と、対応する Polyspace® サポートの部分的なリストを示しています。サポートされていない設定がコードに含まれている場合、Polyspace ではコンパイル エラーがレポートされます。
| C++17 標準参照 | 説明 | サポートあり |
|---|---|---|
| C++2017-N3921 | std::string-view:リソースを所有せずに std::string オブジェクトの内容を参照する | はい |
| C++2017-N3922 |
| はい |
| C++2017-N3928 | static_assert 宣言は第 2 引数を必要としなくなりました。次のようなメッセージなしの static_assert 呼び出しが許可されるようになりました。static_assert(N > 0); | はい |
| C++2017-N4051 | C++ が、引数としてテンプレートを取るテンプレートなど、 template <template <typename> typename Tmpl> struct X; | はい |
| C++2017-N4086 | C++17 以降、3 文字表記はサポートされなくなりました。 | いいえ |
| C++2017-N4230 | C++17 以降、複数の入れ子になった名前空間を一度に定義するには、名前空間定義で修飾名を使用します。たとえば、次のコードの抜粋は等価です。
| はい |
| C++2017-N4259 | C++17 で関数 std::uncaught_exceptions が導入されました。これにより、コード内で処理されなかった例外の数が返されます。ブール値を返す関数 std:uncaught_exception は廃止されました。 | はい |
| C++2017-N4266 | C++17 以降、名前空間と列挙子に属性で注釈を付けることにより、開発者の意図をより明確に伝達できるようになりました。 | はい |
| C++2017-N4267 | C++17 以降、接頭辞 u8 がサポートされるようになりました。この接頭辞は UTF-8 文字リテラルを作成します。コード ポイント値が C0 制御文字および基本ラテン文字 Unicode ブロックにある場合、UTF-8 文字リテラルの値は ISO 10646 コード ポイント値と等価です。 | はい |
| C++2017-N4268 | 非型テンプレート引数の定数評価を使用できます。 | はい |
| C++2017-N4295 | 畳み込み式が使用可能 | はい |
| C++2017-N4508 | タイムアウトのない std::shared_mutex が使用可能 | std::shared_mutex を使用してもコンパイル エラーは発生しません。Polyspace は std::shared_mutex を使用する共有ミューテックス オブジェクトをサポートしません。 |
| C++2017-P0001R1 | register キーワードの使用を停止 | はい |
| C++2017-P0002R1 | operator++(bool) を削除 | はい |
| C++2017-P0003R5 | 廃止された throw(<>) を使用した例外指定を削除 | Bug Finder では、throw() ステートメントを使用して指定される例外指定が削除されました。Code Prover では、throw() ステートメントが C++17 コードに存在するとコンパイル エラーが発生します。 |
| C++2017-P0012R1 | 例外指定が型システムの一部になった | はい |
| C++2017-P0017R1 | クラスの初期化が基底クラスと統合 | はい |
| C++2017-P0018R3 | ラムダ式でポインター *this のキャプチャが使用可能 | はい |
| C++2017-P0024R2 | 並列性拡張のための C++ 技術仕様の標準化 | Polyspace は、Visual 15.x および Intel C++ 18.0 の各コンパイラを使用している場合にこの機能をサポートします。 |
| C++2017-P002842 | 反復なしの属性名前空間の使用 | はい |
| C++2017-P0035R4 | オーバーアライン データに対する動的メモリ割り当て | はい |
| C++2017-P0036R0 | 単項の畳み込み式と空のパラメーター パック | はい |
| C++2017-P0061R1 | プリプロセッサの条件での __has_include の使用 | はい |
| C++2017-P0067R5 | 基本的な文字列変換 | いいえ |
| C++2017-P0083R3 | マップとセットの挿入 | Polyspace では、使用しているコンパイラもこの機能をサポートしている場合にこの機能をサポートします。たとえば、コンパイラに g++ を使用している場合、Polyspace はこの機能をサポートします。 |
| C++2017-P0088R3 | std::variant | 部分的にサポート。 |
| C++2017-P0091R3 | クラス テンプレートでのテンプレート引数推測 | 部分的にサポート。 |
| C++2017-P0127R2 | auto 型の非型テンプレート パラメーター | はい |
| C++2017-P0135R1 | コピー省略の保証 | 部分的にサポート。 |
| C++2017-P0136R1 | 継承コンストラクターの新仕様 | いいえ |
| C++2017-P0137R1 | 参照メンバーを含むクラス オブジェクトの置き換え | はい |
| C++2017-P0138R2 | 列挙型の直接リスト初期化 | はい |
| C++2017-P0145R3 | 厳密な式の評価順 | 新しい構文やキーワードは導入されていないため、C++17 に対する Polyspace サポートには影響しません。 |
| C++2017-P0154R1 | ハードウェア干渉サイズ | Visual Studio コンパイラでサポート |
| C++2017-P0170R1 | constexpr ラムダ式 | 部分的にサポート |
| C++2017-P018R0 | 範囲ベース for ループでの begin と end の型の不一致 | はい |
| C++2017-P0188R1 | [[fallthrough]] 属性 | はい |
| C++2017-P0189R1 | [[nodiscard]] 属性 | はい |
| C++2017-P0195R2 | using 宣言でのパック展開 | はい |
| C++2017-P0212R1 | [[maybe_unused]] 属性 | はい |
| C++2017-P0217R3 | 構造化バインディング | Polyspace では、rvalue を使用することによるバインディングをサポートしません。 |
| C++2017-P0218R1 | std::filesystem | いいえ |
| C++2017-P0220R1 | std::any | はい |
| C++2017-P0220R1 | std::optional | Bug Finder では構文をサポートします。セマンティクスは部分的にサポートされます。Code Prover ではこの機能はサポートされていません。 |
| C++2017-P0226R1 | 数学の特殊関数 | いいえ |
| C++2017-P0245R1 | 16 進浮動小数点リテラル | はい |
| C++2017-P0283R2 | 不明な属性の無視 | はい |
| C++2017-P0292R2 | constexpr if ステートメント | はい |
| C++2017-P0298R3 | std::byte | はい |
| C++2017-P0305R1 | if と switch の初期化ステートメント | はい |
| C++2017-P0386R2 | インライン変数 | いいえ |
| C++2017-P0522R0 | テンプレート template-argument が template-parameter に対して有効な一致である場合の呼び出し決定の部分的な順序付け | 部分的にサポート |