Пространства имён
Варианты
Действия

std::partial_order

Материал из cppreference.com
< cpp‎ | utility
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
partial_order
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Определено в заголовочном файле <compare>
inlinenamespace/* не указано */{

    inlineconstexpr/* не указано */ partial_order =/* не указано */;

}
(начиная с C++20)
Сигнатура вызова
template<class T, class U >

    requires /* смотрите ниже */
constexprstd::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 модели

Иначе, оператор вызова функции __partial_order_fn не участвует в разрешении перегрузки.

[править]Пример

[править]Смотрите также

тип результата трёхстороннего сравнения, который поддерживает все 6 операторов, невзаимозаменяемый и допускает несравнимые значения
(класс)[править]
выполняет трёхстороннее сравнение и возвращает результат типа std::strong_ordering
(объект точки настройки)[править]
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::weak_ordering
(объект точки настройки)[править]
выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering, даже если operator<=> недоступен
(объект точки настройки)[править]
close