31 requires std::is_scalar_v<T>
34 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const noexcept
40 template <is_express_layout_desire T>
43 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const noexcept
51 requires is_nullable_like<T>
54 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
58 if (!a.has_value() && !b.has_value())
63 else if (!a.has_value())
68 else if (!b.has_value())
82 requires tuple_like<T>
85 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
87 constexpr std::size_t N = std::tuple_size_v<T>;
92 constexpr std::size_t index =
decltype(i)::value;
93 using tuple_element_type = std::decay_t<std::tuple_element_t<
decltype(i)::value, T>>;
95 const auto& a_val = std::get<index>(a);
96 const auto& b_val = std::get<index>(b);
124 requires(std::ranges::input_range<T> && !tuple_like<T>)
125 struct nested_less<T>
127 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
129 using value_type = std::decay_t<std::ranges::range_value_t<T>>;
136 requires variant_like<T>
137 struct nested_less<T>
139 [[nodiscard]]
constexpr bool operator()(
const T& a,
const T& b)
const
141 if (a.index() != b.index())
143 return a.index() < b.index();
146 [&](
const auto& a_val)
148 using value_type = std::decay_t<
decltype(a_val)>;
149 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