Код: Выделить всё
ToКод: Выделить всё
std::is_trivially_copyable_v- или даже std::is_constructible_v
Код: Выделить всё
std::is_trivially_constructible_v
Несколько дней спустя я написал два возможных варианта.
Вариант №1
Код: Выделить всё
template
requires ((std::is_same_v || std::is_same_v || std::is_same_v)
&& std::is_trivially_copyable_v)
To from_bytes(const TByte* inp){
alignas(To) TByte buf[sizeof(To)];
To* res = new (buf) To;
std::memcpy(res, inp, sizeof(To));
return *res;
}
Код: Выделить всё
template
requires (std::is_same_v || std::is_same_v || std::is_same_v)
To from_bytes2(const TByte* inp){
using TArr=TByte[sizeof(To)];
return std::bit_cast(*reinterpret_cast(inp));
}
Вопрос 2: Я считаю, что ни один из перечисленных вариантов не является полностью идиоматически правильным по отношению к C++20. Итак, каков наиболее классический подход к решению этой проблемы, используя возможности, доступные в C++20?
Подробнее здесь: https://stackoverflow.com/questions/784 ... without-ub