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 ([intro.execution]).
The array-to-pointer ([conv.array])
and function-to-pointer ([conv.func]) standard conversions are not
applied.
The lvalue-to-rvalue conversion ([conv.lval]) is applied
if and only if
the expression is a glvalue of volatile-qualified type and it is one of the
following:
If the original 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 temporary materialization conversion.
— end note]
The expression is evaluated and its result (if any) is discarded.