AUTOSAR C++14 Rule A8-2-1
When declaring function templates, the trailing return type syntax shall be used if the return type depends on the type of parameters
説明
ルール定義
関数テンプレートの宣言時に、戻り値の型がパラメーターの型に依存する場合は、後続の戻り値の型の構文を使用するものとします。
根拠
テンプレートの戻り値の型がパラメーターの型に依存する場合は、後続の戻り値の型の構文を使用すれば、コードの可読性が大幅に向上します。
たとえば、メソッドのクラス外定義では、後続の戻り値の型の構文を使用すれば、typename キーワードと一緒に関数の完全修飾された戻り値の型を使用する必要がありません。次の例で aMethod の完全修飾された戻り値の型を明示的に指定しなくても、
template <typename T>
class aClass {
public:
using vectorType = std::vector<T>;
vectorType aMethod(T const&);
};
//Difficult-to-read method definition
//Part in bold indicates fully qualified return type of method
template <typename T>
typename aClass<T>::vectorType aClass<T>::aMethod(T const &) {
};template <typename T>
class aClass {
public:
using vectorType = std::vector<T>;
vectorType aMethod(T const&);
};
template <typename T>
auto aClass<T>::aMethod(T const &) -> vectorType {
};Polyspace 実装
チェッカーは、明示的に指定されたテンプレート関数の戻り値の型のスコープがテンプレート関数自体のスコープと一致する関数テンプレート宣言にフラグを設定します。
たとえば、前述の例で、関数 aMethod の戻り値の型は vectorType ですが、このスコープは aMethod、つまり、クラス aClass<T> のスコープと同じです。完全修飾された戻り値の型を明示的に指定する代わりに、後続の戻り値の型の構文を使用することができます。
C++14 では戻り値の型の推測が可能なため、auto キーワードを使用して汎用テンプレートを宣言することにより、後続の戻り値の型を省略できます。このような場合は、Polyspace® が違反を報告しません。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 宣言子 |
| カテゴリ: Required、Automated |
バージョン履歴
R2020a で導入