refactor: horrible_cast implementation

This commit is contained in:
mutouyun 2024-09-01 15:32:23 +08:00
parent 9325fbdf5c
commit 8c643308dd
2 changed files with 7 additions and 4 deletions

View File

@ -23,9 +23,8 @@ union temp {
} // namespace detail_horrible_cast
template <typename T, typename U>
constexpr auto horrible_cast(U &&in) noexcept
-> std::enable_if_t<(sizeof(T) == sizeof(std::decay_t<U>)), T> {
return detail_horrible_cast::temp<T, std::decay_t<U>>{std::forward<U>(in)}.out;
constexpr T horrible_cast(U &&in) noexcept {
return detail_horrible_cast::temp<T, U>{std::forward<U>(in)}.out;
}
LIBIMP_NAMESPACE_END_

View File

@ -143,7 +143,11 @@ TEST(utility, horrible_cast) {
EXPECT_EQ(b.a_[0], 0);
#endif
// imp::horrible_cast<std::uint32_t>(0ll);
#if LIBIMP_ENDIAN_LIT
EXPECT_EQ(imp::horrible_cast<std::uint32_t>(0xff00'0000'0001ll), 1);
#else
EXPECT_EQ(imp::horrible_cast<std::uint32_t>(0xff00'0000'0001ll), 0xff00);
#endif
}
#if defined(LIBIMP_CPP_17)