std::compare_partial_order_fallback
| Определено в заголовочном файле <compare>
|
||
inline namespace /* не указано */ { inline constexpr /* не указано */ compare_partial_order_fallback = /* не указано */; } |
(начиная с C++20) | |
| Сигнатура вызова |
||
template< class T, class U > requires /* смотрите ниже */ constexpr std::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, если
eиfимеют одинаковые эффекты, и- либо оба являются константными подвыражениями, либо ни одно из них не является константным подвыражением, и
- либо оба являются потенциально генерирующими исключение либо ни одно из них не является потенциально генерирующим исключение (т.е.
noexcept(e) == noexcept(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 модели
std::invocable<__compare_partial_order_fallback_fn, Args...>,std::invocable<const __compare_partial_order_fallback_fn, Args...>,std::invocable<__compare_partial_order_fallback_fn&, Args...>иstd::invocable<const __compare_partial_order_fallback_fn&, Args...>.
Иначе, оператор вызова функции __compare_partial_order_fallback_fn не участвует в разрешении перегрузки.
Пример
| Этот раздел не завершён Причина: нет примера |
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2114 | C++20 | резервный механизм требовал только, чтобы возвращаемые типы были преобразованы в bool
|
ограничения усилены |
| LWG 3465 | C++20 | механизм отката при сбое не требовал, чтобы u < t было корректным
|
требует |
Смотрите также
(C++20) |
выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering (объект точки настройки) |