7 Expressions [expr]

7.2 Properties of expressions [expr.prop]

7.2.3 Context dependence [expr.context]

An unevaluated operand is not evaluated.
[Note 1:
In an unevaluated operand, a non-static class member can be named ([expr.prim.id]) and naming of objects or functions does not, by itself, require that a definition be provided ([basic.def.odr]).
An unevaluated operand is considered a full-expression.
— end note]
In some contexts, an expression only appears for its side effects.
Such an expression is called a discarded-value expression.
The array-to-pointer and function-to-pointer standard conversions are not applied.
The lvalue-to-rvalue conversion is applied if and only if the expression is a glvalue of volatile-qualified type and it is one of the following:
[Note 2:
Using an overloaded operator causes a function call; the above covers only operators with built-in meaning.
— end note]
If the (possibly converted) expression is a prvalue, the temporary materialization conversion is applied.
[Note 3:
If the expression is an lvalue of class type, it must have a volatile copy constructor to initialize the temporary object that is the result object of the lvalue-to-rvalue conversion.
— end note]
The glvalue expression is evaluated and its value is discarded.