Spec-Zone.ru › C++

std::compare_partial_order_fallback

Определён в заголовке <compare>
inline namespace /* unspecified */ {
    inline constexpr /* unspecified */
        compare_partial_order_fallback = /* unspecified */;
}
(начиная с C++20)
Сигнатура вызова
template< class T, class U >
    requires /* see below */
constexpr std::partial_ordering
    compare_partial_order_fallback( T&& t, U&& u ) noexcept(/* see below */);
(начиная с 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), если это корректное выражение;
  • в противном случае t == u ? std::partial_ordering::equivalent :t < u ? std::partial_ordering::less :u < t ? std::partial_ordering::greater :         std::partial_ordering::unordered, если выражения t == u, t < u и u < t корректны и каждое из decltype(t==u), decltype(t<u) и decltype(u<t) удовлетворяет требованиям boolean-testable, за исключением того, что t и u вычисляются только один раз.

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

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

Имя std::compare_partial_order_fallback обозначает объект точки настройки — константный функциональный объект литерального типа класса, удовлетворяющего требованиям semiregular. Подробности см. в разделе CustomizationPointObject.

Пример

Сведения об исправлениях ошибок

Следующие отчёты об исправлениях, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.

DR Применение к Опубликованное поведение Корректное поведение
LWG 2114
(P2167R3)
C++20 механизм резервного варианта требовал только,
чтобы возвращаемые типы преобразовывались в bool
ограничения усилены
LWG 3465 C++20 механизм резервного варианта не требовал корректности u < t корректность требуется
LWG 4157 C++20 P2167R3 отменил решение по вопросу LWG 3465 решение восстановлено

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/compare/compare_partial_order_fallback

Spec-Zone.ru

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