1) can you explain what makes it undefined? I remember reading somewhere that the compiler can assume that different types do not overlap in memory but I'm not sure if that's what you're talking about.
2) good point.
3) that depends on the programmer. however odd it may seem to someone like you, there are those of us who find something like this quite logical and yes, useful. to each his own, I suppose.

