AUTOSAR C++14 Rule A15-4-3
The noexcept specification of a function shall either be identical across all translation units, or identical or more restrictive between a virtual member function and an overrider
説明
ルール定義
The noexcept specification of a function shall either be identical across all translation units, or identical or more restrictive between a virtual member function and an overrider.
根拠
翻訳単位は、コンパイラがコンパイルする別のソース ファイルです。関数に別のソース ファイル内の別の例外指定が含まれている場合は、未定義動作を引き起こす可能性があります。同様に、クラス階層のレベルによって多相型関数の例外指定が異なる場合も、コンパイル エラーにつながる可能性があります。使用しているソフトウェアとハードウェアによっては、場所によって関数の例外指定が異なるために、コンパイル エラーを引き起こしたり、セキュリティの脆弱性につながる未定義動作が発生したりする可能性があります。
未定義動作とセキュリティの脆弱性を回避するには:
関数のすべての宣言で同じ例外指定を維持します。
noexceptまたはnoexcept(true)を例外指定として使用してバーチャル関数を宣言した場合は、同じ指定を使用して派生クラスでオーバーライダー関数を宣言します。noexcept(false)を例外指定として使用してバーチャル関数を宣言した場合は、noexcept(false)とnoexcept(true)のどちらかを例外指定として使用して派生クラスでオーバーライダー関数を宣言します。
Polyspace 実装
Polyspace® は、関数がファイル内の別の場所にある異なる例外指定を使用して宣言された場合にその関数の例外指定にフラグを設定します。基底クラス内のバーチャル関数が noexcept として指定されており、かつ派生クラス内のオーバーライダー関数が noexcept(fale) として指定される場合に、Polyspace はその派生クラス内のオーバーライダー関数にフラグを設定します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Exception handling |
| カテゴリ: Required、Automated |
バージョン履歴
R2020b で導入