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