This appears to be undefined behavior
union A {
int const x;
float y;
};
A a = { 0 };
a.y = 1;
The spec says
Cr
The latest C++0x draft standard is explicit about this:
In a union, at most one of the non-static data members can be active at any time, that is, the value of at most one of the non-static data members can be stored in a union at any time.
So your statement
a.y = 1;
is fine, because it changes the active member from x to y. If you subsequently referenced a.x as an rvalue, the behaviour would be undefined:
cout << a.x << endl ; // Undefined!
Your quote from the spec is not relevant here, because you are not creating any new object.