For a dot that is followed by an expression
that designates a static member or an enumerator,
the first expression is a discarded-value expression (
[expr.context]);
if the expression after the dot designates a
non-static data member (
[class.mem.general]) or
a direct base class relationship (
[class.derived.general]),
the first expression shall be a glvalue
. The expression
E1->E2 is
converted to the equivalent form
(*(E1)).E2; the remainder of
[expr.
ref] will address only the form using a dot
.