A class S is a standard-layout class if it:
- has no element of the set M(S) of types as a base class, where for any type X, M(X) is defined as follows.102 [Note: M(X) is the set of the types of all non-base-class subobjects that may be at a zero offset in X. — end note]
From the highlighted sentence above we conclude that M(S) is empty if S is a union, simply because unions don't have base classes. For me this is in contradiction with [class.prop]/(3.7.3) below.
- If X is a union type, the set M(X) is the union of all M(Ui) and the set containing all Ui , where each Ui is the type of the i th non-static data member of X.