diff options
| -rw-r--r-- | compat/enum-operators.hpp | 20 | 
1 files changed, 18 insertions, 2 deletions
| diff --git a/compat/enum-operators.hpp b/compat/enum-operators.hpp index e7300239..188a081d 100644 --- a/compat/enum-operators.hpp +++ b/compat/enum-operators.hpp @@ -20,10 +20,26 @@          return type(op t_((x)));                                        \      } // end +#define OTR_FLAGS_ASSIGN_OP(type, op)                                   \ +    inline type& operator op ## = (type& lhs, type rhs)                 \ +    {                                                                   \ +        using t_ = std::underlying_type_t<decltype(rhs)>;               \ +        lhs = type(t_((lhs)) op t_((rhs)));                             \ +        return lhs;                                                     \ +    } //end + +#define OTR_FLAGS_DELETE_SHIFT_ASSIGN(type, op)                         \ +    type operator op ## = (type& lhs, type rhs) = delete //end +  #define DEFINE_ENUM_OPERATORS(type)                                     \      OTR_FLAGS_OP2(type, |)                                              \      OTR_FLAGS_OP2(type, &)                                              \      OTR_FLAGS_OP2(type, ^)                                              \      OTR_FLAGS_OP1(type, ~)                                              \ -    OTR_FLAGS_SHIFT(type, <<);                                          \ -    OTR_FLAGS_SHIFT(type, >>) // end +    OTR_FLAGS_DELETE_SHIFT(type, <<);                                   \ +    OTR_FLAGS_DELETE_SHIFT(type, >>);                                   \ +    OTR_FLAGS_ASSIGN_OP(type, |)                                        \ +    OTR_FLAGS_ASSIGN_OP(type, &)                                        \ +    OTR_FLAGS_ASSIGN_OP(type, ^)                                        \ +    OTR_FLAGS_DELETE_SHIFT_ASSIGN(type, <<);                            \ +    OTR_FLAGS_DELETE_SHIFT_ASSIGN(type, >>) // end | 
