Add helper wrappers similar to std::bit_cast which support size mismatches

tmp-jgrpp
Jonathan G Rennison 1 week ago
parent e2dc3a9ac4
commit 1b228b24a5

@ -32,4 +32,28 @@ constexpr To bit_cast(const From& from) noexcept
#endif
template <typename To, typename From>
constexpr To bit_cast_to_storage(const From& from) noexcept
{
static_assert(std::is_trivially_constructible_v<To>);
static_assert(std::is_trivially_copyable_v<From>);
static_assert(sizeof(To) >= sizeof(From));
To to{};
memcpy(&to, &from, sizeof(From));
return to;
}
template <typename To, typename From>
constexpr To bit_cast_from_storage(const From& from) noexcept
{
static_assert(std::is_trivially_constructible_v<To>);
static_assert(std::is_trivially_copyable_v<From>);
static_assert(sizeof(To) <= sizeof(From));
To to{};
memcpy(&to, &from, sizeof(To));
return to;
}
#endif /* BIT_CAST_HPP */

Loading…
Cancel
Save