| // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-11 %s |
| // RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-NO-TLS %s |
| // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++98 %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s |
| // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++14 %s -o - | FileCheck --check-prefix=CHECK-14 %s |
| // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1z %s -o - | FileCheck --check-prefix=CHECK-1Z %s |
| |
| #if __has_feature(cxx_atomic) |
| int has_atomic(); |
| #else |
| int no_atomic(); |
| #endif |
| |
| // CHECK-1Z: has_atomic |
| // CHECK-14: has_atomic |
| // CHECK-11: has_atomic |
| // CHECK-NO-11: no_atomic |
| |
| #if __has_feature(cxx_lambdas) |
| int has_lambdas(); |
| #else |
| int no_lambdas(); |
| #endif |
| |
| // CHECK-1Z: has_lambdas |
| // CHECK-14: has_lambdas |
| // CHECK-11: has_lambdas |
| // CHECK-NO-11: no_lambdas |
| |
| |
| #if __has_feature(cxx_nullptr) |
| int has_nullptr(); |
| #else |
| int no_nullptr(); |
| #endif |
| |
| // CHECK-1Z: has_nullptr |
| // CHECK-14: has_nullptr |
| // CHECK-11: has_nullptr |
| // CHECK-NO-11: no_nullptr |
| |
| |
| #if __has_feature(cxx_decltype) |
| int has_decltype(); |
| #else |
| int no_decltype(); |
| #endif |
| |
| // CHECK-1Z: has_decltype |
| // CHECK-14: has_decltype |
| // CHECK-11: has_decltype |
| // CHECK-NO-11: no_decltype |
| |
| |
| #if __has_feature(cxx_decltype_incomplete_return_types) |
| int has_decltype_incomplete_return_types(); |
| #else |
| int no_decltype_incomplete_return_types(); |
| #endif |
| |
| // CHECK-1Z: has_decltype_incomplete_return_types |
| // CHECK-14: has_decltype_incomplete_return_types |
| // CHECK-11: has_decltype_incomplete_return_types |
| // CHECK-NO-11: no_decltype_incomplete_return_types |
| |
| |
| #if __has_feature(cxx_auto_type) |
| int has_auto_type(); |
| #else |
| int no_auto_type(); |
| #endif |
| |
| // CHECK-1Z: has_auto_type |
| // CHECK-14: has_auto_type |
| // CHECK-11: has_auto_type |
| // CHECK-NO-11: no_auto_type |
| |
| |
| #if __has_feature(cxx_trailing_return) |
| int has_trailing_return(); |
| #else |
| int no_trailing_return(); |
| #endif |
| |
| // CHECK-1Z: has_trailing_return |
| // CHECK-14: has_trailing_return |
| // CHECK-11: has_trailing_return |
| // CHECK-NO-11: no_trailing_return |
| |
| |
| #if __has_feature(cxx_attributes) |
| int has_attributes(); |
| #else |
| int no_attributes(); |
| #endif |
| |
| // CHECK-1Z: has_attributes |
| // CHECK-14: has_attributes |
| // CHECK-11: has_attributes |
| // CHECK-NO-11: no_attributes |
| |
| |
| #if __has_feature(cxx_static_assert) |
| int has_static_assert(); |
| #else |
| int no_static_assert(); |
| #endif |
| |
| // CHECK-1Z: has_static_assert |
| // CHECK-14: has_static_assert |
| // CHECK-11: has_static_assert |
| // CHECK-NO-11: no_static_assert |
| |
| #if __has_feature(cxx_deleted_functions) |
| int has_deleted_functions(); |
| #else |
| int no_deleted_functions(); |
| #endif |
| |
| // CHECK-1Z: has_deleted_functions |
| // CHECK-14: has_deleted_functions |
| // CHECK-11: has_deleted_functions |
| // CHECK-NO-11: no_deleted_functions |
| |
| #if __has_feature(cxx_defaulted_functions) |
| int has_defaulted_functions(); |
| #else |
| int no_defaulted_functions(); |
| #endif |
| |
| // CHECK-1Z: has_defaulted_functions |
| // CHECK-14: has_defaulted_functions |
| // CHECK-11: has_defaulted_functions |
| // CHECK-NO-11: no_defaulted_functions |
| |
| #if __has_feature(cxx_rvalue_references) |
| int has_rvalue_references(); |
| #else |
| int no_rvalue_references(); |
| #endif |
| |
| // CHECK-1Z: has_rvalue_references |
| // CHECK-14: has_rvalue_references |
| // CHECK-11: has_rvalue_references |
| // CHECK-NO-11: no_rvalue_references |
| |
| |
| #if __has_feature(cxx_variadic_templates) |
| int has_variadic_templates(); |
| #else |
| int no_variadic_templates(); |
| #endif |
| |
| // CHECK-1Z: has_variadic_templates |
| // CHECK-14: has_variadic_templates |
| // CHECK-11: has_variadic_templates |
| // CHECK-NO-11: no_variadic_templates |
| |
| |
| #if __has_feature(cxx_inline_namespaces) |
| int has_inline_namespaces(); |
| #else |
| int no_inline_namespaces(); |
| #endif |
| |
| // CHECK-1Z: has_inline_namespaces |
| // CHECK-14: has_inline_namespaces |
| // CHECK-11: has_inline_namespaces |
| // CHECK-NO-11: no_inline_namespaces |
| |
| |
| #if __has_feature(cxx_range_for) |
| int has_range_for(); |
| #else |
| int no_range_for(); |
| #endif |
| |
| // CHECK-1Z: has_range_for |
| // CHECK-14: has_range_for |
| // CHECK-11: has_range_for |
| // CHECK-NO-11: no_range_for |
| |
| |
| #if __has_feature(cxx_reference_qualified_functions) |
| int has_reference_qualified_functions(); |
| #else |
| int no_reference_qualified_functions(); |
| #endif |
| |
| // CHECK-1Z: has_reference_qualified_functions |
| // CHECK-14: has_reference_qualified_functions |
| // CHECK-11: has_reference_qualified_functions |
| // CHECK-NO-11: no_reference_qualified_functions |
| |
| #if __has_feature(cxx_default_function_template_args) |
| int has_default_function_template_args(); |
| #else |
| int no_default_function_template_args(); |
| #endif |
| |
| // CHECK-1Z: has_default_function_template_args |
| // CHECK-14: has_default_function_template_args |
| // CHECK-11: has_default_function_template_args |
| // CHECK-NO-11: no_default_function_template_args |
| |
| #if __has_feature(cxx_noexcept) |
| int has_noexcept(); |
| #else |
| int no_noexcept(); |
| #endif |
| |
| // CHECK-1Z: has_noexcept |
| // CHECK-14: has_noexcept |
| // CHECK-11: has_noexcept |
| // CHECK-NO-11: no_noexcept |
| |
| #if __has_feature(cxx_override_control) |
| int has_override_control(); |
| #else |
| int no_override_control(); |
| #endif |
| |
| // CHECK-1Z: has_override_control |
| // CHECK-14: has_override_control |
| // CHECK-11: has_override_control |
| // CHECK-NO-11: no_override_control |
| |
| #if __has_feature(cxx_alias_templates) |
| int has_alias_templates(); |
| #else |
| int no_alias_templates(); |
| #endif |
| |
| // CHECK-1Z: has_alias_templates |
| // CHECK-14: has_alias_templates |
| // CHECK-11: has_alias_templates |
| // CHECK-NO-11: no_alias_templates |
| |
| #if __has_feature(cxx_implicit_moves) |
| int has_implicit_moves(); |
| #else |
| int no_implicit_moves(); |
| #endif |
| |
| // CHECK-1Z: has_implicit_moves |
| // CHECK-14: has_implicit_moves |
| // CHECK-11: has_implicit_moves |
| // CHECK-NO-11: no_implicit_moves |
| |
| #if __has_feature(cxx_alignas) |
| int has_alignas(); |
| #else |
| int no_alignas(); |
| #endif |
| |
| // CHECK-1Z: has_alignas |
| // CHECK-14: has_alignas |
| // CHECK-11: has_alignas |
| // CHECK-NO-11: no_alignas |
| |
| #if __has_feature(cxx_alignof) |
| int has_alignof(); |
| #else |
| int no_alignof(); |
| #endif |
| |
| // CHECK-1Z: has_alignof |
| // CHECK-14: has_alignof |
| // CHECK-11: has_alignof |
| // CHECK-NO-11: no_alignof |
| |
| #if __has_feature(cxx_raw_string_literals) |
| int has_raw_string_literals(); |
| #else |
| int no_raw_string_literals(); |
| #endif |
| |
| // CHECK-1Z: has_raw_string_literals |
| // CHECK-14: has_raw_string_literals |
| // CHECK-11: has_raw_string_literals |
| // CHECK-NO-11: no_raw_string_literals |
| |
| #if __has_feature(cxx_unicode_literals) |
| int has_unicode_literals(); |
| #else |
| int no_unicode_literals(); |
| #endif |
| |
| // CHECK-1Z: has_unicode_literals |
| // CHECK-14: has_unicode_literals |
| // CHECK-11: has_unicode_literals |
| // CHECK-NO-11: no_unicode_literals |
| |
| #if __has_feature(cxx_constexpr) |
| int has_constexpr(); |
| #else |
| int no_constexpr(); |
| #endif |
| |
| // CHECK-1Z: has_constexpr |
| // CHECK-14: has_constexpr |
| // CHECK-11: has_constexpr |
| // CHECK-NO-11: no_constexpr |
| |
| #if __has_feature(cxx_constexpr_string_builtins) |
| int has_constexpr_string_builtins(); |
| #else |
| int no_constexpr_string_builtins(); |
| #endif |
| |
| // CHECK-1Z: has_constexpr_string_builtins |
| // CHECK-14: has_constexpr_string_builtins |
| // CHECK-11: has_constexpr_string_builtins |
| // CHECK-NO-11: no_constexpr_string_builtins |
| |
| #if __has_feature(cxx_generalized_initializers) |
| int has_generalized_initializers(); |
| #else |
| int no_generalized_initializers(); |
| #endif |
| |
| // CHECK-1Z: has_generalized_initializers |
| // CHECK-14: has_generalized_initializers |
| // CHECK-11: has_generalized_initializers |
| // CHECK-NO-11: no_generalized_initializers |
| |
| #if __has_feature(cxx_unrestricted_unions) |
| int has_unrestricted_unions(); |
| #else |
| int no_unrestricted_unions(); |
| #endif |
| |
| // CHECK-1Z: has_unrestricted_unions |
| // CHECK-14: has_unrestricted_unions |
| // CHECK-11: has_unrestricted_unions |
| // CHECK-NO-11: no_unrestricted_unions |
| |
| #if __has_feature(cxx_user_literals) |
| int has_user_literals(); |
| #else |
| int no_user_literals(); |
| #endif |
| |
| // CHECK-1Z: has_user_literals |
| // CHECK-14: has_user_literals |
| // CHECK-11: has_user_literals |
| // CHECK-NO-11: no_user_literals |
| |
| #if __has_feature(cxx_local_type_template_args) |
| int has_local_type_template_args(); |
| #else |
| int no_local_type_template_args(); |
| #endif |
| |
| // CHECK-1Z: has_local_type_template_args |
| // CHECK-14: has_local_type_template_args |
| // CHECK-11: has_local_type_template_args |
| // CHECK-NO-11: no_local_type_template_args |
| |
| #if __has_feature(cxx_inheriting_constructors) |
| int has_inheriting_constructors(); |
| #else |
| int no_inheriting_constructors(); |
| #endif |
| |
| // CHECK-1Z: has_inheriting_constructors |
| // CHECK-14: has_inheriting_constructors |
| // CHECK-11: has_inheriting_constructors |
| // CHECK-NO-11: no_inheriting_constructors |
| |
| #if __has_feature(cxx_thread_local) |
| int has_thread_local(); |
| #else |
| int no_thread_local(); |
| #endif |
| |
| // CHECK-1Z: has_thread_local |
| // CHECK-14: has_thread_local |
| // CHECK-11: has_thread_local |
| // CHECK-NO-11: no_thread_local |
| // CHECK-NO-TLS: no_thread_local |
| |
| // === C++14 features === |
| |
| #if __has_feature(cxx_binary_literals) |
| int has_binary_literals(); |
| #else |
| int no_binary_literals(); |
| #endif |
| |
| // CHECK-1Z: has_binary_literals |
| // CHECK-14: has_binary_literals |
| // CHECK-11: no_binary_literals |
| // CHECK-NO-11: no_binary_literals |
| |
| #if __has_feature(cxx_aggregate_nsdmi) |
| int has_aggregate_nsdmi(); |
| #else |
| int no_aggregate_nsdmi(); |
| #endif |
| |
| // CHECK-1Z: has_aggregate_nsdmi |
| // CHECK-14: has_aggregate_nsdmi |
| // CHECK-11: no_aggregate_nsdmi |
| // CHECK-NO-11: no_aggregate_nsdmi |
| |
| #if __has_feature(cxx_return_type_deduction) |
| int has_return_type_deduction(); |
| #else |
| int no_return_type_deduction(); |
| #endif |
| |
| // CHECK-1Z: has_return_type_deduction |
| // CHECK-14: has_return_type_deduction |
| // CHECK-11: no_return_type_deduction |
| // CHECK-NO-11: no_return_type_deduction |
| |
| #if __has_feature(cxx_contextual_conversions) |
| int has_contextual_conversions(); |
| #else |
| int no_contextual_conversions(); |
| #endif |
| |
| // CHECK-1Z: has_contextual_conversions |
| // CHECK-14: has_contextual_conversions |
| // CHECK-11: no_contextual_conversions |
| // CHECK-NO-11: no_contextual_conversions |
| |
| #if __has_feature(cxx_relaxed_constexpr) |
| int has_relaxed_constexpr(); |
| #else |
| int no_relaxed_constexpr(); |
| #endif |
| |
| // CHECK-1Z: has_relaxed_constexpr |
| // CHECK-14: has_relaxed_constexpr |
| // CHECK-11: no_relaxed_constexpr |
| // CHECK-NO-11: no_relaxed_constexpr |
| |
| #if __has_feature(cxx_variable_templates) |
| int has_variable_templates(); |
| #else |
| int no_variable_templates(); |
| #endif |
| |
| // CHECK-1Z: has_variable_templates |
| // CHECK-14: has_variable_templates |
| // CHECK-11: no_variable_templates |
| // CHECK-NO-11: no_variable_templates |
| |
| #if __has_feature(cxx_init_captures) |
| int has_init_captures(); |
| #else |
| int no_init_captures(); |
| #endif |
| |
| // CHECK-1Z: has_init_captures |
| // CHECK-14: has_init_captures |
| // CHECK-11: no_init_captures |
| // CHECK-NO-11: no_init_captures |
| |
| #if __has_feature(cxx_decltype_auto) |
| int has_decltype_auto(); |
| #else |
| int no_decltype_auto(); |
| #endif |
| |
| // CHECK-1Z: has_decltype_auto |
| // CHECK-14: has_decltype_auto |
| // CHECK-11: no_decltype_auto |
| // CHECK-NO-11: no_decltype_auto |
| |
| #if __has_feature(cxx_generic_lambdas) |
| int has_generic_lambdas(); |
| #else |
| int no_generic_lambdas(); |
| #endif |
| |
| // CHECK-1Z: has_generic_lambdas |
| // CHECK-14: has_generic_lambdas |
| // CHECK-11: no_generic_lambdas |
| // CHECK-NO-11: no_generic_lambdas |