std::ranges::less - cppreference.com
From cppreference.com
Function object for performing comparisons. Deduces the parameter types of the function call operator from the arguments (but not the return type).
Nested types
Member functions
| checks if the first argument is less than the second (public member function) |
std::ranges::less::operator()
|
|
||
Given the expression std::forward<T>(t) < std::forward<U>(u) as expr:
- If
exprresults in a call to built-inoperator<comparing pointers, given the composite pointer type oftanduasP:
- If the converted
tprecedes the convertedu(both are of typeP) in the implementation-defined strict total order over pointers, returnstrue, otherwise returnsfalse. - If the conversion sequence from
TtoPor the conversion sequence fromUtoPis not equality-preserving, the behavior is undefined.
- If the converted
- Otherwise:
- Returns the result of
expr. - If
std::totally_ordered_with<T, U>is not modeled, the behavior is undefined.
- Returns the result of
This overload participates in overload resolution only if std::totally_ordered_with<T, U> is satisfied.
If there exists an expression expr1 of type T and an expression expr2 of U, such that the comparison results of expr1 and expr2 violate strict total ordering (rules are defined below), the behavior is undefined.
The comparison results of expr1 and expr2 follow strict total ordering only if exactly one of the following expressions is true:
std::ranges::less{}(expr1, expr2)std::ranges::less{}(expr2, expr1)std::ranges::equal_to{}(expr1, expr2)
Notes
Unlike std::less, std::ranges::less requires all six comparison operators <, <=, >, >=, == and != to be valid (via the totally_ordered_with constraint).
Example
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3530 | C++20 | syntactic checks were relaxed while comparing pointers | only semantic requirements are relaxed |
See also
function object implementing x < y (class template) [edit] |