1 // { dg-options "-std=c++17 -I${srcdir}/g++.dg/cpp1y -I${srcdir}/g++.dg/cpp1y/testinc" }
2 
3 //  C++98 features:
4 
5 #ifndef __cpp_rtti
6 #  error "__cpp_rtti"
7 #elif  __cpp_rtti != 199711
8 #  error "__cpp_rtti != 199711"
9 #endif
10 
11 #ifndef __cpp_exceptions
12 #  error "__cpp_exceptions"
13 #elif  __cpp_exceptions != 199711
14 #  error "__cpp_exceptions != 199711"
15 #endif
16 
17 //  C++11 features:
18 
19 #ifndef __cpp_raw_strings
20 #  error "__cpp_raw_strings"
21 #elif __cpp_raw_strings != 200710
22 #  error "__cpp_raw_strings != 200710"
23 #endif
24 
25 #ifndef __cpp_unicode_literals
26 #  error "__cpp_unicode_literals"
27 #elif __cpp_unicode_literals != 200710
28 #  error "__cpp_unicode_literals != 200710"
29 #endif
30 
31 #ifndef __cpp_user_defined_literals
32 #  error "__cpp_user_defined_literals"
33 #elif __cpp_user_defined_literals != 200809
34 #  error "__cpp_user_defined_literals != 200809"
35 #endif
36 
37 #ifndef __cpp_lambdas
38 #  error "__cpp_lambdas"
39 #elif __cpp_lambdas != 200907
40 #  error "__cpp_lambdas != 200907"
41 #endif
42 
43 #ifndef __cpp_range_based_for
44 #  error "__cpp_range_based_for"
45 #elif __cpp_range_based_for != 201603
46 #  error "__cpp_range_based_for != 201603"
47 #endif
48 
49 #ifndef __cpp_decltype
50 #  error "__cpp_decltype"
51 #elif __cpp_decltype != 200707
52 #  error "__cpp_decltype != 200707"
53 #endif
54 
55 #ifndef __cpp_attributes
56 #  error "__cpp_attributes"
57 #elif __cpp_attributes != 200809
58 #  error "__cpp_attributes != 200809"
59 #endif
60 
61 #ifndef __cpp_rvalue_references
62 #  error "__cpp_rvalue_references"
63 #elif __cpp_rvalue_references != 200610
64 #  error "__cpp_rvalue_references != 200610"
65 #endif
66 
67 #ifndef __cpp_variadic_templates
68 #  error "__cpp_variadic_templates"
69 #elif __cpp_variadic_templates != 200704
70 #  error "__cpp_variadic_templates != 200704"
71 #endif
72 
73 #ifndef __cpp_initializer_lists
74 #  error "__cpp_initializer_lists"
75 #elif __cpp_initializer_lists != 200806
76 #  error "__cpp_initializer_lists != 200806"
77 #endif
78 
79 #ifndef __cpp_delegating_constructors
80 #  error "__cpp_delegating_constructors"
81 #elif __cpp_delegating_constructors != 200604
82 #  error "__cpp_delegating_constructors != 200604"
83 #endif
84 
85 #ifndef __cpp_nsdmi
86 #  error "__cpp_nsdmi"
87 #elif __cpp_nsdmi != 200809
88 #  error "__cpp_nsdmi != 200809"
89 #endif
90 
91 #ifndef __cpp_inheriting_constructors
92 #  error "__cpp_inheriting_constructors"
93 #elif  __cpp_inheriting_constructors!= 201511
94 #  error "__cpp_inheriting_constructors != 201511"
95 #endif
96 
97 #ifndef __cpp_ref_qualifiers
98 #  error "__cpp_ref_qualifiers"
99 #elif __cpp_ref_qualifiers != 200710
100 #  error "__cpp_ref_qualifiers != 200710"
101 #endif
102 
103 #ifndef __cpp_alias_templates
104 #  error "__cpp_alias_templates"
105 #elif __cpp_alias_templates != 200704
106 #  error "__cpp_alias_templates != 200704"
107 #endif
108 
109 #ifndef __cpp_threadsafe_static_init
110 #  error "__cpp_threadsafe_static_init"
111 #elif __cpp_threadsafe_static_init != 200806
112 #  error "__cpp_threadsafe_static_init != 200806"
113 #endif
114 
115 //  C++14 features:
116 
117 #ifndef __cpp_binary_literals
118 #  error "__cpp_binary_literals"
119 #elif __cpp_binary_literals != 201304
120 #  error "__cpp_binary_literals != 201304"
121 #endif
122 
123 #ifndef __cpp_init_captures
124 #  error "__cpp_init_captures"
125 #elif __cpp_init_captures != 201304
126 #  error "__cpp_init_captures != 201304"
127 #endif
128 
129 #ifndef __cpp_generic_lambdas
130 #  error "__cpp_generic_lambdas"
131 #elif __cpp_generic_lambdas != 201304
132 #  error "__cpp_generic_lambdas != 201304"
133 #endif
134 
135 #ifndef __cpp_constexpr
136 #  error "__cpp_constexpr"
137 #elif __cpp_constexpr != 201603
138 #  error "__cpp_constexpr != 201603"
139 #endif
140 
141 #ifndef __cpp_decltype_auto
142 #  error "__cpp_decltype_auto"
143 #elif __cpp_decltype_auto != 201304
144 #  error "__cpp_decltype_auto != 201304"
145 #endif
146 
147 #ifndef __cpp_return_type_deduction
148 #  error "__cpp_return_type_deduction"
149 #elif __cpp_return_type_deduction != 201304
150 #  error "__cpp_return_type_deduction != 201304"
151 #endif
152 
153 #ifndef __cpp_aggregate_nsdmi
154 #  error "__cpp_aggregate_nsdmi"
155 #elif __cpp_aggregate_nsdmi != 201304
156 #  error "__cpp_aggregate_nsdmi != 201304"
157 #endif
158 
159 #ifndef __cpp_variable_templates
160 #  error "__cpp_variable_templates"
161 #elif __cpp_variable_templates != 201304
162 #  error "__cpp_variable_templates != 201304"
163 #endif
164 
165 #ifndef __cpp_digit_separators
166 #  error "__cpp_digit_separators"
167 #elif __cpp_digit_separators != 201309
168 #  error "__cpp_digit_separators != 201309"
169 #endif
170 
171 #ifndef __cpp_sized_deallocation
172 #  error "__cpp_sized_deallocation"
173 #elif __cpp_sized_deallocation != 201309
174 #  error "__cpp_sized_deallocation != 201309"
175 #endif
176 
177 //  GNU VLA support:
178 
179 #ifndef __cpp_runtime_arrays
180 #  error "__cpp_runtime_arrays"
181 #elif __cpp_runtime_arrays != 198712
182 #  error "__cpp_runtime_arrays != 198712"
183 #endif
184 
185 //  C++11 attributes:
186 
187 #ifdef __has_cpp_attribute
188 #  if ! __has_cpp_attribute(noreturn)
189 #    error "__has_cpp_attribute(noreturn)"
190 #  elif __has_cpp_attribute(noreturn) != 200809
191 #    error "__has_cpp_attribute(noreturn) != 200809"
192 #  endif
193 #else
194 #  error "__has_cpp_attribute"
195 #endif
196 
197 //  Attribute carries_dependency not in yet.
198 //#ifdef __has_cpp_attribute
199 //#  if ! __has_cpp_attribute(carries_dependency)
200 //#    error "__has_cpp_attribute(carries_dependency)"
201 //#  elif __has_cpp_attribute(carries_dependency) != 200809
202 //#    error "__has_cpp_attribute(carries_dependency) != 200809"
203 //#  endif
204 //#else
205 //#  error "__has_cpp_attribute"
206 //#endif
207 
208 //  C++14 attributes:
209 
210 #ifdef __has_cpp_attribute
211 #  if ! __has_cpp_attribute(deprecated)
212 #    error "__has_cpp_attribute(deprecated)"
213 #  elif __has_cpp_attribute(deprecated) != 201309
214 #    error "__has_cpp_attribute(deprecated) != 201309"
215 #  endif
216 #else
217 #  error "__has_cpp_attribute"
218 #endif
219 
220 //  Include checks:
221 
222 //  Check for __has_include macro.
223 #ifndef __has_include
224 #  error "__has_include"
225 #endif
226 
227 //  Quoted complex.h should find at least the bracket version (use operator).
228 #if __has_include__ "complex.h"
229 #else
230 #  error "complex.h"
231 #endif
232 
233 //  Try known bracket header (use operator).
234 #if __has_include__(<complex>)
235 #else
236 #  error "<complex>"
237 #endif
238 
239 //  Define and use a macro to invoke the operator.
240 #define sluggo(TXT) __has_include__(TXT)
241 
242 #if sluggo(<complex>)
243 #else
244 #  error "<complex>"
245 #endif
246 
247 #if ! sluggo(<complex>)
248 #  error "<complex>"
249 #else
250 #endif
251 
252 //  Quoted complex.h should find at least the bracket version.
253 #if __has_include("complex.h")
254 #else
255 #  error "complex.h"
256 #endif
257 
258 //  Try known local quote header.
259 #if __has_include("complex_literals.h")
260 #else
261 #  error "\"complex_literals.h\""
262 #endif
263 
264 //  Try nonexistent bracket header.
265 #if __has_include(<stuff>)
266 #  error "<stuff>"
267 #else
268 #endif
269 
270 //  Try nonexistent quote header.
271 #if __has_include("phlegm")
272 #  error "\"phlegm\""
273 #else
274 #endif
275 
276 //  Test __has_include_next.
277 #if __has_include("phoobhar.h")
278 #  include "phoobhar.h"
279 #else
280 #  error "__has_include(\"phoobhar.h\")"
281 #endif
282 
283 //  Try a macro.
284 #define COMPLEX_INC "complex.h"
285 #if __has_include(COMPLEX_INC)
286 #else
287 #  error COMPLEX_INC
288 #endif
289 
290 //  Realistic use of __has_include.
291 #if __has_include(<array>)
292 #  define STD_ARRAY 1
293 #  include <array>
294   template<typename _Tp, size_t _Num>
295     using array = std::array<_Tp, _Num>;
296 #elif __has_include(<tr1/array>)
297 #  define TR1_ARRAY 1
298 #  include <tr1/array>
299   template<typename _Tp, size_t _Num>
300     typedef std::tr1::array<_Tp, _Num> array;
301 #endif
302 
303 // C++17 features:
304 
305 #ifndef __cpp_unicode_characters
306 #  error "__cpp_unicode_characters"
307 #elif __cpp_unicode_characters != 201411
308 #  error "__cpp_unicode_characters != 201411"
309 #endif
310 
311 #ifndef __cpp_static_assert
312 #  error "__cpp_static_assert"
313 #elif __cpp_static_assert != 201411
314 #  error "__cpp_static_assert != 201411"
315 #endif
316 
317 #ifndef __cpp_namespace_attributes
318 #  error "__cpp_namespace_attributes"
319 #elif __cpp_namespace_attributes != 201411
320 #  error "__cpp_namespace_attributes != 201411"
321 #endif
322 
323 #ifndef __cpp_enumerator_attributes
324 #  error "__cpp_enumerator_attributes"
325 #elif __cpp_enumerator_attributes != 201411
326 #  error "__cpp_enumerator_attributes != 201411"
327 #endif
328 
329 #ifndef __cpp_nested_namespace_definitions
330 #  error "__cpp_nested_namespace_definitions"
331 #elif __cpp_nested_namespace_definitions != 201411
332 #  error "__cpp_nested_namespace_definitions != 201411"
333 #endif
334 
335 #ifndef __cpp_fold_expressions
336 #  error "__cpp_fold_expressions"
337 #elif __cpp_fold_expressions != 201603
338 #  error "__cpp_fold_expressions != 201603"
339 #endif
340 
341 #ifndef __cpp_nontype_template_args
342 #  error "__cpp_nontype_template_args"
343 #elif __cpp_nontype_template_args != 201411
344 #  error "__cpp_nontype_template_args != 201411"
345 #endif
346 
347 #ifndef __cpp_hex_float
348 #  error "__cpp_hex_float"
349 #elif __cpp_hex_float != 201603
350 #  error "__cpp_hex_float != 201603"
351 #endif
352 
353 #ifndef __cpp_aggregate_bases
354 #  error "__cpp_aggregate_bases"
355 #elif __cpp_aggregate_bases != 201603
356 #  error "__cpp_aggregate_bases != 201603"
357 #endif
358 
359 #ifndef __cpp_deduction_guides
360 #  error "__cpp_deduction_guides"
361 #elif __cpp_deduction_guides != 201611
362 #  error "__cpp_deduction_guides != 201611"
363 #endif
364 
365 #ifndef __cpp_if_constexpr
366 #  error "__cpp_if_constexpr"
367 #elif __cpp_if_constexpr != 201606
368 #  error "__cpp_if_constexpr != 201606"
369 #endif
370 
371 #ifndef __cpp_aligned_new
372 #  error "__cpp_aligned_new"
373 #elif __cpp_aligned_new != 201606
374 #  error "__cpp_aligned_new != 201606"
375 #endif
376 
377 #ifndef __cpp_template_auto
378 #  error "__cpp_template_auto"
379 #elif __cpp_template_auto != 201606
380 #  error "__cpp_template_auto != 201606"
381 #endif
382 
383 #ifndef __cpp_inline_variables
384 #  error "__cpp_inline_variables"
385 #elif __cpp_inline_variables != 201606
386 #  error "__cpp_inline_variables != 201606"
387 #endif
388 
389 #ifndef __cpp_capture_star_this
390 #  error "__cpp_capture_star_this"
391 #elif __cpp_capture_star_this != 201603
392 #  error "__cpp_capture_star_this != 201603"
393 #endif
394 
395 #ifndef __cpp_noexcept_function_type
396 #  error "__cpp_noexcept_function_type"
397 #elif __cpp_noexcept_function_type != 201510
398 #  error "__cpp_noexcept_function_type != 201510"
399 #endif
400 
401 #ifndef __cpp_structured_bindings
402 #  error "__cpp_structured_bindings"
403 #elif __cpp_structured_bindings != 201606
404 #  error "__cpp_structured_bindings != 201606"
405 #endif
406 
407 #ifndef __cpp_template_template_args
408 #  error "__cpp_template_template_args"
409 #elif __cpp_template_template_args != 201611
410 #  error "__cpp_template_template_args != 201611"
411 #endif
412 
413 #ifndef __cpp_variadic_using
414 #  error "__cpp_variadic_using"
415 #elif __cpp_variadic_using != 201611
416 #  error "__cpp_variadic_using != 201611"
417 #endif
418 
419 #ifndef __cpp_guaranteed_copy_elision
420 #  error "__cpp_guaranteed_copy_elision"
421 #elif __cpp_guaranteed_copy_elision != 201606
422 #  error "__cpp_guaranteed_copy_elision != 201606"
423 #endif
424 
425 #ifndef __cpp_nontype_template_parameter_auto
426 #  error "__cpp_nontype_template_parameter_auto"
427 #elif __cpp_nontype_template_parameter_auto != 201606
428 #  error "__cpp_nontype_template_parameter_auto != 201606"
429 #endif
430 
431 #ifdef __has_cpp_attribute
432 
433 #  if ! __has_cpp_attribute(maybe_unused)
434 #    error "__has_cpp_attribute(maybe_unused)"
435 #  elif __has_cpp_attribute(maybe_unused) != 201603
436 #    error "__has_cpp_attribute(maybe_unused) != 201603"
437 #  endif
438 
439 #  if ! __has_cpp_attribute(nodiscard)
440 #    error "__has_cpp_attribute(nodiscard)"
441 #  elif __has_cpp_attribute(nodiscard) != 201603
442 #    error "__has_cpp_attribute(nodiscard) != 201603"
443 #  endif
444 
445 #  if ! __has_cpp_attribute(fallthrough)
446 #    error "__has_cpp_attribute(fallthrough)"
447 #  elif __has_cpp_attribute(fallthrough) != 201603
448 #    error "__has_cpp_attribute(fallthrough) != 201603"
449 #  endif
450 
451 #else
452 #  error "__has_cpp_attribute"
453 #endif
454