Несогласованность в has_unique_object_representations и пустых подобъектахC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Несогласованность в has_unique_object_representations и пустых подобъектах

Сообщение Anonymous »

Я поигрался с атрибутом [[no_unique_address]] в C++20 и обнаружил интересное поведение при его использовании с признаком типа has_unique_object_representations:

Код: Выделить всё

#include 

struct Empty {};

struct A : public Empty {
int x;
};

struct B {
[[no_unique_address]] Empty e;
int x;
};

static_assert (sizeof(A) == sizeof(int));
static_assert (sizeof(B) == sizeof(int));

static_assert(std::has_unique_object_representations_v);
static_assert(std::has_unique_object_representations_v);
Только последнее утверждение не выполняется как для GCC (магистраль), так и для Clang (магистраль). Насколько я могу судить, здесь нет причин, по которым A и B ведут себя по-разному.
Это ошибка компилятора или есть причина такой разницы?

Подробнее здесь: https://stackoverflow.com/questions/641 ... subobjects
Ответить

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

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

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

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

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