summaryrefslogtreecommitdiff
path: root/gdb/common/enum-flags.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/common/enum-flags.h')
-rw-r--r--gdb/common/enum-flags.h26
1 files changed, 15 insertions, 11 deletions
diff --git a/gdb/common/enum-flags.h b/gdb/common/enum-flags.h
index 9e128c3f93c..2939a3a1808 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. */ \
\