`reinterpret_cast` между несвязанными структурами с одинаковым макетомC++

Программы на C++. Форум разработчиков
Anonymous
`reinterpret_cast` между несвязанными структурами с одинаковым макетом

Сообщение Anonymous »

Предположим, у меня есть две несвязанные структуры A и B, которые имеют одинаковые элементы данных и все такое. Проверено с помощью такого статического утверждения:
template
constexpr bool CheckCompatibility() noexcept
{
static_assert(sizeof(From) == sizeof(To));
static_assert(alignof(From) == alignof(To));

static_assert(std::is_standard_layout_v);
static_assert(std::is_standard_layout_v);

static_assert(std::is_trivially_destructible_v);
static_assert(std::is_trivially_destructible_v);

static_assert(std::is_trivially_copyable_v);
static_assert(std::is_trivially_copyable_v);

return true;
}

Это будет разрешено или UB?
struct A {
int x;
float y;
double z;
int arr[3];
};

struct B {
int x;
float y;
double z;
int arr[3];
};

A* a = new A();
B* b = reinterpret_cast(a);

// Using a & b (with proper synchronization and so on)


Подробнее здесь: https://stackoverflow.com/questions/798 ... ame-layout

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