Я проходил отличные статьи в классах С++ POD, Trivial и Standard Layout Одно свойство, которое я не ясно понял относительно стандартного макета, следующее: -
A standard layout has no base classes of the same type as the first
non-static data member
Таким образом, следующее не будет стандартным макетом, так как он имеет первый член, такой же, как базовый класс
struct NonStandardLayout3 : StandardLayout1 {
StandardLayout1 x; // first member cannot be of the same type as base
};
Но по производительности и по свойствам, как выше структура отличается от
struct StandardLayout5 : StandardLayout1 {
int x;
StandardLayout1 y; // can have members of base type if they're not the first
};
который является коррекцией выше этого.