MISRA C++:2008 Rule 14-6-2
The function chosen by overload resolution shall resolve to a function declared previously in the translation unit.
説明
ルール定義
The function chosen by overload resolution shall resolve to a function declared previously in the translation unit. 1
根拠
一般的に、関数は宣言せずに呼び出すことはできないため、関数呼び出しは事前に宣言された関数に解決されるものと想定されます。ただし、テンプレート内での関数呼び出しのオーバーロード解決の場合は、この想定が満たされません。このオーバーロードの解決は、テンプレートの定義時点ではなく、テンプレートのインスタンス化時点で行われます。そのため、呼び出しは、テンプレート定義の "後" で宣言された関数に解決される可能性があり、予期せぬ結果につながります。以下の例を参照してください。
関数呼び出しが "常に" 事前に宣言された関数に解決されるという想定を満たすには、関数のオーバーロードを宣言してから、その関数を呼び出します。あるいは、スコープ解決演算子 :: または小かっこを使用して、特定の事前に宣言された関数を明示的に呼び出し、オーバーロード解決メカニズムをバイパスします。
Polyspace 実装
チェッカーは、関数または演算子がテンプレート定義の "後" で宣言されている場合に関数テンプレート定義内の関数または演算子に対する呼び出しにフラグを設定します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Templates |
| カテゴリ: 必要 |
バージョン履歴
R2013b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.