Why is this struct not standard-layout?

c++, c++11, standard-layout, struct, type-traits

Solution

From the definition of standard layout classes (§9 Classes, paragraph 7)

[...] * either has no non-static data members in the most derived class and at most one base class with non-static data members, or has no base classes with non-static data members, and [...]

Both the most-derived class and its base have non-static data members in your case. So it's not standard layout.

Problem

A piece of code is worth a thousands words. ``` #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; } ```

Original source