Почему [[no_unique_address]] не работает с объектами одного типа?C++

Программы на C++. Форум разработчиков
Anonymous
Почему [[no_unique_address]] не работает с объектами одного типа?

Сообщение Anonymous »

Эта программа не работает на всех компиляторах, но я ожидал, что они перекроют все поля 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

Вернуться в «C++»