https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79671
--- Comment #51 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- Doesn't 3.10/10 explicitly say that it is undefined to use a union to to move an object representation that is not a member of the union? "If a program attempts to access the stored value of an object through a glvalue of other than one of the following types the behavior is undefined:52 — the dynamic type of the object, — a cv-qualified version of the dynamic type of the object, — a type similar (as defined in 4.4) to the dynamic type of the object, — a type that is the signed or unsigned type corresponding to the dynamic type of the object, — a type that is the signed or unsigned type corresponding to a cv-qualified version of the dynamic type of the object, — an aggregate or union type that includes one of the aforementioned types among its elements or non- static data members (including, recursively, an element or non-static data member of a subaggregate or contained union), — a type that is a (possibly cv-qualified) base class type of the dynamic type of the object, — a char or unsigned char type."