| // Test virtual <=>. | |
| // { dg-do run { target c++20 } } | |
| #include <compare> | |
| 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(); | |
| } |