https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71002
--- Comment #3 from Tavian Barnes <tavianator at gmail dot com> --- Because their long_t is not POD. I don't know why that is though. It could be POD if they removed the default/copy constructors and assignment operator. Actually they're probably worried about custom allocators where the pointer type is not POD. So it couldn't be POD in general, and thus can't appear in a union directly (in C++03).