When the left operand of an assignment operator
involves a member access expression (
[expr.ref])
that nominates a union member,
it may begin the lifetime of that union member,
as described below
.
In an assignment expression of the form
E1 = E2
that uses either the built-in assignment operator (
[expr.ass])
or a trivial assignment operator (
[class.copy.assign]),
for each element
X of
S(E1) and
each anonymous union member
X (
[class.union.anon]) that
is a member of a union and
has such an element as an immediate subobject (recursively),
if modification of
X would have undefined behavior under
[basic.life],
an object of the type of
X is implicitly created
in the nominated storage;
no initialization is performed and
the beginning of its lifetime is sequenced after
the value computation of the left and right operands
and before the assignment
.