std::partial_order
| Определено в заголовочном файле <compare>
|
||
inline namespace /* не указано */ { inline constexpr /* не указано */ partial_order = /* не указано */; } |
(начиная с C++20) | |
| Сигнатура вызова |
||
template< class T, class U > requires /* смотрите ниже */ constexpr std::partial_ordering partial_order(T&& t, U&& u) noexcept(/* смотрите ниже */); |
||
Сравнивает два значения, используя трёхстороннее сравнение, и выдаёт результат типа std::partial_ordering.
Пусть t и u выражения, а T и U обозначают decltype((t)) и decltype((u)) соответственно, std::partial_order(t, u) эквивалентно выражению:
- Если
std::is_same_v<std::decay_t<T>, std::decay_t<U>>равноtrue:std::partial_ordering(partial_order(t, u)), если это правильно сформированное выражение с разрешением перегрузки, выполненном в контексте, который не включает объявлениеstd::partial_order,- иначе,
std::partial_ordering(std::compare_three_way()(t, u)), если оно правильно сформировано, - иначе,
std::partial_ordering(std::weak_order(t, u)), если оно правильно сформировано,
- Во всех остальных случаях выражение имеет неправильный формат, что может привести к ошибке подстановки, когда оно появляется в непосредственном контексте создания экземпляра шаблона.
Объекты точек настройки
Имя std::partial_order обозначает объект точки настройки, который является константным функциональным объектом литерального классового типа semiregular. В целях наглядности версия этого типа без cv-квалификации обозначается как __partial_order_fn.
Все экземпляры __partial_order_fn равны. Эффекты от вызова разных экземпляров типа __partial_order_fn для одних и тех же аргументов эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, lvalue или rvalue, и является ли оно константным или нет (однако volatile-квалифицированный экземпляр не требуется для вызова). Таким образом, std::partial_order можно свободно копировать, а его копии можно использовать взаимозаменяемо.
Учитывая набор типов Args..., если std::declval<Args>()... соответствует требованиям к аргументам для std::partial_order выше, __partial_order_fn модели
std::invocable<__partial_order_fn, Args...>,std::invocable<const __partial_order_fn, Args...>,std::invocable<__partial_order_fn&, Args...>иstd::invocable<const __partial_order_fn&, Args...>.
Иначе, оператор вызова функции __partial_order_fn не участвует в разрешении перегрузки.
Пример
| Этот раздел не завершён Причина: нет примера |
Смотрите также
(C++20) |
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов, невзаимозаменяемый и допускает несравнимые значения (класс) |
(C++20) |
выполняет трёхстороннее сравнение и возвращает результат типа std::strong_ordering (объект точки настройки) |
(C++20) |
выполняет трёхстороннее сравнение и возвращает результат типа std::weak_ordering (объект точки настройки) |
выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering, даже если operator<=> недоступен (объект точки настройки) |