AUTOSAR C++14 Rule A5-1-7
A lambda shall not be an operand to decltype or typeid
説明
ルール定義
ラムダを decltype または typeid のオペランドとしてはなりません。
根拠
C++ 規格によると、ラムダ式の型は、一意で名前のないクラス型です。型が一意であるため、別の変数または式が同じ型をもつことができません。ラムダ式における decltype または typeid の使用は、2 番目の変数または式にオペランド ラムダ式と同じ型を与えようとしていることを示します。
decltype と typeid は共に、そのオペランドのデータ型を返します。通常、これらの演算子は次の目的のために使用されます。
別の変数に型を割り当てる。次に例を示します。
変数decltype(var1) var2;
var1と同じ型をもつ変数var2を作成します。2 つの変数の型を比較する。次に例を示します。
(typeid(var1) == typeid(var2))
var1とvar2の型を比較します。
このような使用方法は、一意の型をもつラムダ式には適用できません。
Polyspace 実装
ルール チェッカーは、ラムダ式で decltype および typeid が使用されるとフラグを立てます。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 式 |
| カテゴリ: Required、Automated |