This appears to be undefined behavior
union A {
int const x;
float y;
};
A a = { 0 };
a.y = 1;
The spec says
Creating a new object at the storage location that a const object with static, thread, or automatic storage duration occupies or, at the storage location that such a const object used to occupy before its lifetime ended results in undefined behavior.
But no compiler warns me while it's an easy to diagnose mistake. Am I misinterpreting the wording?