std::partial_order
Определено в заголовочном файле <compare> | ||
inlinenamespace/* не указано */{ inlineconstexpr/* не указано */ partial_order =/* не указано */; | (начиная с C++20) | |
Сигнатура вызова | ||
template<class T, class U > requires /* смотрите ниже */ | ||
Сравнивает два значения, используя трёхстороннее сравнение, и выдаёт результат типа 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_ordering(partial_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<=> недоступен (объект точки настройки) |