diff --git a/rpcs3/util/endian.hpp b/rpcs3/util/endian.hpp index 6cd586e96b..6bd873be00 100644 --- a/rpcs3/util/endian.hpp +++ b/rpcs3/util/endian.hpp @@ -199,9 +199,20 @@ namespace stx { using R = simple_t; - if constexpr ((std::is_integral_v || std::is_enum_v) && (std::is_integral_v || std::is_enum_v) && sizeof(T) >= sizeof(R)) + if constexpr ((std::is_integral_v || std::is_enum_v) && (std::is_integral_v || std::is_enum_v)) { - return std::bit_cast(m_data) == std::bit_cast(static_cast(rhs)); + if constexpr (sizeof(T) >= sizeof(R)) + { + if constexpr (std::is_enum_v && std::is_convertible_v && std::is_convertible_v) + { + using under = std::underlying_type_t; + return std::bit_cast(m_data) == std::bit_cast(static_cast>(rhs)); + } + else + { + return std::bit_cast(m_data) == std::bit_cast(static_cast(rhs)); + } + } } // Keep outside of if constexpr to make sure it fails on invalid comparison