Это похоже на неопределенное поведение
union A {
int const x;
float y;
};
A a = { 0 };
a.y = 1;
В спецификации говорится
Создание нового объекта в том месте хранения, которое занимает константный объект со статической, потоковой или автоматической продолжительностью хранения, или в месте хранения, которое такой константный объект занимал до того, как его время жизни закончилось, приводит к неопределенному поведению.
Но ни один компилятор меня не предупредит, а ошибку легко диагностировать. Я неправильно истолковываю формулировку?
void f() { int a; ++a = ++a; }
. Также применимо то, что говорит @JaredPar :) - person Johannes Schaub - litb   schedule 13.04.2011