17 Language support library [language.support]

17.11 Comparisons [cmp]

17.11.5 Result of three-way comparison [cmp.result]

The behavior of a program that adds specializations for the compare_­three_­way_­result template defined in this subclause is undefined.
For the compare_­three_­way_­result type trait applied to the types T and U, let t and u denote lvalues of types const remove_­reference_­t<T> and const remove_­reference_­t<U>, respectively.
If the expression t <=> u is well-formed when treated as an unevaluated operand ([expr.context]), the member typedef-name type denotes the type decltype(t <=> u).
Otherwise, there is no member type.