Почему bar
не является стандартным типом макета в C ++ 17?
#include <type_traits>
class foo {
int x;
};
static_assert(std::is_standard_layout<foo>::value);
class bar : public foo {
float y;
};
static_assert(std::is_standard_layout<bar>::value); // "static assertion failed"
На основе CPP Справочное описание и очень похожий вопрос Я понимаю, почему это не стандартный тип макета до C ++ 14, но я не могу подключить CPP элемент описания ссылки , который, исключая все остальное, должен применяться здесь: «Ни один из подобъектов базового класса не имеет тот же тип, что и для типов без объединения, как первый элемент данных non-stati c (см. Пустая оптимизация базы) и, рекурсивно, первый элемент данных non-stati c этого члена данных, если он имеет тип класса, не являющийся объединением, или всех нестатических c членов данных этого члена данных, если он имеет тип объединения, или элемент этого члена данных, если он имеет тип массива, et c . "