17 #ifndef MIR_INT_WRAPPER_H_
18 #define MIR_INT_WRAPPER_H_
24 template<
typename Tag,
typename ValueType=
int>
30 explicit constexpr IntWrapper(ValueType value) : value(value) {}
31 ValueType
constexpr as_value()
const {
return value; }
37 template<
typename Tag,
typename ValueType>
38 std::ostream& operator<<(std::ostream& out,
IntWrapper<Tag,ValueType>
const& value)
40 out << value.as_value();
44 template<
typename Tag,
typename ValueType>
47 return lhs.as_value() == rhs.as_value();
50 template<
typename Tag,
typename ValueType>
53 return lhs.as_value() != rhs.as_value();
56 template<
typename Tag,
typename ValueType>
59 return lhs.as_value() <= rhs.as_value();
62 template<
typename Tag,
typename ValueType>
65 return lhs.as_value() >= rhs.as_value();
68 template<
typename Tag,
typename ValueType>
71 return lhs.as_value() < rhs.as_value();
78 template<
typename Tag,
typename ValueType>
84 return self(id.as_value());