std::partial_order
Определено в заголовочном файле <compare> | ||
|---|---|---|
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ partial_order = /* unspecified */;
}
| (с C++20) | |
| Подпись вызова | ||
template< class T, class U >
requires /* see below */
constexpr std::partial_ordering
partial_order( T&& t, U&& u ) noexcept(/* see below */);
|
Сравнивает два значения с помощью 3-стороннего сравнения и возвращает результат типа 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 типа. Для целей иллюстрации неквалифицированная версия его типа обозначается как __partial_order_fn.
Все экземпляры __partial_order_fn равны. Эффекты вызова разных экземпляров типа __partial_order_fn с одними и теми же аргументами эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, lvalue или rvalue, и является ли оно const-квалифицированным или нет (однако, не требуется, чтобы экземпляр с 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) | тип результата 3-стороннего сравнения, который поддерживает все 6 операторов, не является замещаемым и допускает несравнимые значения (класс) |
|
(C++20) | выполняет 3-стороннее сравнение и возвращает результат типа std::strong_ordering(объект точки кастомизации) |
|
(C++20) | выполняет 3-стороннее сравнение и возвращает результат типа std::weak_ordering(объект точки кастомизации) |
|
(C++20) | выполняет 3-стороннее сравнение и возвращает результат типа std::partial_ordering, даже если operator<=> недоступен(объект точки кастомизации) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/compare/partial_order