33 requires std::is_scalar_v<T>
36 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const noexcept
42 template <is_express_layout_desire T>
45 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const noexcept
53 requires is_nullable_like<T>
56 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
60 if (!a.has_value() && !b.has_value())
65 else if (!a.has_value())
70 else if (!b.has_value())
84 requires tuple_like<T>
87 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
89 constexpr std::size_t N = std::tuple_size_v<T>;
94 constexpr std::size_t index =
decltype(i)::value;
95 using tuple_element_type = std::decay_t<std::tuple_element_t<
decltype(i)::value, T>>;
97 const auto& a_val = std::get<index>(a);
98 const auto& b_val = std::get<index>(b);
126 requires(std::ranges::input_range<T> && !tuple_like<T>)
127 struct nested_less<T>
129 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
131 using value_type = std::decay_t<std::ranges::range_value_t<T>>;
138 requires variant_like<T>
139 struct nested_less<T>
141 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
143 if (a.index() != b.index())
145 return a.index() < b.index();
148 [&](
const auto& a_val)
150 using value_type = std::decay_t<
decltype(a_val)>;
151 const auto& b_val = std::get<value_type>(b);
bool exitable_for_each_index(F &&f)
constexpr bool operator()(const T &a, const T &b) const noexcept
constexpr bool operator()(const T &a, const T &b) const