GCC гарантирует, что первый базовый класс имеет нулевое смещение в макете производного класса. Поэтому в этом случае достаточно выровнять производный объект.
Я не могу найти хорошую ссылку в данный момент, но вижу здесь в -wABI
, где они описывают исключение из неустановленного правила: если база пуста, она может быть не смещена ноль.
Полагаю, было бы еще одно исключение, если в первой базе отсутствует виртуальная таблица, а у производного объекта она есть. array
попадая в эту категорию, я бы остерегался. Конечно, стандарт оставляет макет не уточненным: §10 / 3.