xref: /llvm-project/libcxx/test/std/containers/sequences/array/compare.verify.cpp (revision d07fdf9779f7dead2828cfb18bafbd9a2c085920)
1*254986d2SHristo Hristov //===----------------------------------------------------------------------===//
2*254986d2SHristo Hristov //
3*254986d2SHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*254986d2SHristo Hristov // See https://llvm.org/LICENSE.txt for license information.
5*254986d2SHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*254986d2SHristo Hristov //
7*254986d2SHristo Hristov //===----------------------------------------------------------------------===//
8*254986d2SHristo Hristov 
9*254986d2SHristo Hristov // <array>
10*254986d2SHristo Hristov 
11*254986d2SHristo Hristov // template <class T, size_t N>
12*254986d2SHristo Hristov //   bool operator==(const array<T,N>& x, const array<T,N>& y);    // constexpr in C++20
13*254986d2SHristo Hristov // template <class T, size_t N>
14*254986d2SHristo Hristov //   bool operator!=(const array<T,N>& x, const array<T,N>& y);    // removed in C++20
15*254986d2SHristo Hristov // template <class T, size_t N>
16*254986d2SHristo Hristov //   bool operator<(const array<T,N>& x, const array<T,N>& y);     // removed in C++20
17*254986d2SHristo Hristov // template <class T, size_t N>
18*254986d2SHristo Hristov //   bool operator>(const array<T,N>& x, const array<T,N>& y);     // removed in C++20
19*254986d2SHristo Hristov // template <class T, size_t N>
20*254986d2SHristo Hristov //   bool operator<=(const array<T,N>& x, const array<T,N>& y);    // removed in C++20
21*254986d2SHristo Hristov // template <class T, size_t N>
22*254986d2SHristo Hristov //   bool operator>=(const array<T,N>& x, const array<T,N>& y);    // removed in C++20
23*254986d2SHristo Hristov 
24*254986d2SHristo Hristov #include <array>
25*254986d2SHristo Hristov 
26*254986d2SHristo Hristov #include "test_macros.h"
27*254986d2SHristo Hristov 
28*254986d2SHristo Hristov template <int>
29*254986d2SHristo Hristov struct NoCompare {};
30*254986d2SHristo Hristov 
31*254986d2SHristo Hristov int main(int, char**) {
32*254986d2SHristo Hristov   {
33*254986d2SHristo Hristov     typedef NoCompare<0> T;
34*254986d2SHristo Hristov     typedef std::array<T, 3> C;
35*254986d2SHristo Hristov     C c1 = {{}};
36*254986d2SHristo Hristov     // expected-error@*:* 2 {{invalid operands to binary expression}}
37*254986d2SHristo Hristov     TEST_IGNORE_NODISCARD(c1 == c1);
38*254986d2SHristo Hristov     TEST_IGNORE_NODISCARD(c1 < c1);
39*254986d2SHristo Hristov   }
40*254986d2SHristo Hristov   {
41*254986d2SHristo Hristov     typedef NoCompare<1> T;
42*254986d2SHristo Hristov     typedef std::array<T, 3> C;
43*254986d2SHristo Hristov     C c1 = {{}};
44*254986d2SHristo Hristov     // expected-error@*:* 2 {{invalid operands to binary expression}}
45*254986d2SHristo Hristov     TEST_IGNORE_NODISCARD(c1 != c1);
46*254986d2SHristo Hristov     TEST_IGNORE_NODISCARD(c1 > c1);
47*254986d2SHristo Hristov   }
48*254986d2SHristo Hristov   {
49*254986d2SHristo Hristov     typedef NoCompare<2> T;
50*254986d2SHristo Hristov     typedef std::array<T, 0> C;
51*254986d2SHristo Hristov     C c1 = {{}};
52*254986d2SHristo Hristov     // expected-error@*:* 2 {{invalid operands to binary expression}}
53*254986d2SHristo Hristov     TEST_IGNORE_NODISCARD(c1 == c1);
54*254986d2SHristo Hristov     TEST_IGNORE_NODISCARD(c1 < c1);
55*254986d2SHristo Hristov   }
56*254986d2SHristo Hristov 
57*254986d2SHristo Hristov   return 0;
58*254986d2SHristo Hristov }
59