https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106802
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Aaron Graham from comment #0) > Even though `std::strong_ordering::less < 0` is perfectly legal and > well-formed. I disagree. [cmp.categories.pre] p3 says: The relational and equality operators for the comparison category types are specified with an anonymous parameter of unspecified type. This type shall be selected by the implementation such that these parameters can accept literal 0 as a corresponding argument. When the comparison happens inside std::less<>::operator() it's not being compared with a literal 0, it's an lvalue of type int by that point. That isn't required to work. The version with nullptr isn't required to work either (so libc++ is correct to reject that).