Являются ли эти 2 структуры совместимыми с макетами?
struct One {
float x, y, z;
};
struct Two {
float c[3];
};
Оба содержат 3 поплавки, поэтому в некотором смысле это описание можно считать истинным (от N3797):
16 Два типа стандартной структуры (раздел 9) совместимы с макетами если они имеют одинаковое количество нестатических элементов данных и соответствующие нестатические члены данных (в порядке объявления) имеют совместимые с макетами типы (3.9).
N4659 имеет другой текст:
Общая начальная последовательность двух структур стандартного макета (раздел 12) типы - это самая длинная последовательность нестатических элементов данных и бит-полей в порядке объявления, начиная с первого такого лица в каждом из структуры, так что соответствующие объекты имеют совместимость с макетами типы и ни один из них не является битовым полем, либо оба являются битовыми полями с той же шириной.
Два типа стандартной структуры (раздел 12) совместимы с макетами классы, если их общая начальная последовательность состоит из всех членов и бит-поля обоих классов (6.9).
Если ответ отрицательный, они не совместимы с макетами, то: было ли это намерение комитета? Возможно, они хотят, чтобы One
и Two
были совместимы с макетами (возможно, член комитета читает это и может уточнить).
Бонусный вопрос: гарантировано ли это, что sizeof(One)==sizeof(Two)
?