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 // <tuple> 10 11 // template <class... Types> class tuple; 12 13 // template<class... TTypes, class... UTypes> 14 // bool 15 // operator==(const tuple<TTypes...>& t, const tuple<UTypes...>& u); 16 17 // UNSUPPORTED: c++98, c++03 18 19 #include <tuple> 20 #include <string> 21 #include <cassert> 22 23 #include "test_macros.h" 24 25 int main(int, char**) 26 { 27 { 28 typedef std::tuple<> T1; 29 typedef std::tuple<> T2; 30 const T1 t1; 31 const T2 t2; 32 assert(t1 == t2); 33 assert(!(t1 != t2)); 34 } 35 { 36 typedef std::tuple<int> T1; 37 typedef std::tuple<double> T2; 38 const T1 t1(1); 39 const T2 t2(1.1); 40 assert(!(t1 == t2)); 41 assert(t1 != t2); 42 } 43 { 44 typedef std::tuple<int> T1; 45 typedef std::tuple<double> T2; 46 const T1 t1(1); 47 const T2 t2(1); 48 assert(t1 == t2); 49 assert(!(t1 != t2)); 50 } 51 { 52 typedef std::tuple<int, double> T1; 53 typedef std::tuple<double, long> T2; 54 const T1 t1(1, 2); 55 const T2 t2(1, 2); 56 assert(t1 == t2); 57 assert(!(t1 != t2)); 58 } 59 { 60 typedef std::tuple<int, double> T1; 61 typedef std::tuple<double, long> T2; 62 const T1 t1(1, 2); 63 const T2 t2(1, 3); 64 assert(!(t1 == t2)); 65 assert(t1 != t2); 66 } 67 { 68 typedef std::tuple<int, double> T1; 69 typedef std::tuple<double, long> T2; 70 const T1 t1(1, 2); 71 const T2 t2(1.1, 2); 72 assert(!(t1 == t2)); 73 assert(t1 != t2); 74 } 75 { 76 typedef std::tuple<int, double> T1; 77 typedef std::tuple<double, long> T2; 78 const T1 t1(1, 2); 79 const T2 t2(1.1, 3); 80 assert(!(t1 == t2)); 81 assert(t1 != t2); 82 } 83 { 84 typedef std::tuple<long, int, double> T1; 85 typedef std::tuple<double, long, int> T2; 86 const T1 t1(1, 2, 3); 87 const T2 t2(1, 2, 3); 88 assert(t1 == t2); 89 assert(!(t1 != t2)); 90 } 91 { 92 typedef std::tuple<long, int, double> T1; 93 typedef std::tuple<double, long, int> T2; 94 const T1 t1(1, 2, 3); 95 const T2 t2(1.1, 2, 3); 96 assert(!(t1 == t2)); 97 assert(t1 != t2); 98 } 99 { 100 typedef std::tuple<long, int, double> T1; 101 typedef std::tuple<double, long, int> T2; 102 const T1 t1(1, 2, 3); 103 const T2 t2(1, 3, 3); 104 assert(!(t1 == t2)); 105 assert(t1 != t2); 106 } 107 { 108 typedef std::tuple<long, int, double> T1; 109 typedef std::tuple<double, long, int> T2; 110 const T1 t1(1, 2, 3); 111 const T2 t2(1, 2, 4); 112 assert(!(t1 == t2)); 113 assert(t1 != t2); 114 } 115 { 116 typedef std::tuple<long, int, double> T1; 117 typedef std::tuple<double, long, int> T2; 118 const T1 t1(1, 2, 3); 119 const T2 t2(1, 3, 2); 120 assert(!(t1 == t2)); 121 assert(t1 != t2); 122 } 123 { 124 typedef std::tuple<long, int, double> T1; 125 typedef std::tuple<double, long, int> T2; 126 const T1 t1(1, 2, 3); 127 const T2 t2(1.1, 2, 2); 128 assert(!(t1 == t2)); 129 assert(t1 != t2); 130 } 131 { 132 typedef std::tuple<long, int, double> T1; 133 typedef std::tuple<double, long, int> T2; 134 const T1 t1(1, 2, 3); 135 const T2 t2(1.1, 3, 3); 136 assert(!(t1 == t2)); 137 assert(t1 != t2); 138 } 139 { 140 typedef std::tuple<long, int, double> T1; 141 typedef std::tuple<double, long, int> T2; 142 const T1 t1(1, 2, 3); 143 const T2 t2(1.1, 3, 2); 144 assert(!(t1 == t2)); 145 assert(t1 != t2); 146 } 147 #if TEST_STD_VER > 11 148 { 149 typedef std::tuple<long, int, double> T1; 150 typedef std::tuple<double, long, int> T2; 151 constexpr T1 t1(1, 2, 3); 152 constexpr T2 t2(1.1, 3, 2); 153 static_assert(!(t1 == t2), ""); 154 static_assert(t1 != t2, ""); 155 } 156 #endif 157 158 return 0; 159 } 160