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

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

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

4

Решение

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

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

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

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]