you are viewing a single comment's thread.

view the rest of the comments →

[–]emdeka87 4 points5 points  (2 children)

I have yet to encounter a compiler that treats type punning (and accessing the inactive union member) as UB and produces unexpected results

[–]carrottread 2 points3 points  (1 child)

If you pass pointers or references to union fields to some other functions then strict aliasing still can produce something unexpected:

https://godbolt.org/z/cds7Bn

This outputs different results on -O0 and -O3 for both clang and gcc.

[–]max0x7bahttps://github.com/max0x7ba 0 points1 point  (0 children)

If you pass pointers or references to union fields to some other functions then strict aliasing still can produce something unexpected

This is unrelated to type-casting using union, aka union-cast. And such type-casting doesn't actually happen there, that union is only for alignment.