std::ranges::less
| Определено в заголовочном файле <functional>
|
||
struct less; |
(начиная с C++20) | |
Функциональный объект для выполнения сравнений. Выводит типы параметров оператора вызова функции из аргументов (но не тип возвращаемого значения).
Определяемый реализацией строгий общий порядок указателей
Оператор вызова функции выдаёт определённый реализацией строгий общий порядок указателей, если оператор < между аргументами вызывает встроенный оператор сравнения для указателей, даже если встроенный < оператор нет.
Строгий общий порядок, определяемый реализацией, согласуется с частичным порядком, налагаемым встроенными операторами сравнения (<=>, <, >, <= и >=), и согласуется со следующими стандартными функциональными объектами:
- std::less, std::greater, std::less_equal и std::greater_equal, когда аргумент шаблона тип указателя или
void
- std::ranges::equal_to, std::ranges::not_equal_to, std::ranges::less, std::ranges::greater, std::ranges::less_equal, std::ranges::greater_equal и std::compare_three_way
Типы элементы
| Тип элемент | Определение |
is_transparent
|
/* не определено */ |
Функции-элементы
operator() |
проверяет, меньше ли первый аргумент второго (public функция-элемент) |
std::ranges::less::operator()
<tbody> </tbody> template< class T, class U > requires std::totally_ordered_with<T, U> // с разными семантическими требованиями constexpr bool operator()(T&& t, U&& u) const; |
||
Сравнивает t и u, что эквивалентно return std::forward<T>(t) < std::forward<U>(u);, за исключением того, когда это выражение преобразуется в вызов встроенного operator<, сравнивающего указатели.
Когда вызов не вызывает встроенный оператор сравнения указателей, поведение не определено, если std::totally_ordered_with<T, U> не моделируется.
Когда вызов вызывает встроенный оператор, сравнивающий указатели типа P, вместо этого результат определяется следующим образом:
- Возвращает
true, если (возможно преобразованное) значение первого аргумента предшествует (возможно преобразованному) значению второго аргумента в определяемом реализацией строгом общем порядке для всех значений указателя типаP. Этот строгий полный порядок согласуется с частичным порядком, заданным встроенными операторами<,>,<=и>=. - Иначе возвращает
false.
Поведение не определено, если только последовательности преобразования из T и U в P не сохраняют равенство.
Сохранение равенства
Выражения, объявленные в выражениях requires концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).
Примечание
В отличие от std::less, для std::ranges::less требуется, чтобы все шесть операторов сравнения <, <=, >, >=, == и != были действительными (через ограничение totally_ordered_with).
Пример
| Этот раздел не завершён Причина: нет примера |
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 3530 | C++20 | при сравнении указателей синтаксические проверки были ослаблены | смягчены только семантические требования |
Смотрите также
функциональный объект, реализующий x < y (шаблон класса) |