1*2c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
2*2c6217f2SLouis Dionne //
3*2c6217f2SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2c6217f2SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*2c6217f2SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*2c6217f2SLouis Dionne //
7*2c6217f2SLouis Dionne //===----------------------------------------------------------------------===//
8*2c6217f2SLouis Dionne //
9*2c6217f2SLouis Dionne // WARNING: This test was generated by generate_feature_test_macro_components.py
10*2c6217f2SLouis Dionne // and should not be edited manually.
11*2c6217f2SLouis Dionne //
12*2c6217f2SLouis Dionne // clang-format off
13*2c6217f2SLouis Dionne 
14*2c6217f2SLouis Dionne // <tuple>
15*2c6217f2SLouis Dionne 
16*2c6217f2SLouis Dionne // Test the feature test macros defined by <tuple>
17*2c6217f2SLouis Dionne 
18*2c6217f2SLouis Dionne /*  Constant                     Value
19*2c6217f2SLouis Dionne     __cpp_lib_apply              201603L [C++17]
20*2c6217f2SLouis Dionne     __cpp_lib_constexpr_tuple    201811L [C++20]
21*2c6217f2SLouis Dionne     __cpp_lib_make_from_tuple    201606L [C++17]
22*2c6217f2SLouis Dionne     __cpp_lib_ranges_zip         202110L [C++2b]
23*2c6217f2SLouis Dionne     __cpp_lib_tuple_element_t    201402L [C++14]
24*2c6217f2SLouis Dionne     __cpp_lib_tuples_by_type     201304L [C++14]
25*2c6217f2SLouis Dionne */
26*2c6217f2SLouis Dionne 
27*2c6217f2SLouis Dionne #include <tuple>
28*2c6217f2SLouis Dionne #include "test_macros.h"
29*2c6217f2SLouis Dionne 
30*2c6217f2SLouis Dionne #if TEST_STD_VER < 14
31*2c6217f2SLouis Dionne 
32*2c6217f2SLouis Dionne # ifdef __cpp_lib_apply
33*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should not be defined before c++17"
34*2c6217f2SLouis Dionne # endif
35*2c6217f2SLouis Dionne 
36*2c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_tuple
37*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
38*2c6217f2SLouis Dionne # endif
39*2c6217f2SLouis Dionne 
40*2c6217f2SLouis Dionne # ifdef __cpp_lib_make_from_tuple
41*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should not be defined before c++17"
42*2c6217f2SLouis Dionne # endif
43*2c6217f2SLouis Dionne 
44*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
45*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
46*2c6217f2SLouis Dionne # endif
47*2c6217f2SLouis Dionne 
48*2c6217f2SLouis Dionne # ifdef __cpp_lib_tuple_element_t
49*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should not be defined before c++14"
50*2c6217f2SLouis Dionne # endif
51*2c6217f2SLouis Dionne 
52*2c6217f2SLouis Dionne # ifdef __cpp_lib_tuples_by_type
53*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should not be defined before c++14"
54*2c6217f2SLouis Dionne # endif
55*2c6217f2SLouis Dionne 
56*2c6217f2SLouis Dionne #elif TEST_STD_VER == 14
57*2c6217f2SLouis Dionne 
58*2c6217f2SLouis Dionne # ifdef __cpp_lib_apply
59*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should not be defined before c++17"
60*2c6217f2SLouis Dionne # endif
61*2c6217f2SLouis Dionne 
62*2c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_tuple
63*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
64*2c6217f2SLouis Dionne # endif
65*2c6217f2SLouis Dionne 
66*2c6217f2SLouis Dionne # ifdef __cpp_lib_make_from_tuple
67*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should not be defined before c++17"
68*2c6217f2SLouis Dionne # endif
69*2c6217f2SLouis Dionne 
70*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
71*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
72*2c6217f2SLouis Dionne # endif
73*2c6217f2SLouis Dionne 
74*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuple_element_t
75*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should be defined in c++14"
76*2c6217f2SLouis Dionne # endif
77*2c6217f2SLouis Dionne # if __cpp_lib_tuple_element_t != 201402L
78*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should have the value 201402L in c++14"
79*2c6217f2SLouis Dionne # endif
80*2c6217f2SLouis Dionne 
81*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
82*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++14"
83*2c6217f2SLouis Dionne # endif
84*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
85*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++14"
86*2c6217f2SLouis Dionne # endif
87*2c6217f2SLouis Dionne 
88*2c6217f2SLouis Dionne #elif TEST_STD_VER == 17
89*2c6217f2SLouis Dionne 
90*2c6217f2SLouis Dionne # ifndef __cpp_lib_apply
91*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should be defined in c++17"
92*2c6217f2SLouis Dionne # endif
93*2c6217f2SLouis Dionne # if __cpp_lib_apply != 201603L
94*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should have the value 201603L in c++17"
95*2c6217f2SLouis Dionne # endif
96*2c6217f2SLouis Dionne 
97*2c6217f2SLouis Dionne # ifdef __cpp_lib_constexpr_tuple
98*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
99*2c6217f2SLouis Dionne # endif
100*2c6217f2SLouis Dionne 
101*2c6217f2SLouis Dionne # ifndef __cpp_lib_make_from_tuple
102*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should be defined in c++17"
103*2c6217f2SLouis Dionne # endif
104*2c6217f2SLouis Dionne # if __cpp_lib_make_from_tuple != 201606L
105*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should have the value 201606L in c++17"
106*2c6217f2SLouis Dionne # endif
107*2c6217f2SLouis Dionne 
108*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
109*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
110*2c6217f2SLouis Dionne # endif
111*2c6217f2SLouis Dionne 
112*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuple_element_t
113*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should be defined in c++17"
114*2c6217f2SLouis Dionne # endif
115*2c6217f2SLouis Dionne # if __cpp_lib_tuple_element_t != 201402L
116*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should have the value 201402L in c++17"
117*2c6217f2SLouis Dionne # endif
118*2c6217f2SLouis Dionne 
119*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
120*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++17"
121*2c6217f2SLouis Dionne # endif
122*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
123*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++17"
124*2c6217f2SLouis Dionne # endif
125*2c6217f2SLouis Dionne 
126*2c6217f2SLouis Dionne #elif TEST_STD_VER == 20
127*2c6217f2SLouis Dionne 
128*2c6217f2SLouis Dionne # ifndef __cpp_lib_apply
129*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should be defined in c++20"
130*2c6217f2SLouis Dionne # endif
131*2c6217f2SLouis Dionne # if __cpp_lib_apply != 201603L
132*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should have the value 201603L in c++20"
133*2c6217f2SLouis Dionne # endif
134*2c6217f2SLouis Dionne 
135*2c6217f2SLouis Dionne # ifndef __cpp_lib_constexpr_tuple
136*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should be defined in c++20"
137*2c6217f2SLouis Dionne # endif
138*2c6217f2SLouis Dionne # if __cpp_lib_constexpr_tuple != 201811L
139*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20"
140*2c6217f2SLouis Dionne # endif
141*2c6217f2SLouis Dionne 
142*2c6217f2SLouis Dionne # ifndef __cpp_lib_make_from_tuple
143*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should be defined in c++20"
144*2c6217f2SLouis Dionne # endif
145*2c6217f2SLouis Dionne # if __cpp_lib_make_from_tuple != 201606L
146*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should have the value 201606L in c++20"
147*2c6217f2SLouis Dionne # endif
148*2c6217f2SLouis Dionne 
149*2c6217f2SLouis Dionne # ifdef __cpp_lib_ranges_zip
150*2c6217f2SLouis Dionne #   error "__cpp_lib_ranges_zip should not be defined before c++2b"
151*2c6217f2SLouis Dionne # endif
152*2c6217f2SLouis Dionne 
153*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuple_element_t
154*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should be defined in c++20"
155*2c6217f2SLouis Dionne # endif
156*2c6217f2SLouis Dionne # if __cpp_lib_tuple_element_t != 201402L
157*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should have the value 201402L in c++20"
158*2c6217f2SLouis Dionne # endif
159*2c6217f2SLouis Dionne 
160*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
161*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++20"
162*2c6217f2SLouis Dionne # endif
163*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
164*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++20"
165*2c6217f2SLouis Dionne # endif
166*2c6217f2SLouis Dionne 
167*2c6217f2SLouis Dionne #elif TEST_STD_VER > 20
168*2c6217f2SLouis Dionne 
169*2c6217f2SLouis Dionne # ifndef __cpp_lib_apply
170*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should be defined in c++2b"
171*2c6217f2SLouis Dionne # endif
172*2c6217f2SLouis Dionne # if __cpp_lib_apply != 201603L
173*2c6217f2SLouis Dionne #   error "__cpp_lib_apply should have the value 201603L in c++2b"
174*2c6217f2SLouis Dionne # endif
175*2c6217f2SLouis Dionne 
176*2c6217f2SLouis Dionne # ifndef __cpp_lib_constexpr_tuple
177*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should be defined in c++2b"
178*2c6217f2SLouis Dionne # endif
179*2c6217f2SLouis Dionne # if __cpp_lib_constexpr_tuple != 201811L
180*2c6217f2SLouis Dionne #   error "__cpp_lib_constexpr_tuple should have the value 201811L in c++2b"
181*2c6217f2SLouis Dionne # endif
182*2c6217f2SLouis Dionne 
183*2c6217f2SLouis Dionne # ifndef __cpp_lib_make_from_tuple
184*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should be defined in c++2b"
185*2c6217f2SLouis Dionne # endif
186*2c6217f2SLouis Dionne # if __cpp_lib_make_from_tuple != 201606L
187*2c6217f2SLouis Dionne #   error "__cpp_lib_make_from_tuple should have the value 201606L in c++2b"
188*2c6217f2SLouis Dionne # endif
189*2c6217f2SLouis Dionne 
190*2c6217f2SLouis Dionne # if !defined(_LIBCPP_VERSION)
191*2c6217f2SLouis Dionne #   ifndef __cpp_lib_ranges_zip
192*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_zip should be defined in c++2b"
193*2c6217f2SLouis Dionne #   endif
194*2c6217f2SLouis Dionne #   if __cpp_lib_ranges_zip != 202110L
195*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_zip should have the value 202110L in c++2b"
196*2c6217f2SLouis Dionne #   endif
197*2c6217f2SLouis Dionne # else // _LIBCPP_VERSION
198*2c6217f2SLouis Dionne #   ifdef __cpp_lib_ranges_zip
199*2c6217f2SLouis Dionne #     error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
200*2c6217f2SLouis Dionne #   endif
201*2c6217f2SLouis Dionne # endif
202*2c6217f2SLouis Dionne 
203*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuple_element_t
204*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should be defined in c++2b"
205*2c6217f2SLouis Dionne # endif
206*2c6217f2SLouis Dionne # if __cpp_lib_tuple_element_t != 201402L
207*2c6217f2SLouis Dionne #   error "__cpp_lib_tuple_element_t should have the value 201402L in c++2b"
208*2c6217f2SLouis Dionne # endif
209*2c6217f2SLouis Dionne 
210*2c6217f2SLouis Dionne # ifndef __cpp_lib_tuples_by_type
211*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should be defined in c++2b"
212*2c6217f2SLouis Dionne # endif
213*2c6217f2SLouis Dionne # if __cpp_lib_tuples_by_type != 201304L
214*2c6217f2SLouis Dionne #   error "__cpp_lib_tuples_by_type should have the value 201304L in c++2b"
215*2c6217f2SLouis Dionne # endif
216*2c6217f2SLouis Dionne 
217*2c6217f2SLouis Dionne #endif // TEST_STD_VER > 20
218*2c6217f2SLouis Dionne 
219