Почему эта структура не является стандартной версткой?

Кусок кода стоит тысячи слов.

#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; 
}

1 ответ

Решение

Из определения стандартных классов макета (§9 Классы, пункт 7)

[...]
* либо не имеет нестатических членов данных в самом производном классе и не более одного базового класса с нестатическими членами данных, или не имеет базовых классов с нестатическими членами данных, и
[...]

В вашем случае и самый производный класс, и его база имеют нестатические члены-данные. Так что это не стандартная раскладка.

Другие вопросы по тегам