1 // { dg-do run { target c++2a } } 2 3 #include <compare> 4 5 #define assert(X) do { if (!(X)) __builtin_abort(); } while(0) 6 main()7int main() 8 { 9 { 10 constexpr auto v = 1 <=> 2; 11 static_assert (__is_same_as (decltype (v), const std::strong_ordering)); 12 static_assert (!is_eq (v)); 13 static_assert (is_neq (v)); 14 static_assert (is_lt (v)); 15 static_assert (is_lteq (v)); 16 static_assert (!is_gt (v)); 17 static_assert (!is_gteq (v)); 18 } 19 20 { 21 enum E { a = 0 }; 22 constexpr auto v = E::a <=> 1; 23 static_assert (__is_same_as (decltype (v), const std::strong_ordering)); 24 static_assert (!is_eq (v)); 25 static_assert (is_neq (v)); 26 static_assert (is_lt (v)); 27 static_assert (is_lteq (v)); 28 static_assert (!is_gt (v)); 29 static_assert (!is_gteq (v)); 30 } 31 32 { 33 enum class E { a, b }; 34 constexpr auto v = E::a <=> E::b; 35 static_assert (__is_same_as (decltype (v), const std::strong_ordering)); 36 static_assert (!is_eq (v)); 37 static_assert (is_neq (v)); 38 static_assert (is_lt (v)); 39 static_assert (is_lteq (v)); 40 static_assert (!is_gt (v)); 41 static_assert (!is_gteq (v)); 42 } 43 44 { 45 int ar[2]; 46 constexpr auto v = &ar[1] <=> &ar[0]; 47 static_assert (__is_same_as (decltype (v), const std::strong_ordering)); 48 static_assert (!is_eq (v)); 49 static_assert (is_neq (v)); 50 static_assert (!is_lt (v)); 51 static_assert (!is_lteq (v)); 52 static_assert (is_gt (v)); 53 static_assert (is_gteq (v)); 54 } 55 56 { 57 constexpr auto v = 3.14 <=> 3.14; 58 static_assert (__is_same_as (decltype (v), const std::partial_ordering)); 59 static_assert (is_eq (v)); 60 static_assert (!is_neq (v)); 61 static_assert (!is_lt (v)); 62 static_assert (is_lteq (v)); 63 static_assert (!is_gt (v)); 64 static_assert (is_gteq (v)); 65 } 66 } 67