Похоже, это поведение undefined
union A {
int const x;
float y;
};
A a = { 0 };
a.y = 1;
В спецификации сказано
Создание нового объекта в месте хранения, в котором константа объект со статической, потоковой или автоматической продолжительностью хранения занимает или в месте хранения, которое такой константный объект занимал до того, как его время жизни закончилось, приводит к неопределенному поведению.
Но ни один компилятор не предупредит меня, хотя это легко диагностировать ошибку. Неправильно ли я истолковываю формулировку?