メインコンテンツ

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 つのイベントの "後" に名前空間内で関数が宣言されている場合、チェッカーは違反を報告します。

    1. 関数の別のオーバーロードが同じ名前空間内で既に宣言されている。

    2. using 宣言でその名前が関数呼び出しの解決に既に公開されている。

  • 派生クラス内の関数の実装によって同じ関数の基底クラスの実装が隠されている場合、チェッカーは違反を報告しません。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include <cstdint>

namespace initialTests {
    void validateInput(uint16_t input);
}

using initialTests::validateInput;

namespace initialTests {
    void validateInput(uint32_t input); //Noncompliant
}

namespace periodicTests {
    void validateResults(uint16_t results);
    void validateResults(uint32_t results); //Compliant
}

using periodicTests::validateResults; 

void main() {
    validateInput(0U);
    validateResults(0U);
}

この例では以下のようになります。

  • 名前空間 initialTests 内の validateInput(uint32_t) の宣言は、この名前空間からの名前 validateInput が既に using 宣言で公開されているため、ルール違反になります。この validateInput() の 2 つ目の宣言は、開発者を混乱させる可能性があります。たとえば、main 内の validateInput() に対する呼び出しによって validateInput(uint16_t) が呼び出されますが、開発者は、この呼び出しにより適切な validateInput(uint32_t) が呼び出されることを想定している場合があります。

  • 名前空間 periodicTests 内の validateResults() の宣言は、両方の宣言が using ステートメントの前に出現するため、ルール違反になりません。関数 validateResults() が呼び出されると、validateResults() のすべてのオーバーロードが名前ルックアップに公開されます。開発者は、オーバーロード宣言内で validateResults() のパラメーターのみを使用して呼び出されるオーバーロードを判別できるため、混乱する可能性は低くなります。

チェック情報

グループ: 宣言
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入