Несогласованность в 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

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