/** * @file libimp/horrible_cast.h * @author mutouyun (orz@orzz.org) * @date 2022-04-17 */ #pragma once #include // std::decay_t #include #include "libimp/def.h" LIBIMP_NAMESPACE_BEG_ template constexpr auto horrible_cast(U &&in) noexcept -> std::enable_if_t<(sizeof(T) == sizeof(std::decay_t)), T> { union { std::decay_t in; T out; } u {std::forward(in)}; return u.out; } LIBIMP_NAMESPACE_END_