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

std::compare_partial_order_fallback

Материал из cppreference.com
< cpp‎ | utility
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
compare_partial_order_fallback
(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/* не указано */
        compare_partial_order_fallback =/* не указано */;

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

    requires /* смотрите ниже */
constexprstd::partial_ordering

    compare_partial_order_fallback(T&& t, U&& u)noexcept(/* смотрите ниже */);
(начиная с C++20)

Выполняет трёхстороннее сравнение подвыраженийt и u и выдаёт результат типа std::partial_ordering, даже если оператор <=> недоступен.

Если std::decay_t<T> и std::decay_t<U>> одного типа, std::compare_partial_order_fallback(t, u)эквивалентно выражению:

  • std::partial_order(t, u), если это корректное выражение;
  • иначе, {{c multi

1|t == u ? std::partial_ordering::equivalent : 2|t < u  ? std::partial_ordering::less : 3|u < t  ? std::partial_ordering::greater : 4| std::partial_ordering::unordered }}

если все выражения t == u, t < u и u < t корректны и каждое из decltype(t == u) и decltype(t < u) моделирует boolean-testable, за исключением того, что t и u оцениваются только один раз.

Во всех остальных случаях std::compare_partial_order_fallback(t, u) имеет неправильный формат, что может привести к сбою подстановки при появлении в непосредственном контексте инстанцирования шаблона.

Содержание

[править]Выражение эквивалентности

Выражение e это выражение эквивалентности для выражения f, если

Объекты точек настройки

Имя std::compare_partial_order_fallback обозначает объект точки настройки, который является константным функциональным объектомлитерального классового типа semiregular. В целях наглядности версия этого типа без cv-квалификации обозначается как __compare_partial_order_fallback_fn.

Все экземпляры __compare_partial_order_fallback_fn равны. Эффекты от вызова разных экземпляров типа __compare_partial_order_fallback_fn для одних и тех же аргументов эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, lvalue или rvalue, и является ли оно константным или нет (однако volatile-квалифицированный экземпляр не требуется для вызова). Таким образом, std::compare_partial_order_fallback можно свободно копировать, а его копии можно использовать взаимозаменяемо.

Учитывая набор типов Args..., если std::declval<Args>()... соответствует требованиям к аргументам для std::compare_partial_order_fallback выше, __compare_partial_order_fallback_fn модели

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

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

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2114 C++20 резервный механизм требовал только, чтобы возвращаемые типы
были преобразованы в bool
ограничения усилены
LWG 3465 C++20 механизм отката при сбое не требовал, чтобы u < t было корректным требует

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

выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering
(объект точки настройки)[править]
close