Кусок кода стоит тысячи слов.
#include <iostream>
#include <type_traits>
using namespace std;
struct A
{
int a;
};
struct B : A
{
int b;
};
int main()
{
cout << is_standard_layout<B>::value << endl; // output false! WHY?
return 0;
}
Из определения стандартных классов макета (§9 Классы, пункт 7)
[…] * либо не имеет нестатических членов данных в самом производном классе и не более одного базового класса с нестатическими членами данных, или не имеет базовых классов с нестатическими членами данных, и
[…]
В вашем случае и самый производный класс, и его база имеют нестатические члены-данные. Так что это не стандартная раскладка.
Других решений пока нет …