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