From 9fd246a411e9faaf49c6b18c020fde351b9412a6 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 29 Dec 2018 13:31:00 +0100 Subject: compat/enum-operators: add assign operators --- compat/enum-operators.hpp | 20 ++++++++++++++++++-- 1 file 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; \ + 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 -- cgit v1.2.3