[expr.ref] (original) (raw)

If E2 is a non-static data member and the type ofE1 is “cq1 vq1 X”, and the type of E2is “cq2 vq2 T”, the expression designates the corresponding member subobject of the object designated by the first expression.

If E1is an lvalue, then E1.E2 is an lvalue; otherwise E1.E2 is an xvalue.

Let the notation vq12 stand for the “union” of_vq1_ and vq2; that is, if vq1 or _vq2_is volatile, then vq12 is volatile.

Similarly, let the notation cq12 stand for the “union” of _cq1_and cq2; that is, if cq1 or cq2 isconst, then cq12 is const.

If E2 is declared to be a mutable member, then the type of E1.E2is “vq12 T”.

If E2 is not declared to be amutable member, then the type of E1.E2 is “cq12 vq12 T”.