Предположим, у меня есть две несвязанные структуры 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