1 // { dg-do compile { target c++20 } }
2 // { dg-add-options no_pch }
4 // Copyright (C) 2019-2025 Free Software Foundation, Inc.
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING3. If not see
19 // <http://www.gnu.org/licenses/>.
23 #ifndef __cpp_lib_array_constexpr
24 # error "Feature test macro for array constexpr is missing in <array>"
25 #elif __cpp_lib_array_constexpr < 201806L
26 # error "Feature test macro for array constexpr has wrong value in <array>"
29 constexpr std::array
<int, 3> a1
{{1, 2, 3}};
30 constexpr std::array
<int, 3> a2
{{4, 5, 6}};
31 constexpr std::array
<int, 3> a3
{{1, 2, 4}};
32 constexpr std::array
<int, 3> a4
{{1, 3, 3}};
34 static_assert(a1
== a1
);
35 static_assert(a1
!= a2
);
36 static_assert(a1
< a3
);
37 static_assert(a4
> a1
);
38 static_assert(a1
<= a3
);
39 static_assert(a4
>= a1
);
40 static_assert(std::is_eq(a1
<=> a1
));
41 static_assert(std::is_neq(a1
<=> a2
));
42 static_assert(std::is_lt(a1
<=> a3
));
43 static_assert(std::is_gt(a4
<=> a1
));
45 constexpr std::array
<unsigned char, 3> a5
{{1, 2, 3}};
46 constexpr std::array
<unsigned char, 3> a6
{{4, 5, 6}};
47 constexpr std::array
<unsigned char, 3> a7
{{1, 2, 4}};
48 constexpr std::array
<unsigned char, 3> a8
{{1, 3, 3}};
50 static_assert(a5
== a5
);
51 static_assert(a5
!= a6
);
52 static_assert(a5
< a7
);
53 static_assert(a8
> a5
);
54 static_assert(a5
<= a7
);
55 static_assert(a8
>= a5
);
56 static_assert(std::is_eq(a5
<=> a5
));
57 static_assert(std::is_neq(a5
<=> a6
));
58 static_assert(std::is_lt(a5
<=> a7
));
59 static_assert(std::is_gt(a8
<=> a5
));