// { dg-options "-std=c++26 -I${srcdir}/g++.dg/cpp1y -I${srcdir}/g++.dg/cpp1y/testinc" } // { dg-skip-if "requires hosted libstdc++ for complex" { ! hostedlib } } // C++98 features: #ifndef __cpp_rtti # error "__cpp_rtti" #elif __cpp_rtti != 199711 # error "__cpp_rtti != 199711" #endif #ifndef __cpp_exceptions # error "__cpp_exceptions" #elif __cpp_exceptions != 199711 # error "__cpp_exceptions != 199711" #endif // C++11 features: #ifndef __cpp_raw_strings # error "__cpp_raw_strings" #elif __cpp_raw_strings != 200710 # error "__cpp_raw_strings != 200710" #endif #ifndef __cpp_unicode_literals # error "__cpp_unicode_literals" #elif __cpp_unicode_literals != 200710 # error "__cpp_unicode_literals != 200710" #endif #ifndef __cpp_user_defined_literals # error "__cpp_user_defined_literals" #elif __cpp_user_defined_literals != 200809 # error "__cpp_user_defined_literals != 200809" #endif #ifndef __cpp_lambdas # error "__cpp_lambdas" #elif __cpp_lambdas != 200907 # error "__cpp_lambdas != 200907" #endif #ifndef __cpp_range_based_for # error "__cpp_range_based_for" #elif __cpp_range_based_for != 202211 # error "__cpp_range_based_for != 202211" #endif #ifndef __cpp_decltype # error "__cpp_decltype" #elif __cpp_decltype != 200707 # error "__cpp_decltype != 200707" #endif #ifndef __cpp_attributes # error "__cpp_attributes" #elif __cpp_attributes != 200809 # error "__cpp_attributes != 200809" #endif #ifndef __cpp_rvalue_references # error "__cpp_rvalue_references" #elif __cpp_rvalue_references != 200610 # error "__cpp_rvalue_references != 200610" #endif #ifndef __cpp_variadic_templates # error "__cpp_variadic_templates" #elif __cpp_variadic_templates != 200704 # error "__cpp_variadic_templates != 200704" #endif #ifndef __cpp_initializer_lists # error "__cpp_initializer_lists" #elif __cpp_initializer_lists != 200806 # error "__cpp_initializer_lists != 200806" #endif #ifndef __cpp_delegating_constructors # error "__cpp_delegating_constructors" #elif __cpp_delegating_constructors != 200604 # error "__cpp_delegating_constructors != 200604" #endif #ifndef __cpp_nsdmi # error "__cpp_nsdmi" #elif __cpp_nsdmi != 200809 # error "__cpp_nsdmi != 200809" #endif #ifndef __cpp_inheriting_constructors # error "__cpp_inheriting_constructors" #elif __cpp_inheriting_constructors!= 201511 # error "__cpp_inheriting_constructors != 201511" #endif #ifndef __cpp_ref_qualifiers # error "__cpp_ref_qualifiers" #elif __cpp_ref_qualifiers != 200710 # error "__cpp_ref_qualifiers != 200710" #endif #ifndef __cpp_alias_templates # error "__cpp_alias_templates" #elif __cpp_alias_templates != 200704 # error "__cpp_alias_templates != 200704" #endif #ifndef __cpp_threadsafe_static_init # error "__cpp_threadsafe_static_init" #elif __cpp_threadsafe_static_init != 200806 # error "__cpp_threadsafe_static_init != 200806" #endif // C++14 features: #ifndef __cpp_binary_literals # error "__cpp_binary_literals" #elif __cpp_binary_literals != 201304 # error "__cpp_binary_literals != 201304" #endif #ifndef __cpp_init_captures # error "__cpp_init_captures" #elif __cpp_init_captures != 201803 # error "__cpp_init_captures != 201803" #endif #ifndef __cpp_generic_lambdas # error "__cpp_generic_lambdas" #elif __cpp_generic_lambdas != 201707 # error "__cpp_generic_lambdas != 201707" #endif #ifndef __cpp_constexpr # error "__cpp_constexpr" #elif __cpp_constexpr != 202406L # error "__cpp_constexpr != 202406L" #endif #ifndef __cpp_decltype_auto # error "__cpp_decltype_auto" #elif __cpp_decltype_auto != 201304 # error "__cpp_decltype_auto != 201304" #endif #ifndef __cpp_return_type_deduction # error "__cpp_return_type_deduction" #elif __cpp_return_type_deduction != 201304 # error "__cpp_return_type_deduction != 201304" #endif #ifndef __cpp_aggregate_nsdmi # error "__cpp_aggregate_nsdmi" #elif __cpp_aggregate_nsdmi != 201304 # error "__cpp_aggregate_nsdmi != 201304" #endif #ifndef __cpp_variable_templates # error "__cpp_variable_templates" #elif __cpp_variable_templates != 201304 # error "__cpp_variable_templates != 201304" #endif #ifndef __cpp_digit_separators # error "__cpp_digit_separators" #elif __cpp_digit_separators != 201309 # error "__cpp_digit_separators != 201309" #endif #ifndef __cpp_sized_deallocation # error "__cpp_sized_deallocation" #elif __cpp_sized_deallocation != 201309 # error "__cpp_sized_deallocation != 201309" #endif // GNU VLA support: #ifndef __cpp_runtime_arrays # error "__cpp_runtime_arrays" #elif __cpp_runtime_arrays != 198712 # error "__cpp_runtime_arrays != 198712" #endif // C++11 attributes: #ifdef __has_cpp_attribute # if ! __has_cpp_attribute(noreturn) # error "__has_cpp_attribute(noreturn)" # elif __has_cpp_attribute(noreturn) != 200809 # error "__has_cpp_attribute(noreturn) != 200809" # endif #else # error "__has_cpp_attribute" #endif // Attribute carries_dependency not in yet. //#ifdef __has_cpp_attribute //# if ! __has_cpp_attribute(carries_dependency) //# error "__has_cpp_attribute(carries_dependency)" //# elif __has_cpp_attribute(carries_dependency) != 200809 //# error "__has_cpp_attribute(carries_dependency) != 200809" //# endif //#else //# error "__has_cpp_attribute" //#endif // C++14 attributes: #ifdef __has_cpp_attribute # if ! __has_cpp_attribute(deprecated) # error "__has_cpp_attribute(deprecated)" # elif __has_cpp_attribute(deprecated) != 201309 # error "__has_cpp_attribute(deprecated) != 201309" # endif #else # error "__has_cpp_attribute" #endif // Include checks: // Check for __has_include macro. #ifndef __has_include # error "__has_include" #endif // Try known bracket header (use operator). #if __has_include (<complex>) #else # error "<complex>" #endif // Define and use a macro to invoke the operator. #define sluggo(TXT) __has_include(TXT) #if sluggo(<complex>) #else # error "<complex>" #endif #if ! sluggo(<complex>) # error "<complex>" #else #endif // Quoted complex.h should find at least the bracket version. #if __has_include("complex.h") #else # error "complex.h" #endif // Try known local quote header. #if __has_include("complex_literals.h") #else # error "\"complex_literals.h\"" #endif // Try nonexistent bracket header. #if __has_include(<stuff>) # error "<stuff>" #else #endif // Try nonexistent quote header. #if __has_include("phlegm") # error "\"phlegm\"" #else #endif // Test __has_include_next. #if __has_include("phoobhar.h") # include "phoobhar.h" #else # error "__has_include(\"phoobhar.h\")" #endif // Try a macro. #define COMPLEX_INC "complex.h" #if __has_include(COMPLEX_INC) #else # error COMPLEX_INC #endif // Realistic use of __has_include. #if __has_include(<array>) # define STD_ARRAY 1 # include <array> template<typename _Tp, std::size_t _Num> using array = std::array<_Tp, _Num>; #elif __has_include(<tr1/array>) # define TR1_ARRAY 1 # include <tr1/array> template<typename _Tp, std::size_t _Num> typedef std::tr1::array<_Tp, _Num> array; #endif // C++17 features: #ifndef __cpp_unicode_characters # error "__cpp_unicode_characters" #elif __cpp_unicode_characters != 201411 # error "__cpp_unicode_characters != 201411" #endif #ifndef __cpp_static_assert # error "__cpp_static_assert" #elif __cpp_static_assert != 202306 # error "__cpp_static_assert != 202306" #endif #ifndef __cpp_namespace_attributes # error "__cpp_namespace_attributes" #elif __cpp_namespace_attributes != 201411 # error "__cpp_namespace_attributes != 201411" #endif #ifndef __cpp_enumerator_attributes # error "__cpp_enumerator_attributes" #elif __cpp_enumerator_attributes != 201411 # error "__cpp_enumerator_attributes != 201411" #endif #ifndef __cpp_nested_namespace_definitions # error "__cpp_nested_namespace_definitions" #elif __cpp_nested_namespace_definitions != 201411 # error "__cpp_nested_namespace_definitions != 201411" #endif #ifndef __cpp_fold_expressions # error "__cpp_fold_expressions" #elif __cpp_fold_expressions != 201603 # error "__cpp_fold_expressions != 201603" #endif #ifndef __cpp_nontype_template_args # error "__cpp_nontype_template_args" #elif __cpp_nontype_template_args != 201911 # error "__cpp_nontype_template_args != 201911" #endif #ifndef __cpp_hex_float # error "__cpp_hex_float" #elif __cpp_hex_float != 201603 # error "__cpp_hex_float != 201603" #endif #ifndef __cpp_aggregate_bases # error "__cpp_aggregate_bases" #elif __cpp_aggregate_bases != 201603 # error "__cpp_aggregate_bases != 201603" #endif #ifndef __cpp_deduction_guides # error "__cpp_deduction_guides" #elif __cpp_deduction_guides != 201907 # error "__cpp_deduction_guides != 201907" #endif #ifndef __cpp_if_constexpr # error "__cpp_if_constexpr" #elif __cpp_if_constexpr != 201606 # error "__cpp_if_constexpr != 201606" #endif #ifndef __cpp_aligned_new # error "__cpp_aligned_new" #elif __cpp_aligned_new != 201606 # error "__cpp_aligned_new != 201606" #endif #ifndef __cpp_template_auto # error "__cpp_template_auto" #elif __cpp_template_auto != 201606 # error "__cpp_template_auto != 201606" #endif #ifndef __cpp_inline_variables # error "__cpp_inline_variables" #elif __cpp_inline_variables != 201606 # error "__cpp_inline_variables != 201606" #endif #ifndef __cpp_capture_star_this # error "__cpp_capture_star_this" #elif __cpp_capture_star_this != 201603 # error "__cpp_capture_star_this != 201603" #endif #ifndef __cpp_noexcept_function_type # error "__cpp_noexcept_function_type" #elif __cpp_noexcept_function_type != 201510 # error "__cpp_noexcept_function_type != 201510" #endif #ifndef __cpp_structured_bindings # error "__cpp_structured_bindings" #elif __cpp_structured_bindings != 202403 # error "__cpp_structured_bindings != 202403" #endif #ifndef __cpp_template_template_args # error "__cpp_template_template_args" #elif __cpp_template_template_args != 201611 # error "__cpp_template_template_args != 201611" #endif #ifndef __cpp_variadic_using # error "__cpp_variadic_using" #elif __cpp_variadic_using != 201611 # error "__cpp_variadic_using != 201611" #endif #ifndef __cpp_guaranteed_copy_elision # error "__cpp_guaranteed_copy_elision" #elif __cpp_guaranteed_copy_elision != 201606 # error "__cpp_guaranteed_copy_elision != 201606" #endif #ifndef __cpp_nontype_template_parameter_auto # error "__cpp_nontype_template_parameter_auto" #elif __cpp_nontype_template_parameter_auto != 201606 # error "__cpp_nontype_template_parameter_auto != 201606" #endif // C++20 features: #ifndef __cpp_conditional_explicit # error "__cpp_conditional_explicit" #elif __cpp_conditional_explicit != 201806 # error "__cpp_conditional_explicit != 201806" #endif #ifndef __cpp_nontype_template_parameter_class # error "__cpp_nontype_template_parameter_class" #elif __cpp_nontype_template_parameter_class != 201806 # error "__cpp_nontype_template_parameter_class != 201806" #endif #ifndef __cpp_impl_destroying_delete # error "__cpp_impl_destroying_delete" #elif __cpp_impl_destroying_delete != 201806 # error "__cpp_impl_destroying_delete != 201806" #endif #ifndef __cpp_constinit # error "__cpp_constinit" #elif __cpp_constinit != 201907 # error "__cpp_constinit != 201907" #endif #ifndef __cpp_constexpr_dynamic_alloc # error "__cpp_constexpr_dynamic_alloc" #elif __cpp_constexpr_dynamic_alloc != 201907 # error "__cpp_constexpr_dynamic_alloc != 201907" #endif #ifndef __cpp_aggregate_paren_init # error "__cpp_aggregate_paren_init" #elif __cpp_aggregate_paren_init != 201902 # error "__cpp_aggregate_paren_init != 201902" #endif #ifndef __cpp_char8_t # error "__cpp_char8_t" #elif __cpp_char8_t != 202207 # error "__cpp_char8_t != 202207" #endif #ifndef __cpp_designated_initializers # error "__cpp_designated_initializers" #elif __cpp_designated_initializers != 201707 # error "__cpp_designated_initializers != 201707" #endif #ifndef __cpp_constexpr_in_decltype # error "__cpp_constexpr_in_decltype" #elif __cpp_constexpr_in_decltype != 201711 # error "__cpp_constexpr_in_decltype != 201711" #endif #ifndef __cpp_consteval # error "__cpp_consteval" #elif __cpp_consteval != 202211L # error "__cpp_consteval != 202211L" #endif #ifndef __cpp_concepts # error "__cpp_concepts" #elif __cpp_concepts != 202002 # error "__cpp_concepts != 202002" #endif #ifndef __cpp_using_enum # error "__cpp_using_enum" #elif __cpp_using_enum != 201907 # error "__cpp_using_enum != 201907" #endif // C++20 attributes: #ifdef __has_cpp_attribute # if ! __has_cpp_attribute(maybe_unused) # error "__has_cpp_attribute(maybe_unused)" # elif __has_cpp_attribute(maybe_unused) != 201603 # error "__has_cpp_attribute(maybe_unused) != 201603" # endif # if ! __has_cpp_attribute(nodiscard) # error "__has_cpp_attribute(nodiscard)" # elif __has_cpp_attribute(nodiscard) != 201907 # error "__has_cpp_attribute(nodiscard) != 201907" # endif # if ! __has_cpp_attribute(fallthrough) # error "__has_cpp_attribute(fallthrough)" # elif __has_cpp_attribute(fallthrough) != 201603 # error "__has_cpp_attribute(fallthrough) != 201603" # endif # if ! __has_cpp_attribute(no_unique_address) # error "__has_cpp_attribute(no_unique_address)" # elif __has_cpp_attribute(no_unique_address) != 201803 # error "__has_cpp_attribute(no_unique_address) != 201803" # endif # if ! __has_cpp_attribute(likely) # error "__has_cpp_attribute(likely)" # elif __has_cpp_attribute(likely) != 201803 # error "__has_cpp_attribute(likely) != 201803" # endif # if ! __has_cpp_attribute(unlikely) # error "__has_cpp_attribute(unlikely)" # elif __has_cpp_attribute(unlikely) != 201803 # error "__has_cpp_attribute(unlikely) != 201803" # endif #else # error "__has_cpp_attribute" #endif // C++23 features: #ifndef __cpp_size_t_suffix # error "__cpp_size_t_suffix" #elif __cpp_size_t_suffix != 202011 # error "__cpp_size_t_suffix != 202011" #endif #ifndef __cpp_if_consteval # error "__cpp_if_consteval" #elif __cpp_if_consteval != 202106 # error "__cpp_if_consteval != 202106" #endif #ifndef __cpp_multidimensional_subscript # error "__cpp_multidimensional_subscript" #elif __cpp_multidimensional_subscript != 202211 # error "__cpp_multidimensional_subscript != 202211" #endif #ifndef __cpp_named_character_escapes # error "__cpp_named_character_escapes" #elif __cpp_named_character_escapes != 202207 # error "__cpp_named_character_escapes != 202207" #endif #ifndef __cpp_static_call_operator # error "__cpp_static_call_operator" #elif __cpp_static_call_operator != 202207 # error "__cpp_static_call_operator != 202207" #endif #ifndef __cpp_implicit_move # error "__cpp_implicit_move" #elif __cpp_implicit_move != 202207 # error "__cpp_implicit_move != 202207" #endif #ifndef __cpp_explicit_this_parameter # error "__cpp_explicit_this_parameter" #elif __cpp_explicit_this_parameter != 202110 # error "__cpp_explicit_this_parameter != 202110" #endif #ifndef __cpp_auto_cast # error "__cpp_auto_cast" #elif __cpp_auto_cast != 202110 # error "__cpp_auto_cast != 202110" #endif // C++23 attributes: #ifdef __has_cpp_attribute # if ! __has_cpp_attribute(assume) # error "__has_cpp_attribute(assume)" # elif __has_cpp_attribute(assume) != 202207 # error "__has_cpp_attribute(assume) != 202207" # endif #else # error "__has_cpp_attribute" #endif // C++26 features: #ifndef __cpp_placeholder_variables # error "__cpp_placeholder_variables" #elif __cpp_placeholder_variables != 202306 # error "__cpp_placeholder_variables != 202306" #endif #ifndef __cpp_deleted_function # error "__cpp_deleted_function" #elif __cpp_deleted_function != 202403 # error "__cpp_deleted_function != 202403" #endif #ifndef __cpp_variadic_friend # error "__cpp_variadic_friend" #elif __cpp_variadic_friend != 202403 # error "__cpp_variadic_friend != 202403" #endif #ifndef __cpp_pack_indexing # error "__cpp_pack_indexing" #elif __cpp_pack_indexing != 202311 # error "__cpp_pack_indexing != 202311" #endif #ifndef __cpp_pp_embed # error "__cpp_pp_embed" #elif __cpp_pp_embed != 202502 # error "__cpp_pp_embed != 202502" #endif