16 #ifndef OPENKALMAN_COMPATIBILITY_RANGES_FUNCTIONAL_HPP 17 #define OPENKALMAN_COMPATIBILITY_RANGES_FUNCTIONAL_HPP 23 #ifdef __cpp_lib_ranges 24 using std::ranges::equal_to;
25 using std::ranges::not_equal_to;
26 using std::ranges::greater;
27 using std::ranges::less;
28 using std::ranges::greater_equal;
29 using std::ranges::less_equal;
33 template<
typename Tp,
typename Up, std::enable_if_t<stdex::equality_comparable_with<Tp, Up>,
int> = 0>
35 operator()(Tp&& t, Up&& u)
const noexcept(noexcept(std::declval<Tp>() == std::declval<Up>()))
37 return std::forward<Tp>(t) == std::forward<Up>(u);
40 struct is_transparent;
46 template<
typename Tp,
typename Up, std::enable_if_t<stdex::equality_comparable_with<Tp, Up>,
int> = 0>
48 operator()(Tp&& t, Up&& u)
const noexcept(noexcept(std::declval<Up>() == std::declval<Tp>()))
50 return not
equal_to{}(std::forward<Tp>(t), std::forward<Up>(u));
53 struct is_transparent;
61 template<
typename T,
typename U,
typename =
void>
62 struct has_deduced_lt : std::false_type {};
64 template<
typename T,
typename U>
65 struct has_deduced_lt<T, U, std::void_t<decltype(operator<(std::declval<T>(), std::declval<U>()))>> : std::true_type {};
67 template<
typename T,
typename U,
typename =
void>
68 struct has_member_lt : std::false_type {};
70 template<
typename T,
typename U>
71 struct has_member_lt<T, U, std::void_t<decltype(std::declval<T>().operator<(std::declval<U>()))>> : std::true_type {};
75 template<
typename Tp,
typename Up, std::enable_if_t<stdex::totally_ordered_with<Tp, Up>,
int> = 0>
77 operator()(Tp&& t, Up&& u)
const noexcept(noexcept(std::declval<Tp>() < std::declval<Up>()))
79 return std::forward<Tp>(t) < std::forward<Up>(u);
82 struct is_transparent;
88 template<
typename Tp,
typename Up, std::enable_if_t<stdex::totally_ordered_with<Tp, Up>,
int> = 0>
90 operator()(Tp&& t, Up&& u)
const noexcept(noexcept(std::declval<Up>() < std::declval<Tp>()))
92 return less{}(std::forward<Up>(u), std::forward<Tp>(t));
95 struct is_transparent;
101 template<
typename Tp,
typename Up, std::enable_if_t<stdex::totally_ordered_with<Tp, Up>,
int> = 0>
103 operator()(Tp&& t, Up&& u)
const noexcept(noexcept(std::declval<Tp>() < std::declval<Up>()))
105 return not
less{}(std::forward<Tp>(t), std::forward<Up>(u));
108 struct is_transparent;
114 template<
typename Tp,
typename Up, std::enable_if_t<stdex::totally_ordered_with<Tp, Up>,
int> = 0>
116 operator()(Tp&& t, Up&& u)
const noexcept(noexcept(std::declval<Up>() < std::declval<Tp>()))
118 return not
less{}(std::forward<Up>(u), std::forward<Tp>(t));
121 struct is_transparent;
Definition: functional.hpp:57
Definitions relating to c+++20+ comparisons.
Definition: functional.hpp:31
Definition: common.hpp:200
Definition: functional.hpp:112
Definition: functional.hpp:99
Definition: functional.hpp:44
Definition: functional.hpp:86