AUTOSAR C++14 Rule A5-1-7
A lambda shall not be an operand to decltype or typeid
Description
Rule Definition
A lambda shall not be an operand to decltype or typeid.
Rationale
According to the C++ Standard, the type of a lambda expression is a unique, unnamed
class type. Because the type is unique, another variable or expression cannot have the same
type. Use of decltype
or typeid
on a lambda expression
indicates that you expect a second variable or expression to have the same type as the
operand lambda expression.
Both decltype
and typeid
return the data type of
their operands. Typically the operators are used to:
Assign a type to another variable. For instance:
creates a variabledecltype(var1) var2;
var2
with the same type asvar1
.Compare the types of two variables. For instance:
compares the types of(typeid(var1) == typeid(var2))
var1
andvar2
.
These uses do not apply to a lambda expression, which has a unique type.
Polyspace Implementation
The rule checker flags uses of decltype
and typeid
with lambda expressions.
Troubleshooting
If you expect a rule violation but Polyspace® does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
Group: Expressions |
Category: Required, Automated |