5 template<typename def, typename inner = typename def::type>
6 class enum_class : public def
8 typedef typename def::type type;
11 explicit enum_class(int v) : val_(static_cast<type>(v)) {}
12 enum_class(type v) : val_(v) {}
13 inner value() const { return val_; }
15 bool operator==(const enum_class& s) const { return val_ == s.val_; }
16 bool operator!=(const enum_class& s) const { return val_ != s.val_; }
17 bool operator<(const enum_class& s) const { return val_ < s.val_; }
18 bool operator<=(const enum_class& s) const { return val_ <= s.val_; }
19 bool operator>(const enum_class& s) const { return val_ > s.val_; }
20 bool operator>=(const enum_class& s) const { return val_ >= s.val_; }
22 bool operator==(const int& val) const { return val_ == val; }
23 bool operator!=(const int& val) const { return val_ != val; }
24 bool operator<(const int& val) const { return val_ < val; }
25 bool operator<=(const int& val) const { return val_ <= val; }
26 bool operator>(const int& val) const { return val_ > val; }
27 bool operator>=(const int& val) const { return val_ >= val; }
29 enum_class operator&(const enum_class& s) const
31 return enum_class(static_cast<type>(val_ & s.val_));
34 enum_class& operator&=(const enum_class& s)
36 val_ = static_cast<type>(val_ & s.val_);
40 enum_class operator|(const enum_class& s) const
42 return enum_class(static_cast<type>(val_ | s.val_));
45 enum_class& operator|=(const enum_class& s)
47 val_ = static_cast<type>(val_ | s.val_);