Эта программа не работает на всех компиляторах, но я ожидал, что они перекроют все поля e.
Почему этого не происходит? Это просто пропущенная оптимизация или семантика [[no_unique_address]] каким-то образом препятствует этому?
#define NO_UNIQUE_ADDRESS [[no_unique_address]] [[msvc::no_unique_address]]
struct E {};
struct S1 { E e NO_UNIQUE_ADDRESS; };
struct S2 : S1 { E e NO_UNIQUE_ADDRESS; };
struct S3 : S2 { E e NO_UNIQUE_ADDRESS; };
int main() { static_assert(sizeof(S3) == sizeof(S1)); }
Подробнее здесь: https://stackoverflow.com/questions/798 ... -same-type