blob: 235e0020caf25f82c57d4c189724de23ce011723 [file] [log] [blame]
// { dg-do run { target c++20 } }
// { dg-options "" }
#include <compare>
struct C {
int y;
int x[4];
auto operator<=>(C const&) const = default;
};
struct D {
int y;
int x[1];
auto operator<=>(D const&) const = default;
};
struct E {
int y;
int x[0];
auto operator<=>(E const&) const = default;
};
int
main ()
{
constexpr C c1 = { 1, { 2, 3, 4, 5 } };
constexpr C c2 = { 1, { 2, 3, 5, 4 } };
constexpr C c3 = { 1, { 2, 2, 6, 7 } };
static_assert (c1 < c2);
static_assert (c3 < c1);
constexpr D d1 = { 1, { 2 } };
constexpr D d2 = { 1, { 3 } };
constexpr D d3 = { 1, { 1 } };
static_assert (d1 < d2);
static_assert (d3 < d1);
constexpr E e1 = { 1, {} };
constexpr E e2 = { 2, {} };
constexpr E e3 = { 1, {} };
static_assert (e1 < e2);
static_assert (e1 == e3);
C c4 = { 1, { 2, 3, 4, 5 } };
C c5 = { 1, { 2, 3, 5, 4 } };
C c6 = { 1, { 2, 2, 6, 7 } };
if (c4 >= c5 || c6 >= c4)
__builtin_abort ();
D d4 = { 1, { 2 } };
D d5 = { 1, { 3 } };
D d6 = { 1, { 1 } };
if (d4 >= d5 || d6 >= d4)
__builtin_abort ();
E e4 = { 1, {} };
E e5 = { 2, {} };
E e6 = { 1, {} };
if (e4 >= e5 || e4 != e6)
__builtin_abort ();
}