union {
    T1 t1;
    T2 t2;
} u;

で、u.t1 に値をセットしたあとに u.t2 にアクセスするとどうなるんですか?
未定義の動作ですか?