/** * \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_ namespace detail_horrible_cast { template union temp { std::decay_t in; T out; }; } // namespace detail_horrible_cast template constexpr T horrible_cast(U &&in) noexcept { return detail_horrible_cast::temp{std::forward(in)}.out; } LIBIMP_NAMESPACE_END_