std::ranges::less
Определено в заголовочном файле <functional> | ||
|---|---|---|
struct less; | (с C++20) |
Объект-функция для выполнения сравнения. Выводит типы параметров оператора вызова функции из аргументов (но не тип возвращаемого значения).
Вложенные типы
| Вложенный тип | Определение |
|---|---|
is_transparent | неопределено |
Члены-функции
| operator() | проверяет, является ли первый аргумент меньше второго (общедоступная функция-член) |
std::ranges::less::operator()
template< class T, class U > constexpr bool operator()( T&& t, U&& u ) const; |
Учитывая выражение std::forward<T>(t) < std::forward<U>(u) как expr:
- Если
exprприводит к вызову встроенного оператора < для сравнения указателей, с учетом составного типа указателя дляtиuкакP: - Если преобразованный
tпредшествует преобразованномуu(оба имеют типP) в определяемом реализацией строгом полном порядке для указателей, возвращаетtrue, в противном случае возвращаетfalse. - Если последовательность преобразования из
TвPили последовательность преобразования изUвPне является сохраняющей равенство, поведение не определено. - В противном случае:
- Возвращает результат
expr. - Если
std::totally_ordered_with<T, U>не моделируется, поведение не определено.
Этот перегруз участвует в разрешении перегрузки только в том случае, если std::totally_ordered_with<T, U> выполняется.
Если существует выражение expr1 типа T и выражение expr2 типа U, такие, что результаты сравнения expr1 и expr2 нарушают строгое полное упорядочение (правила определены ниже), поведение не определено.
Результаты сравнения expr1 и expr2 следуют строгому полному упорядочению только в том случае, если ровно одно из следующих выражений выполняется true:
-
std::ranges::less{}(expr1, expr2) -
std::ranges::less{}(expr2, expr1) -
std::ranges::equal_to{}(expr1, expr2)
Примечания
В отличие от std::less, std::ranges::less требует, чтобы все шесть операторов сравнения <, <=, >, >=, == и != были допустимы (через ограничение totally_ordered_with).
Пример
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применен к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 3530 | C++20 | синтаксические проверки были ослаблены при сравнении указателей | только семантические требования ослаблены |
См. также
объект-функция, реализующий x < y (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/functional/ranges/less