diff options
Diffstat (limited to 'gdb/common')
-rw-r--r-- | gdb/common/enum-flags.h | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/gdb/common/enum-flags.h b/gdb/common/enum-flags.h index becd2c74ece..50c60b4468f 100644 --- a/gdb/common/enum-flags.h +++ b/gdb/common/enum-flags.h @@ -114,24 +114,28 @@ public: : m_enum_value ((enum_type) 0) {} - enum_flags &operator&= (enum_type e) + enum_flags &operator&= (enum_flags e) { - m_enum_value = (enum_type) (m_enum_value & e); + m_enum_value = (enum_type) (m_enum_value & e.m_enum_value); return *this; } - enum_flags &operator|= (enum_type e) + enum_flags &operator|= (enum_flags e) { - m_enum_value = (enum_type) (m_enum_value | e); + m_enum_value = (enum_type) (m_enum_value | e.m_enum_value); return *this; } - enum_flags &operator^= (enum_type e) + enum_flags &operator^= (enum_flags e) { - m_enum_value = (enum_type) (m_enum_value ^ e); + m_enum_value = (enum_type) (m_enum_value ^ e.m_enum_value); return *this; } - /* Allow conversion to the enum type. */ - constexpr operator enum_type () const + /* Like raw enums, allow conversion to the underlying type. */ + constexpr operator underlying_type () const + { return m_enum_value; } + + /* Get the underlying value as a raw enum. */ + constexpr enum_type raw () const { return m_enum_value; } /* Binary operations involving some unrelated type (which would be a @@ -167,19 +171,19 @@ private: template <typename enum_type> \ constexpr typename enum_flags_type<enum_type>::type \ OPERATOR_OP (enum_flags<enum_type> e1, enum_type e2) \ - { return enum_type (e1) OP e2; } \ + { return e1.raw () OP e2; } \ \ /* enum_flags on the RHS. */ \ template <typename enum_type> \ constexpr typename enum_flags_type<enum_type>::type \ OPERATOR_OP (enum_type e1, enum_flags<enum_type> e2) \ - { return e1 OP enum_type (e2); } \ + { return e1 OP e2.raw (); } \ \ /* enum_flags on both LHS/RHS. */ \ template <typename enum_type> \ constexpr typename enum_flags_type<enum_type>::type \ OPERATOR_OP (enum_flags<enum_type> e1, enum_flags<enum_type> e2) \ - { return enum_type (e1) OP enum_type (e2); } \ + { return e1.raw () OP e2.raw (); } \ \ /* Delete cases involving unrelated types. */ \ \ |