Почему [[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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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