1 // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-11 %s
2 // RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-NO-TLS %s
3 // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++98 %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s
4 // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++14 %s -o - | FileCheck --check-prefix=CHECK-14 %s
5 // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1z %s -o - | FileCheck --check-prefix=CHECK-1Z %s
6 
7 #if __has_feature(cxx_atomic)
8 int has_atomic();
9 #else
10 int no_atomic();
11 #endif
12 
13 // CHECK-1Z: has_atomic
14 // CHECK-14: has_atomic
15 // CHECK-11: has_atomic
16 // CHECK-NO-11: no_atomic
17 
18 #if __has_feature(cxx_lambdas)
19 int has_lambdas();
20 #else
21 int no_lambdas();
22 #endif
23 
24 // CHECK-1Z: has_lambdas
25 // CHECK-14: has_lambdas
26 // CHECK-11: has_lambdas
27 // CHECK-NO-11: no_lambdas
28 
29 
30 #if __has_feature(cxx_nullptr)
31 int has_nullptr();
32 #else
33 int no_nullptr();
34 #endif
35 
36 // CHECK-1Z: has_nullptr
37 // CHECK-14: has_nullptr
38 // CHECK-11: has_nullptr
39 // CHECK-NO-11: no_nullptr
40 
41 
42 #if __has_feature(cxx_decltype)
43 int has_decltype();
44 #else
45 int no_decltype();
46 #endif
47 
48 // CHECK-1Z: has_decltype
49 // CHECK-14: has_decltype
50 // CHECK-11: has_decltype
51 // CHECK-NO-11: no_decltype
52 
53 
54 #if __has_feature(cxx_decltype_incomplete_return_types)
55 int has_decltype_incomplete_return_types();
56 #else
57 int no_decltype_incomplete_return_types();
58 #endif
59 
60 // CHECK-1Z: has_decltype_incomplete_return_types
61 // CHECK-14: has_decltype_incomplete_return_types
62 // CHECK-11: has_decltype_incomplete_return_types
63 // CHECK-NO-11: no_decltype_incomplete_return_types
64 
65 
66 #if __has_feature(cxx_auto_type)
67 int has_auto_type();
68 #else
69 int no_auto_type();
70 #endif
71 
72 // CHECK-1Z: has_auto_type
73 // CHECK-14: has_auto_type
74 // CHECK-11: has_auto_type
75 // CHECK-NO-11: no_auto_type
76 
77 
78 #if __has_feature(cxx_trailing_return)
79 int has_trailing_return();
80 #else
81 int no_trailing_return();
82 #endif
83 
84 // CHECK-1Z: has_trailing_return
85 // CHECK-14: has_trailing_return
86 // CHECK-11: has_trailing_return
87 // CHECK-NO-11: no_trailing_return
88 
89 
90 #if __has_feature(cxx_attributes)
91 int has_attributes();
92 #else
93 int no_attributes();
94 #endif
95 
96 // CHECK-1Z: has_attributes
97 // CHECK-14: has_attributes
98 // CHECK-11: has_attributes
99 // CHECK-NO-11: no_attributes
100 
101 
102 #if __has_feature(cxx_static_assert)
103 int has_static_assert();
104 #else
105 int no_static_assert();
106 #endif
107 
108 // CHECK-1Z: has_static_assert
109 // CHECK-14: has_static_assert
110 // CHECK-11: has_static_assert
111 // CHECK-NO-11: no_static_assert
112 
113 #if __has_feature(cxx_deleted_functions)
114 int has_deleted_functions();
115 #else
116 int no_deleted_functions();
117 #endif
118 
119 // CHECK-1Z: has_deleted_functions
120 // CHECK-14: has_deleted_functions
121 // CHECK-11: has_deleted_functions
122 // CHECK-NO-11: no_deleted_functions
123 
124 #if __has_feature(cxx_defaulted_functions)
125 int has_defaulted_functions();
126 #else
127 int no_defaulted_functions();
128 #endif
129 
130 // CHECK-1Z: has_defaulted_functions
131 // CHECK-14: has_defaulted_functions
132 // CHECK-11: has_defaulted_functions
133 // CHECK-NO-11: no_defaulted_functions
134 
135 #if __has_feature(cxx_rvalue_references)
136 int has_rvalue_references();
137 #else
138 int no_rvalue_references();
139 #endif
140 
141 // CHECK-1Z: has_rvalue_references
142 // CHECK-14: has_rvalue_references
143 // CHECK-11: has_rvalue_references
144 // CHECK-NO-11: no_rvalue_references
145 
146 
147 #if __has_feature(cxx_variadic_templates)
148 int has_variadic_templates();
149 #else
150 int no_variadic_templates();
151 #endif
152 
153 // CHECK-1Z: has_variadic_templates
154 // CHECK-14: has_variadic_templates
155 // CHECK-11: has_variadic_templates
156 // CHECK-NO-11: no_variadic_templates
157 
158 
159 #if __has_feature(cxx_inline_namespaces)
160 int has_inline_namespaces();
161 #else
162 int no_inline_namespaces();
163 #endif
164 
165 // CHECK-1Z: has_inline_namespaces
166 // CHECK-14: has_inline_namespaces
167 // CHECK-11: has_inline_namespaces
168 // CHECK-NO-11: no_inline_namespaces
169 
170 
171 #if __has_feature(cxx_range_for)
172 int has_range_for();
173 #else
174 int no_range_for();
175 #endif
176 
177 // CHECK-1Z: has_range_for
178 // CHECK-14: has_range_for
179 // CHECK-11: has_range_for
180 // CHECK-NO-11: no_range_for
181 
182 
183 #if __has_feature(cxx_reference_qualified_functions)
184 int has_reference_qualified_functions();
185 #else
186 int no_reference_qualified_functions();
187 #endif
188 
189 // CHECK-1Z: has_reference_qualified_functions
190 // CHECK-14: has_reference_qualified_functions
191 // CHECK-11: has_reference_qualified_functions
192 // CHECK-NO-11: no_reference_qualified_functions
193 
194 #if __has_feature(cxx_default_function_template_args)
195 int has_default_function_template_args();
196 #else
197 int no_default_function_template_args();
198 #endif
199 
200 // CHECK-1Z: has_default_function_template_args
201 // CHECK-14: has_default_function_template_args
202 // CHECK-11: has_default_function_template_args
203 // CHECK-NO-11: no_default_function_template_args
204 
205 #if __has_feature(cxx_noexcept)
206 int has_noexcept();
207 #else
208 int no_noexcept();
209 #endif
210 
211 // CHECK-1Z: has_noexcept
212 // CHECK-14: has_noexcept
213 // CHECK-11: has_noexcept
214 // CHECK-NO-11: no_noexcept
215 
216 #if __has_feature(cxx_override_control)
217 int has_override_control();
218 #else
219 int no_override_control();
220 #endif
221 
222 // CHECK-1Z: has_override_control
223 // CHECK-14: has_override_control
224 // CHECK-11: has_override_control
225 // CHECK-NO-11: no_override_control
226 
227 #if __has_feature(cxx_alias_templates)
228 int has_alias_templates();
229 #else
230 int no_alias_templates();
231 #endif
232 
233 // CHECK-1Z: has_alias_templates
234 // CHECK-14: has_alias_templates
235 // CHECK-11: has_alias_templates
236 // CHECK-NO-11: no_alias_templates
237 
238 #if __has_feature(cxx_implicit_moves)
239 int has_implicit_moves();
240 #else
241 int no_implicit_moves();
242 #endif
243 
244 // CHECK-1Z: has_implicit_moves
245 // CHECK-14: has_implicit_moves
246 // CHECK-11: has_implicit_moves
247 // CHECK-NO-11: no_implicit_moves
248 
249 #if __has_feature(cxx_alignas)
250 int has_alignas();
251 #else
252 int no_alignas();
253 #endif
254 
255 // CHECK-1Z: has_alignas
256 // CHECK-14: has_alignas
257 // CHECK-11: has_alignas
258 // CHECK-NO-11: no_alignas
259 
260 #if __has_feature(cxx_alignof)
261 int has_alignof();
262 #else
263 int no_alignof();
264 #endif
265 
266 // CHECK-1Z: has_alignof
267 // CHECK-14: has_alignof
268 // CHECK-11: has_alignof
269 // CHECK-NO-11: no_alignof
270 
271 #if __has_feature(cxx_raw_string_literals)
272 int has_raw_string_literals();
273 #else
274 int no_raw_string_literals();
275 #endif
276 
277 // CHECK-1Z: has_raw_string_literals
278 // CHECK-14: has_raw_string_literals
279 // CHECK-11: has_raw_string_literals
280 // CHECK-NO-11: no_raw_string_literals
281 
282 #if __has_feature(cxx_unicode_literals)
283 int has_unicode_literals();
284 #else
285 int no_unicode_literals();
286 #endif
287 
288 // CHECK-1Z: has_unicode_literals
289 // CHECK-14: has_unicode_literals
290 // CHECK-11: has_unicode_literals
291 // CHECK-NO-11: no_unicode_literals
292 
293 #if __has_feature(cxx_constexpr)
294 int has_constexpr();
295 #else
296 int no_constexpr();
297 #endif
298 
299 // CHECK-1Z: has_constexpr
300 // CHECK-14: has_constexpr
301 // CHECK-11: has_constexpr
302 // CHECK-NO-11: no_constexpr
303 
304 #if __has_feature(cxx_generalized_initializers)
305 int has_generalized_initializers();
306 #else
307 int no_generalized_initializers();
308 #endif
309 
310 // CHECK-1Z: has_generalized_initializers
311 // CHECK-14: has_generalized_initializers
312 // CHECK-11: has_generalized_initializers
313 // CHECK-NO-11: no_generalized_initializers
314 
315 #if __has_feature(cxx_unrestricted_unions)
316 int has_unrestricted_unions();
317 #else
318 int no_unrestricted_unions();
319 #endif
320 
321 // CHECK-1Z: has_unrestricted_unions
322 // CHECK-14: has_unrestricted_unions
323 // CHECK-11: has_unrestricted_unions
324 // CHECK-NO-11: no_unrestricted_unions
325 
326 #if __has_feature(cxx_user_literals)
327 int has_user_literals();
328 #else
329 int no_user_literals();
330 #endif
331 
332 // CHECK-1Z: has_user_literals
333 // CHECK-14: has_user_literals
334 // CHECK-11: has_user_literals
335 // CHECK-NO-11: no_user_literals
336 
337 #if __has_feature(cxx_local_type_template_args)
338 int has_local_type_template_args();
339 #else
340 int no_local_type_template_args();
341 #endif
342 
343 // CHECK-1Z: has_local_type_template_args
344 // CHECK-14: has_local_type_template_args
345 // CHECK-11: has_local_type_template_args
346 // CHECK-NO-11: no_local_type_template_args
347 
348 #if __has_feature(cxx_inheriting_constructors)
349 int has_inheriting_constructors();
350 #else
351 int no_inheriting_constructors();
352 #endif
353 
354 // CHECK-1Z: has_inheriting_constructors
355 // CHECK-14: has_inheriting_constructors
356 // CHECK-11: has_inheriting_constructors
357 // CHECK-NO-11: no_inheriting_constructors
358 
359 #if __has_feature(cxx_thread_local)
360 int has_thread_local();
361 #else
362 int no_thread_local();
363 #endif
364 
365 // CHECK-1Z: has_thread_local
366 // CHECK-14: has_thread_local
367 // CHECK-11: has_thread_local
368 // CHECK-NO-11: no_thread_local
369 // CHECK-NO-TLS: no_thread_local
370 
371 // === C++14 features ===
372 
373 #if __has_feature(cxx_binary_literals)
374 int has_binary_literals();
375 #else
376 int no_binary_literals();
377 #endif
378 
379 // CHECK-1Z: has_binary_literals
380 // CHECK-14: has_binary_literals
381 // CHECK-11: no_binary_literals
382 // CHECK-NO-11: no_binary_literals
383 
384 #if __has_feature(cxx_aggregate_nsdmi)
385 int has_aggregate_nsdmi();
386 #else
387 int no_aggregate_nsdmi();
388 #endif
389 
390 // CHECK-1Z: has_aggregate_nsdmi
391 // CHECK-14: has_aggregate_nsdmi
392 // CHECK-11: no_aggregate_nsdmi
393 // CHECK-NO-11: no_aggregate_nsdmi
394 
395 #if __has_feature(cxx_return_type_deduction)
396 int has_return_type_deduction();
397 #else
398 int no_return_type_deduction();
399 #endif
400 
401 // CHECK-1Z: has_return_type_deduction
402 // CHECK-14: has_return_type_deduction
403 // CHECK-11: no_return_type_deduction
404 // CHECK-NO-11: no_return_type_deduction
405 
406 #if __has_feature(cxx_contextual_conversions)
407 int has_contextual_conversions();
408 #else
409 int no_contextual_conversions();
410 #endif
411 
412 // CHECK-1Z: has_contextual_conversions
413 // CHECK-14: has_contextual_conversions
414 // CHECK-11: no_contextual_conversions
415 // CHECK-NO-11: no_contextual_conversions
416 
417 #if __has_feature(cxx_relaxed_constexpr)
418 int has_relaxed_constexpr();
419 #else
420 int no_relaxed_constexpr();
421 #endif
422 
423 // CHECK-1Z: has_relaxed_constexpr
424 // CHECK-14: has_relaxed_constexpr
425 // CHECK-11: no_relaxed_constexpr
426 // CHECK-NO-11: no_relaxed_constexpr
427 
428 #if __has_feature(cxx_variable_templates)
429 int has_variable_templates();
430 #else
431 int no_variable_templates();
432 #endif
433 
434 // CHECK-1Z: has_variable_templates
435 // CHECK-14: has_variable_templates
436 // CHECK-11: no_variable_templates
437 // CHECK-NO-11: no_variable_templates
438 
439 #if __has_feature(cxx_init_captures)
440 int has_init_captures();
441 #else
442 int no_init_captures();
443 #endif
444 
445 // CHECK-1Z: has_init_captures
446 // CHECK-14: has_init_captures
447 // CHECK-11: no_init_captures
448 // CHECK-NO-11: no_init_captures
449 
450 #if __has_feature(cxx_decltype_auto)
451 int has_decltype_auto();
452 #else
453 int no_decltype_auto();
454 #endif
455 
456 // CHECK-1Z: has_decltype_auto
457 // CHECK-14: has_decltype_auto
458 // CHECK-11: no_decltype_auto
459 // CHECK-NO-11: no_decltype_auto
460 
461 #if __has_feature(cxx_generic_lambdas)
462 int has_generic_lambdas();
463 #else
464 int no_generic_lambdas();
465 #endif
466 
467 // CHECK-1Z: has_generic_lambdas
468 // CHECK-14: has_generic_lambdas
469 // CHECK-11: no_generic_lambdas
470 // CHECK-NO-11: no_generic_lambdas
471