The three comparison category types (
[cmp.categories])
(the types
std::strong_ordering,
std::weak_ordering, and
std::partial_ordering)
are not predefined;
if a standard library declaration (
[compare.syn],
[std.modules])
of such a class type does not precede (
[basic.lookup.general])
a use of that type —
even an implicit use in which the type is not named
(e.g., via the
auto specifier (
[dcl.spec.auto])
in a defaulted three-way comparison (
[class.spaceship])
or use of the built-in operator) — the program is ill-formed
.