// Test virtual <=>. // { dg-do run { target c++20 } } #include struct E; struct D { std::partial_ordering operator<=>(const D&) const = default; virtual std::partial_ordering operator<=>(const E&) const = 0; float f; D(float f): f(f) {} }; struct E : D { std::partial_ordering operator<=>(const E&) const override = default; int i; E(float f, int i): D(f), i(i) {} }; int main() { E e1{0.0,42}; E e2{1.0,24}; auto a = e1 <=> e2; if (!is_lt (e1 <=> e2)) __builtin_abort(); }