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