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