1 // Test for reversed candidates. 2 // { dg-do run { target c++2a } } 3 4 #include <compare> 5 6 struct D 7 { 8 int i; 9 auto operator<=>(int x) const { return i<=>x; } 10 bool operator== (int x) const { return i==x; } 11 }; 12 13 #define assert(X) do { if (!(X)) __builtin_abort(); } while (0) 14 main()15int main() 16 { 17 D d{42}; 18 int d1 = 42; 19 int d2 = 24; 20 21 assert (is_eq (d <=> d1)); 22 assert (is_eq (d1 <=> d)); 23 assert (is_lteq (d <=> d1)); 24 assert (is_lteq (d1 <=> d)); 25 assert (is_gteq (d <=> d1)); 26 assert (is_gteq (d1 <=> d)); 27 assert (is_lt (d2 <=> d)); 28 assert (is_lteq (d2 <=> d)); 29 assert (is_gt (d <=> d2)); 30 assert (is_gteq (d <=> d2)); 31 32 assert (d == d1); 33 assert (d1 == d); 34 assert (!(d2 == d)); 35 assert (!(d == d2)); 36 assert (d != d2); 37 assert (d2 != d); 38 assert (!(d != d1)); 39 assert (!(d1 != d)); 40 41 assert (d2 < d); 42 assert (d2 <= d); 43 assert (d1 <= d); 44 assert (d > d2); 45 assert (d >= d2); 46 assert (d >= d1); 47 assert (d <= d1); 48 } 49