5 #ifndef ICE_COMPARABLE_H
6 #define ICE_COMPARABLE_H
19 template<
typename T,
typename U>
38 template<
typename T,
typename U>
57 template<
typename T,
typename U>
69 template<
typename T,
typename U>
81 template<
typename T,
typename U>
93 template<
typename T,
typename U>
99 #ifdef ICE_CPP11_MAPPING
105 template<
typename T,
template<
typename>
class Compare>
112 bool operator()(
const T& lhs,
const T& rhs)
const
116 return Compare<typename T::element_type>()(*lhs, *rhs);
120 return Compare<bool>()(
static_cast<const bool>(lhs),
static_cast<const bool>(rhs));
135 template<
class C,
typename = std::enable_if<std::is_member_function_po
inter<decltype(&C::ice_tuple)>::value>>
136 bool operator<(
const C& lhs,
const C& rhs)
138 return lhs.ice_tuple() < rhs.ice_tuple();
147 template<
class C,
typename = std::enable_if<std::is_member_function_po
inter<decltype(&C::ice_tuple)>::value>>
148 bool operator<=(
const C& lhs,
const C& rhs)
150 return lhs.ice_tuple() <= rhs.ice_tuple();
159 template<
class C,
typename = std::enable_if<std::is_member_function_po
inter<decltype(&C::ice_tuple)>::value>>
160 bool operator>(
const C& lhs,
const C& rhs)
162 return lhs.ice_tuple() > rhs.ice_tuple();
171 template<
class C,
typename = std::enable_if<std::is_member_function_po
inter<decltype(&C::ice_tuple)>::value>>
172 bool operator>=(
const C& lhs,
const C& rhs)
174 return lhs.ice_tuple() >= rhs.ice_tuple();
183 template<
class C,
typename = std::enable_if<std::is_member_function_po
inter<decltype(&C::ice_tuple)>::value>>
184 bool operator==(
const C& lhs,
const C& rhs)
186 return lhs.ice_tuple() == rhs.ice_tuple();
195 template<
class C,
typename = std::enable_if<std::is_member_function_po
inter<decltype(&C::ice_tuple)>::value>>
196 bool operator!=(
const C& lhs,
const C& rhs)
198 return lhs.ice_tuple() != rhs.ice_tuple();