5 template<typename def, typename inner = typename def::type>
\r
6 class enum_class : public def
\r
8 typedef typename def::type type;
\r
11 explicit enum_class(int v) : val_(static_cast<type>(v)) {}
\r
12 enum_class(type v) : val_(v) {}
\r
13 inner value() const { return val_; }
\r
15 bool operator==(const enum_class& s) const { return val_ == s.val_; }
\r
16 bool operator!=(const enum_class& s) const { return val_ != s.val_; }
\r
17 bool operator<(const enum_class& s) const { return val_ < s.val_; }
\r
18 bool operator<=(const enum_class& s) const { return val_ <= s.val_; }
\r
19 bool operator>(const enum_class& s) const { return val_ > s.val_; }
\r
20 bool operator>=(const enum_class& s) const { return val_ >= s.val_; }
\r
22 enum_class operator&(const enum_class& s) const
\r
24 return enum_class(static_cast<type>(val_ & s.val_));
\r
27 enum_class operator|(const enum_class& s) const
\r
29 return enum_class(static_cast<type>(val_ | s.val_));
\r