Spec-Zone.ru › C++

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 не участвует в разрешении перегрузки.

Пример

См. также

partial_ordering
(C++20)
тип результата 3-стороннего сравнения, который поддерживает все 6 операторов, не является замещаемым и допускает несравнимые значения
(класс)
strong_order
(C++20)
выполняет 3-стороннее сравнение и возвращает результат типа std::strong_ordering
(объект точки кастомизации)
weak_order
(C++20)
выполняет 3-стороннее сравнение и возвращает результат типа std::weak_ordering
(объект точки кастомизации)
compare_partial_order_fallback
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API