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

source code of libcxx/test/std/containers/sequences/array/compare.verify.cpp