From 5f29840348c4105e54aa39c9a3746f2156dd880b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 29 Sep 2019 16:01:47 +0300 Subject: [PATCH] Fix enum vs integer comparison in se_t::operator== Need to convert left part to its underlying type. --- rpcs3/util/endian.hpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) 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