AUTOSAR C++14 Rule A8-4-6
説明
ルール定義
"forward" parameters declared as T && shall always be forwarded.
根拠
rvalue 参照は lvalue にバインドできないので、関数シグネチャで rvalue 参照を使用して移動セマンティクスを使用可能にしている関数では lvalue を受け入れません。この問題は、非定数テンプレート型オブジェクトへの rvalue 参照を使用して解決されます。これは "forward" パラメーターと呼ばれます。このパラメーターは、cv 修飾と value カテゴリを維持したまま rvalue と lvalue の両方にバインドできます。"forward" パラメーターは、関数 std::forward を使用して値を宛先オブジェクトまたは関数に転送する場合に役立ちます。
"forward" パラメーターを使用して関数テンプレートを宣言するときは、どの演算であってもこのパラメーターを使用しないでください。"forward" パラメーターは lvalue と rvalue のどちらにもバインドできるので、演算で使用すると cv 修飾と value カテゴリが破損する可能性があります。これらのパラメーターは、演算で使用せずに std::forward を使用して宛先に直接転送します。
Polyspace 実装
Polyspace® は、以下のいずれかの条件を満たす場合、関数テンプレートの定義またはラムダ式の "forward" パラメーターにフラグを設定します。
"forward" パラメーターが
std::forwardを使用して宛先に転送されない。"forward" パラメーターまたはそのメンバー オブジェクトに対して転送以外の演算が実行される。
Polyspace は、コード内で使用されないままのテンプレートまたはラムダ式については無視します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 宣言子 |
| カテゴリ: Required、Automated |
バージョン履歴
R2021a で導入