]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
Implement P0035R4, C++17 new of over-aligned types.
[thirdparty/gcc.git] / gcc / testsuite / g++.dg / cpp1z / feat-cxx1z.C
1 // { dg-options "-std=c++1z -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!= 200802
94 # error "__cpp_inheriting_constructors != 200802"
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 // C++14 features:
110
111 #ifndef __cpp_binary_literals
112 # error "__cpp_binary_literals"
113 #elif __cpp_binary_literals != 201304
114 # error "__cpp_binary_literals != 201304"
115 #endif
116
117 #ifndef __cpp_init_captures
118 # error "__cpp_init_captures"
119 #elif __cpp_init_captures != 201304
120 # error "__cpp_init_captures != 201304"
121 #endif
122
123 #ifndef __cpp_generic_lambdas
124 # error "__cpp_generic_lambdas"
125 #elif __cpp_generic_lambdas != 201304
126 # error "__cpp_generic_lambdas != 201304"
127 #endif
128
129 #ifndef __cpp_constexpr
130 # error "__cpp_constexpr"
131 #elif __cpp_constexpr != 201603
132 # error "__cpp_constexpr != 201603"
133 #endif
134
135 #ifndef __cpp_decltype_auto
136 # error "__cpp_decltype_auto"
137 #elif __cpp_decltype_auto != 201304
138 # error "__cpp_decltype_auto != 201304"
139 #endif
140
141 #ifndef __cpp_return_type_deduction
142 # error "__cpp_return_type_deduction"
143 #elif __cpp_return_type_deduction != 201304
144 # error "__cpp_return_type_deduction != 201304"
145 #endif
146
147 #ifndef __cpp_aggregate_nsdmi
148 # error "__cpp_aggregate_nsdmi"
149 #elif __cpp_aggregate_nsdmi != 201304
150 # error "__cpp_aggregate_nsdmi != 201304"
151 #endif
152
153 #ifndef __cpp_variable_templates
154 # error "__cpp_variable_templates"
155 #elif __cpp_variable_templates != 201304
156 # error "__cpp_variable_templates != 201304"
157 #endif
158
159 #ifndef __cpp_digit_separators
160 # error "__cpp_digit_separators"
161 #elif __cpp_digit_separators != 201309
162 # error "__cpp_digit_separators != 201309"
163 #endif
164
165 #ifndef __cpp_sized_deallocation
166 # error "__cpp_sized_deallocation"
167 #elif __cpp_sized_deallocation != 201309
168 # error "__cpp_sized_deallocation != 201309"
169 #endif
170
171 // GNU VLA support:
172
173 #ifndef __cpp_runtime_arrays
174 # error "__cpp_runtime_arrays"
175 #elif __cpp_runtime_arrays != 198712
176 # error "__cpp_runtime_arrays != 198712"
177 #endif
178
179 // C++11 attributes:
180
181 #ifdef __has_cpp_attribute
182 # if ! __has_cpp_attribute(noreturn)
183 # error "__has_cpp_attribute(noreturn)"
184 # elif __has_cpp_attribute(noreturn) != 200809
185 # error "__has_cpp_attribute(noreturn) != 200809"
186 # endif
187 #else
188 # error "__has_cpp_attribute"
189 #endif
190
191 // Attribute carries_dependency not in yet.
192 //#ifdef __has_cpp_attribute
193 //# if ! __has_cpp_attribute(carries_dependency)
194 //# error "__has_cpp_attribute(carries_dependency)"
195 //# elif __has_cpp_attribute(carries_dependency) != 200809
196 //# error "__has_cpp_attribute(carries_dependency) != 200809"
197 //# endif
198 //#else
199 //# error "__has_cpp_attribute"
200 //#endif
201
202 // C++14 attributes:
203
204 #ifdef __has_cpp_attribute
205 # if ! __has_cpp_attribute(deprecated)
206 # error "__has_cpp_attribute(deprecated)"
207 # elif __has_cpp_attribute(deprecated) != 201309
208 # error "__has_cpp_attribute(deprecated) != 201309"
209 # endif
210 #else
211 # error "__has_cpp_attribute"
212 #endif
213
214 // Include checks:
215
216 // Check for __has_include macro.
217 #ifndef __has_include
218 # error "__has_include"
219 #endif
220
221 // Quoted complex.h should find at least the bracket version (use operator).
222 #if __has_include__ "complex.h"
223 #else
224 # error "complex.h"
225 #endif
226
227 // Try known bracket header (use operator).
228 #if __has_include__(<complex>)
229 #else
230 # error "<complex>"
231 #endif
232
233 // Define and use a macro to invoke the operator.
234 #define sluggo(TXT) __has_include__(TXT)
235
236 #if sluggo(<complex>)
237 #else
238 # error "<complex>"
239 #endif
240
241 #if ! sluggo(<complex>)
242 # error "<complex>"
243 #else
244 #endif
245
246 // Quoted complex.h should find at least the bracket version.
247 #if __has_include("complex.h")
248 #else
249 # error "complex.h"
250 #endif
251
252 // Try known local quote header.
253 #if __has_include("complex_literals.h")
254 #else
255 # error "\"complex_literals.h\""
256 #endif
257
258 // Try nonexistent bracket header.
259 #if __has_include(<stuff>)
260 # error "<stuff>"
261 #else
262 #endif
263
264 // Try nonexistent quote header.
265 #if __has_include("phlegm")
266 # error "\"phlegm\""
267 #else
268 #endif
269
270 // Test __has_include_next.
271 #if __has_include("phoobhar.h")
272 # include "phoobhar.h"
273 #else
274 # error "__has_include(\"phoobhar.h\")"
275 #endif
276
277 // Try a macro.
278 #define COMPLEX_INC "complex.h"
279 #if __has_include(COMPLEX_INC)
280 #else
281 # error COMPLEX_INC
282 #endif
283
284 // Realistic use of __has_include.
285 #if __has_include(<array>)
286 # define STD_ARRAY 1
287 # include <array>
288 template<typename _Tp, size_t _Num>
289 using array = std::array<_Tp, _Num>;
290 #elif __has_include(<tr1/array>)
291 # define TR1_ARRAY 1
292 # include <tr1/array>
293 template<typename _Tp, size_t _Num>
294 typedef std::tr1::array<_Tp, _Num> array;
295 #endif
296
297 // C++17 features:
298
299 #ifndef __cpp_unicode_characters
300 # error "__cpp_unicode_characters"
301 #elif __cpp_unicode_characters != 201411
302 # error "__cpp_unicode_characters != 201411"
303 #endif
304
305 #ifndef __cpp_static_assert
306 # error "__cpp_static_assert"
307 #elif __cpp_static_assert != 201411
308 # error "__cpp_static_assert != 201411"
309 #endif
310
311 #ifndef __cpp_namespace_attributes
312 # error "__cpp_namespace_attributes"
313 #elif __cpp_namespace_attributes != 201411
314 # error "__cpp_namespace_attributes != 201411"
315 #endif
316
317 #ifndef __cpp_enumerator_attributes
318 # error "__cpp_enumerator_attributes"
319 #elif __cpp_enumerator_attributes != 201411
320 # error "__cpp_enumerator_attributes != 201411"
321 #endif
322
323 #ifndef __cpp_nested_namespace_definitions
324 # error "__cpp_nested_namespace_definitions"
325 #elif __cpp_nested_namespace_definitions != 201411
326 # error "__cpp_nested_namespace_definitions != 201411"
327 #endif
328
329 #ifndef __cpp_fold_expressions
330 # error "__cpp_fold_expressions"
331 #elif __cpp_fold_expressions != 201603
332 # error "__cpp_fold_expressions != 201603"
333 #endif
334
335 #ifndef __cpp_nontype_template_args
336 # error "__cpp_nontype_template_args"
337 #elif __cpp_nontype_template_args != 201411
338 # error "__cpp_nontype_template_args != 201411"
339 #endif
340
341 #ifndef __cpp_hex_float
342 # error "__cpp_hex_float"
343 #elif __cpp_hex_float != 201603
344 # error "__cpp_hex_float != 201603"
345 #endif
346
347 #ifndef __cpp_if_constexpr
348 # error "__cpp_if_constexpr"
349 #elif __cpp_if_constexpr != 201606
350 # error "__cpp_if_constexpr != 201606"
351 #endif
352
353 #ifndef __cpp_aligned_new
354 # error "__cpp_aligned_new"
355 #elif __cpp_aligned_new != 201606
356 # error "__cpp_aligned_new != 201606"
357 #endif
358
359 #ifdef __has_cpp_attribute
360
361 # if ! __has_cpp_attribute(maybe_unused)
362 # error "__has_cpp_attribute(maybe_unused)"
363 # elif __has_cpp_attribute(maybe_unused) != 201603
364 # error "__has_cpp_attribute(maybe_unused) != 201603"
365 # endif
366
367 # if ! __has_cpp_attribute(nodiscard)
368 # error "__has_cpp_attribute(nodiscard)"
369 # elif __has_cpp_attribute(nodiscard) != 201603
370 # error "__has_cpp_attribute(nodiscard) != 201603"
371 # endif
372
373 #else
374 # error "__has_cpp_attribute"
375 #endif