cpp/utility/compare/compare strong order fallback

Performs three-way comparison on subexpressions and  and produces a result of type, even if the operator  is unavailable.

If and  are the same type,  is expression-equivalent to:
 * , if it is a well-formed expression;
 * otherwise,
 * if the expressions and  are both well-formed and each of  and  models, except that  and  are evaluated only once.

In all other cases, is ill-formed, which can result in substitution failure when it appears in the immediate context of a template instantiation.