класс. Если он пуст и есть базовый класс того же типа, то адрес базового объекта и адрес первого члена данных могут быть равны, что недопустимо.

трю на новое, смягченное определение POD вC ++ 11 (раздел 9.7)

Класс стандартного макета - это класс, который:

не имеет нестатических членов-данных типа нестандартного класса макета (или массива таких типов) или ссылки,не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.1),имееттот же контроль доступа (Пункт 11) для всех нестатических элементов данных,не имеет базовых классов нестандартной компоновки,либо не имеет нестатических членов данных в наиболее производном классе ине более одного базового класса с нестатическими членами данныхили не имеет базовых классов с нестатическими членами данных, ине имеет базовых классовтот же тип, что и первый нестатический элемент данных.

Я выделил биты, которые меня удивили.

Что бы пошло не так, если бы мы допускали элементы данных с различным контролем доступа?

Что бы пошло не так, если бы первый элемент данных был также базовым классом? то есть

struct Foo {};
struct Good : Foo {int x; Foo y;};
struct Bad  : Foo {Foo y; int x;};

Я признаю, что это странная конструкция, но почемуBad быть запрещено, но неGood?

Наконец, что может пойти не так, если более чем в одном составляющем классе есть члены-данные?

Ответы на вопрос(6)

Ваш ответ на вопрос