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 28 template <int> 29 struct NoCompare {}; 30 31 int 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