https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100903
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
It could also help to overload the comparison operators with constrained
deleted overloads, like so:
template<typename _Tp>
concept __not_literal_zero = !convertible_to<_Tp, __unspec>;
friend constexpr bool
operator==(partial_ordering, __cmp_cat::__not_literal_zero auto) = delete;
friend constexpr void
operator<=>(partial_ordering, __cmp_cat::__not_literal_zero auto) = delete;
With that the "no match for 'operator<'" error (and its eight accompanying
notes) become:
cmp.cc:7:15: error: use of deleted function 'constexpr void
std::operator<=>(partial_ordering, auto:3) [with auto:3 = long int;
partial_ordering = partial_ordering]'
7 | return po > 0L;
| ^~
/home/jwakely/gcc/14/include/c++/14.0.0/compare:160:5: note: declared here
160 | operator<=>(partial_ordering, __cmp_cat::__not_literal_zero auto) =
delete;
| ^~~~~~~~