https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892
--- Comment #39 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- On Thu, 19 Apr 2018, jameskuyper at verizon dot net wrote: > Code which relies upon this feature to implement a C-style approximation to > inheritance has been fairly common, which is precisely why the C committee > decided to create this rule, to make sure such code had well-defined behavior. To make sure such code had well-defined behavior *notwithstanding the adjacent rule (in C90) that access to a non-current union member was otherwise implementation-defined*. Not overriding any other rule elsewhere in the standard that might make such accesses undefined, such as type-based aliasing, even though it's subsequently sometimes been interpreted in connection with such rules (and access to a non-current union member is now non-normatively specified in a footnote as type punning).