From cppreference.com
Defined in header
inlinenamespace/* unspecified */{inlineconstexpr/* unspecified */compare_strong_order_fallback=/* unspecified */;}(since C++20)Call signature
template<classT,classU>requires/* see below */constexprstd::strong_orderingcompare_strong_order_fallback(T&&t,U&&u)noexcept(/* see below */);(since C++20)Performs three-way comparison on
t and u and produces a result of type
, even if the operator <=> is unavailable.
If std::decay_t<T> and std::decay_t<U> are the same type, std::compare_strong_order_fallback(t,u) is
to:
std::strong_order(t,u), if it is a well-formed expression;
otherwise, t==u?std::strong_ordering::equal:
t<u?std::strong_ordering::less:
std::strong_ordering::greater
if the expressions t==u and t<u are both well-formed and each of decltype(t==u) and decltype(t<u) models
, except that t and u are evaluated only once.In all other cases, std::compare_strong_order_fallback(t,u) is ill-formed, which can result in
when it appears in the immediate context of a template instantiation.
Customization point objects
The name std::compare_strong_order_fallback denotes a customization point object, which is a const
of a
class type. See
for details.
Example
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
(
) C++20 the fallback mechanism only required
return types to be convertible to boolconstraints strengthened See also
(C++20)
performs 3-way comparison and produces a result of type std::strong_ordering
(customization point object)