AUTOSAR C++14 Rule A7-3-1
All overloads of a function shall be visible from where it is called
説明
ルール定義
関数のすべてのオーバーロードは、呼び出し元から可視であるものとします。
根拠
関数のすべてのオーバーロードが可視になっているわけではない場合、開発者やコード レビュー担当者は、関数が呼び出されるときに誤ったオーバーロードを想定する可能性があります。たとえば、関数 validateInput() の 2 つのオーバーロードの定義の間で using が宣言されているとします。
namespace initialTests {
void validateInput(uint16_t input);
}
using initialTests::validateInput;
namespace initialTests {
void validateInput(uint32_t input); //Noncompliant
}validateInput() が呼び出されると、using の宣言の "前" に行われるオーバーロードのみが呼び出し解決のスコープに含まれることになります。ただし、開発者は両方のオーバーロードがスコープに含まれると想定し、誤ったオーバーロードを選択する可能性があります。Polyspace 実装
ルール チェッカーは、ルールの仕様で指定されている 2 つのケースのうちの 1 つでのみ、違反を報告します。
次の 2 つのイベントの "後" に名前空間内で関数が宣言されている場合、チェッカーは違反を報告します。
関数の別のオーバーロードが同じ名前空間内で既に宣言されている。
using宣言でその名前が関数呼び出しの解決に既に公開されている。
派生クラス内の関数の実装によって同じ関数の基底クラスの実装が隠されている場合、チェッカーは違反を報告しません。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 宣言 |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入