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