diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index bc2e458f7dd..bdc18638c94 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -3729,7 +3729,7 @@ cxa_allocate_and_throw_exception (location_t loc, const constexpr_ctx *ctx, /* This simulates a call to __cxa_allocate_exception. We need (struct exception *) &heap -- memory on the heap so that it can survive the stack being unwound. */ - tree arr = build_array_type_nelts (type, 1); + tree arr = build_array_of_n_type (type, 1); tree var = cxa_allocate_exception (loc, ctx, arr, size_zero_node); DECL_NAME (var) = heap_identifier; ctx->global->put_value (var, NULL_TREE); diff --git a/gcc/cp/metafns.gperf b/gcc/cp/metafns.gperf index d2067174e79..9509a4bdb65 100644 --- a/gcc/cp/metafns.gperf +++ b/gcc/cp/metafns.gperf @@ -257,7 +257,9 @@ enum metafn_code { METAFN_ANNOTATIONS_OF, METAFN_ANNOTATIONS_OF_WITH_TYPE, /* Special metafunctions. */ - METAFN_ACCESS_CONTEXT_CURRENT + METAFN_ACCESS_CONTEXT_CURRENT, + METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, + METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8 }; /* Possible return types of metafunctions. */ @@ -389,7 +391,11 @@ enum metafn_kind { METAFN_KIND_TEMPLATE_PARM_INFO = (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_TEMPLATE_PARM, METAFN_KIND_ACCESS_CONTEXT_VOID - = (METAFN_KIND_ARGS_VOID << 5) | METAFN_KIND_RET_ACCESS_CONTEXT + = (METAFN_KIND_ARGS_VOID << 5) | METAFN_KIND_RET_ACCESS_CONTEXT, + METAFN_KIND_STRING_VIEW_INPUT_RANGE + = (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_STRING_VIEW, + METAFN_KIND_U8STRING_VIEW_INPUT_RANGE + = (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_U8STRING_VIEW }; %} struct metafn_info @@ -639,3 +645,5 @@ type_order, METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO, annotations_of, METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO, annotations_of_with_type, METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO, current, METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID, +_S_exception_cvt_to_utf8, METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, METAFN_KIND_U8STRING_VIEW_INPUT_RANGE, +_S_exception_cvt_from_utf8, METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, METAFN_KIND_STRING_VIEW_INPUT_RANGE, diff --git a/gcc/cp/metafns.h b/gcc/cp/metafns.h index 38647da0e68..d3ce6c07c60 100644 --- a/gcc/cp/metafns.h +++ b/gcc/cp/metafns.h @@ -285,7 +285,9 @@ enum metafn_code { METAFN_ANNOTATIONS_OF, METAFN_ANNOTATIONS_OF_WITH_TYPE, /* Special metafunctions. */ - METAFN_ACCESS_CONTEXT_CURRENT + METAFN_ACCESS_CONTEXT_CURRENT, + METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, + METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8 }; /* Possible return types of metafunctions. */ @@ -417,9 +419,13 @@ enum metafn_kind { METAFN_KIND_TEMPLATE_PARM_INFO = (METAFN_KIND_ARGS_INFO << 5) | METAFN_KIND_RET_TEMPLATE_PARM, METAFN_KIND_ACCESS_CONTEXT_VOID - = (METAFN_KIND_ARGS_VOID << 5) | METAFN_KIND_RET_ACCESS_CONTEXT + = (METAFN_KIND_ARGS_VOID << 5) | METAFN_KIND_RET_ACCESS_CONTEXT, + METAFN_KIND_STRING_VIEW_INPUT_RANGE + = (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_STRING_VIEW, + METAFN_KIND_U8STRING_VIEW_INPUT_RANGE + = (METAFN_KIND_ARGS_INPUT_RANGE << 5) | METAFN_KIND_RET_U8STRING_VIEW }; -#line 395 "metafns.gperf" +#line 401 "metafns.gperf" struct metafn_info { /* A name within "std::meta::" (or "std::meta::access_context::"). */ @@ -451,7 +457,7 @@ metafn_lookup::hash (const char *str, size_t len) 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, + 751, 751, 751, 751, 751, 751, 0, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, @@ -510,7 +516,7 @@ metafn_lookup::find (const char *str, size_t len) { enum { - TOTAL_KEYWORDS = 235, + TOTAL_KEYWORDS = 237, MIN_WORD_LENGTH = 4, MAX_WORD_LENGTH = 40, MIN_HASH_VALUE = 39, @@ -519,475 +525,479 @@ metafn_lookup::find (const char *str, size_t len) static const struct metafn_info wordlist[] = { -#line 598 "metafns.gperf" - {"rank", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,}, -#line 525 "metafns.gperf" - {"is_void_type", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 530 "metafns.gperf" - {"is_pointer_type", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 436 "metafns.gperf" - {"is_volatile", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,}, -#line 482 "metafns.gperf" - {"is_value", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,}, -#line 489 "metafns.gperf" - {"is_base", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,}, -#line 450 "metafns.gperf" - {"is_variable", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,}, #line 604 "metafns.gperf" - {"is_nothrow_convertible_type", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 582 "metafns.gperf" - {"is_nothrow_constructible_type", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, -#line 609 "metafns.gperf" - {"is_nothrow_invocable_type", METAFN_IS_NOTHROW_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, -#line 587 "metafns.gperf" - {"is_nothrow_copy_assignable_type", METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 610 "metafns.gperf" - {"is_nothrow_invocable_r_type", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,}, -#line 584 "metafns.gperf" - {"is_nothrow_copy_constructible_type", METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 601 "metafns.gperf" - {"is_base_of_type", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 588 "metafns.gperf" - {"is_nothrow_move_assignable_type", METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 585 "metafns.gperf" - {"is_nothrow_move_constructible_type", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 474 "metafns.gperf" - {"is_variable_template", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 636 "metafns.gperf" - {"variant_size", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,}, -#line 526 "metafns.gperf" - {"is_null_pointer_type", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 451 "metafns.gperf" - {"is_type", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,}, -#line 419 "metafns.gperf" - {"is_public", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,}, -#line 431 "metafns.gperf" - {"is_noexcept", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,}, -#line 514 "metafns.gperf" - {"extract", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,}, -#line 637 "metafns.gperf" - {"variant_alternative", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,}, -#line 554 "metafns.gperf" - {"is_polymorphic_type", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 421 "metafns.gperf" - {"is_private", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,}, -#line 455 "metafns.gperf" - {"is_function", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,}, -#line 452 "metafns.gperf" - {"is_namespace", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,}, -#line 606 "metafns.gperf" - {"is_pointer_interconvertible_base_of_type", METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 561 "metafns.gperf" - {"is_bounded_array_type", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 435 "metafns.gperf" - {"is_const", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,}, -#line 481 "metafns.gperf" - {"is_concept", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,}, -#line 600 "metafns.gperf" - {"is_same_type", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 505 "metafns.gperf" - {"bases_of", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, -#line 473 "metafns.gperf" - {"is_function_template", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 586 "metafns.gperf" - {"is_nothrow_assignable_type", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 456 "metafns.gperf" - {"is_conversion_function", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,}, -#line 591 "metafns.gperf" - {"is_nothrow_destructible_type", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 603 "metafns.gperf" - {"is_convertible_type", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 593 "metafns.gperf" - {"is_implicit_lifetime_type", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 592 "metafns.gperf" - {"is_nothrow_relocatable_type", METAFN_IS_NOTHROW_RELOCATABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 472 "metafns.gperf" - {"is_template", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 583 "metafns.gperf" - {"is_nothrow_default_constructible_type", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 515 "metafns.gperf" - {"can_substitute", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,}, -#line 477 "metafns.gperf" - {"is_conversion_function_template", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 444 "metafns.gperf" - {"has_module_linkage", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,}, -#line 408 "metafns.gperf" - {"symbol_of", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,}, -#line 566 "metafns.gperf" - {"is_copy_constructible_type", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 491 "metafns.gperf" - {"has_parent", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,}, -#line 564 "metafns.gperf" - {"is_constructible_type", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, -#line 569 "metafns.gperf" - {"is_copy_assignable_type", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 453 "metafns.gperf" - {"is_type_alias", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,}, -#line 462 "metafns.gperf" - {"is_copy_constructor", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, -#line 634 "metafns.gperf" - {"tuple_size", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,}, -#line 498 "metafns.gperf" - {"variable_of", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,}, -#line 539 "metafns.gperf" - {"is_reflection_type", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 513 "metafns.gperf" - {"bit_size_of", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,}, -#line 465 "metafns.gperf" - {"is_copy_assignment", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,}, -#line 542 "metafns.gperf" - {"is_fundamental_type", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 605 "metafns.gperf" - {"is_layout_compatible_type", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 641 "metafns.gperf" - {"current", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,}, -#line 442 "metafns.gperf" - {"has_automatic_storage_duration", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,}, -#line 628 "metafns.gperf" - {"common_type", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,}, -#line 480 "metafns.gperf" - {"is_constructor_template", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 629 "metafns.gperf" - {"common_reference", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,}, -#line 420 "metafns.gperf" - {"is_protected", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,}, -#line 572 "metafns.gperf" - {"is_swappable_type", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 635 "metafns.gperf" - {"tuple_element", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,}, -#line 487 "metafns.gperf" - {"is_nonstatic_data_member", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,}, -#line 590 "metafns.gperf" - {"is_nothrow_swappable_type", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 519 "metafns.gperf" - {"reflect_function", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,}, -#line 589 "metafns.gperf" - {"is_nothrow_swappable_with_type", METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 567 "metafns.gperf" - {"is_move_constructible_type", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 460 "metafns.gperf" - {"is_constructor", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, -#line 638 "metafns.gperf" - {"type_order", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,}, -#line 565 "metafns.gperf" - {"is_default_constructible_type", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 490 "metafns.gperf" - {"has_default_member_initializer", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,}, -#line 540 "metafns.gperf" - {"is_reference_type", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 497 "metafns.gperf" - {"parameters_of", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, -#line 632 "metafns.gperf" - {"unwrap_reference", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,}, -#line 546 "metafns.gperf" - {"is_member_pointer_type", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 570 "metafns.gperf" - {"is_move_assignable_type", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 544 "metafns.gperf" - {"is_scalar_type", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 470 "metafns.gperf" - {"has_default_argument", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,}, -#line 459 "metafns.gperf" - {"is_special_member_function", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,}, -#line 416 "metafns.gperf" - {"type_of", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,}, -#line 568 "metafns.gperf" - {"is_assignable_type", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 463 "metafns.gperf" - {"is_move_constructor", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, -#line 625 "metafns.gperf" - {"add_pointer", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,}, -#line 464 "metafns.gperf" - {"is_assignment", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,}, -#line 422 "metafns.gperf" - {"is_virtual", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,}, -#line 630 "metafns.gperf" - {"underlying_type", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,}, -#line 461 "metafns.gperf" - {"is_default_constructor", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, -#line 466 "metafns.gperf" - {"is_move_assignment", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,}, -#line 447 "metafns.gperf" - {"has_linkage", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,}, -#line 411 "metafns.gperf" - {"identifier_of", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,}, -#line 550 "metafns.gperf" - {"is_trivially_relocatable_type", METAFN_IS_TRIVIALLY_RELOCATABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 485 "metafns.gperf" - {"is_class_member", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,}, -#line 616 "metafns.gperf" - {"add_cv", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,}, -#line 471 "metafns.gperf" - {"has_ellipsis_parameter", METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,}, -#line 467 "metafns.gperf" - {"is_destructor", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,}, -#line 486 "metafns.gperf" - {"is_namespace_member", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,}, -#line 504 "metafns.gperf" - {"members_of", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, -#line 549 "metafns.gperf" - {"is_trivially_copyable_type", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 602 "metafns.gperf" - {"is_virtual_base_of_type", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 574 "metafns.gperf" - {"is_trivially_constructible_type", METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, -#line 511 "metafns.gperf" - {"size_of", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,}, -#line 579 "metafns.gperf" - {"is_trivially_copy_assignable_type", METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 576 "metafns.gperf" - {"is_trivially_copy_constructible_type", METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 479 "metafns.gperf" - {"is_literal_operator_template", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 559 "metafns.gperf" - {"is_signed_type", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 495 "metafns.gperf" - {"template_of", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,}, -#line 614 "metafns.gperf" - {"add_const", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,}, -#line 426 "metafns.gperf" - {"is_deleted", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,}, -#line 475 "metafns.gperf" - {"is_class_template", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 541 "metafns.gperf" - {"is_arithmetic_type", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 516 "metafns.gperf" - {"substitute", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,}, -#line 427 "metafns.gperf" - {"is_defaulted", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,}, -#line 500 "metafns.gperf" - {"is_accessible", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, -#line 423 "metafns.gperf" - {"is_pure_virtual", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,}, -#line 468 "metafns.gperf" - {"is_function_parameter", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,}, -#line 425 "metafns.gperf" - {"is_final", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,}, -#line 458 "metafns.gperf" - {"is_literal_operator", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,}, -#line 551 "metafns.gperf" - {"is_replaceable_type", METAFN_IS_REPLACEABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 573 "metafns.gperf" - {"is_destructible_type", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 532 "metafns.gperf" - {"is_rvalue_reference_type", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 619 "metafns.gperf" - {"add_rvalue_reference", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,}, -#line 599 "metafns.gperf" - {"extent", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,}, -#line 535 "metafns.gperf" - {"is_enum_type", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 454 "metafns.gperf" - {"is_namespace_alias", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,}, -#line 581 "metafns.gperf" - {"is_trivially_destructible_type", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 484 "metafns.gperf" - {"is_structured_binding", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,}, -#line 575 "metafns.gperf" - {"is_trivially_default_constructible_type", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 437 "metafns.gperf" - {"is_mutable_member", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,}, -#line 563 "metafns.gperf" - {"is_scoped_enum_type", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 553 "metafns.gperf" - {"is_empty_type", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 449 "metafns.gperf" - {"is_enumerable_type", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,}, + {"rank", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,}, #line 531 "metafns.gperf" - {"is_lvalue_reference_type", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 580 "metafns.gperf" - {"is_trivially_move_assignable_type", METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 492 "metafns.gperf" - {"parent_of", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,}, -#line 548 "metafns.gperf" - {"is_volatile_type", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 577 "metafns.gperf" - {"is_trivially_move_constructible_type", METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 413 "metafns.gperf" - {"display_string_of", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,}, -#line 432 "metafns.gperf" - {"is_bit_field", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,}, -#line 571 "metafns.gperf" - {"is_swappable_with_type", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 520 "metafns.gperf" - {"reflect_constant_string", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,}, -#line 534 "metafns.gperf" - {"is_member_function_pointer_type", METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 557 "metafns.gperf" - {"is_aggregate_type", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 523 "metafns.gperf" - {"is_data_member_spec", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,}, -#line 517 "metafns.gperf" - {"reflect_constant", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,}, -#line 595 "metafns.gperf" - {"has_unique_object_representations", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,}, -#line 578 "metafns.gperf" - {"is_trivially_assignable_type", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 618 "metafns.gperf" - {"add_lvalue_reference", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,}, -#line 621 "metafns.gperf" - {"make_unsigned", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,}, -#line 414 "metafns.gperf" - {"u8display_string_of", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,}, -#line 493 "metafns.gperf" - {"dealias", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,}, -#line 433 "metafns.gperf" - {"is_enumerator", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,}, -#line 483 "metafns.gperf" - {"is_object", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,}, -#line 547 "metafns.gperf" - {"is_const_type", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 518 "metafns.gperf" - {"reflect_object", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,}, -#line 430 "metafns.gperf" - {"is_explicit", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,}, -#line 476 "metafns.gperf" - {"is_alias_template", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 509 "metafns.gperf" - {"enumerators_of", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, -#line 448 "metafns.gperf" - {"is_complete_type", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,}, -#line 496 "metafns.gperf" - {"template_arguments_of", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, -#line 543 "metafns.gperf" - {"is_object_type", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 446 "metafns.gperf" - {"has_c_language_linkage", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,}, -#line 499 "metafns.gperf" - {"return_type_of", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,}, -#line 538 "metafns.gperf" - {"is_function_type", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 418 "metafns.gperf" - {"constant_of", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,}, -#line 439 "metafns.gperf" - {"is_rvalue_reference_qualified", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,}, -#line 429 "metafns.gperf" - {"is_user_declared", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,}, -#line 615 "metafns.gperf" - {"add_volatile", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,}, -#line 410 "metafns.gperf" - {"has_identifier", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,}, -#line 502 "metafns.gperf" - {"has_inaccessible_bases", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, -#line 445 "metafns.gperf" - {"has_external_linkage", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,}, -#line 503 "metafns.gperf" - {"has_inaccessible_subobjects", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, -#line 594 "metafns.gperf" - {"has_virtual_destructor", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,}, -#line 488 "metafns.gperf" - {"is_static_member", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,}, -#line 469 "metafns.gperf" - {"is_explicit_object_parameter", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,}, -#line 607 "metafns.gperf" - {"is_invocable_type", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, -#line 501 "metafns.gperf" - {"has_inaccessible_nonstatic_data_members", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, -#line 438 "metafns.gperf" - {"is_lvalue_reference_qualified", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,}, -#line 417 "metafns.gperf" - {"object_of", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,}, -#line 440 "metafns.gperf" - {"has_static_storage_duration", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,}, -#line 608 "metafns.gperf" - {"is_invocable_r_type", METAFN_IS_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,}, -#line 407 "metafns.gperf" - {"operator_of", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,}, -#line 508 "metafns.gperf" - {"subobjects_of", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, -#line 510 "metafns.gperf" - {"offset_of", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,}, -#line 620 "metafns.gperf" - {"make_signed", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,}, -#line 506 "metafns.gperf" - {"static_data_members_of", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, -#line 434 "metafns.gperf" - {"is_annotation", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,}, -#line 545 "metafns.gperf" - {"is_compound_type", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 424 "metafns.gperf" - {"is_override", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,}, -#line 522 "metafns.gperf" - {"data_member_spec", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,}, -#line 597 "metafns.gperf" - {"reference_converts_from_temporary", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 613 "metafns.gperf" - {"remove_cv", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,}, -#line 443 "metafns.gperf" - {"has_internal_linkage", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,}, -#line 537 "metafns.gperf" - {"is_class_type", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 457 "metafns.gperf" - {"is_operator_function", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,}, -#line 617 "metafns.gperf" - {"remove_reference", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,}, -#line 528 "metafns.gperf" - {"is_floating_point_type", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 552 "metafns.gperf" - {"is_standard_layout_type", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 533 "metafns.gperf" - {"is_member_object_pointer_type", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 558 "metafns.gperf" - {"is_consteval_only_type", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 478 "metafns.gperf" - {"is_operator_function_template", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,}, -#line 622 "metafns.gperf" - {"remove_extent", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,}, -#line 494 "metafns.gperf" - {"has_template_arguments", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,}, -#line 556 "metafns.gperf" - {"is_final_type", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 529 "metafns.gperf" - {"is_array_type", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 596 "metafns.gperf" - {"reference_constructs_from_temporary", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,}, -#line 507 "metafns.gperf" - {"nonstatic_data_members_of", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, -#line 631 "metafns.gperf" - {"invoke_result", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,}, -#line 626 "metafns.gperf" - {"remove_cvref", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,}, -#line 627 "metafns.gperf" - {"decay", METAFN_DECAY, METAFN_KIND_INFO_TINFO,}, -#line 555 "metafns.gperf" - {"is_abstract_type", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 633 "metafns.gperf" - {"unwrap_ref_decay", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,}, -#line 441 "metafns.gperf" - {"has_thread_storage_duration", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,}, -#line 624 "metafns.gperf" - {"remove_pointer", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,}, -#line 409 "metafns.gperf" - {"u8symbol_of", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,}, -#line 611 "metafns.gperf" - {"remove_const", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,}, -#line 623 "metafns.gperf" - {"remove_all_extents", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,}, -#line 524 "metafns.gperf" - {"define_aggregate", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,}, -#line 562 "metafns.gperf" - {"is_unbounded_array_type", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 521 "metafns.gperf" - {"reflect_constant_array", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,}, -#line 412 "metafns.gperf" - {"u8identifier_of", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,}, -#line 428 "metafns.gperf" - {"is_user_provided", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,}, -#line 527 "metafns.gperf" - {"is_integral_type", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 415 "metafns.gperf" - {"source_location_of", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,}, -#line 612 "metafns.gperf" - {"remove_volatile", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,}, -#line 640 "metafns.gperf" - {"annotations_of_with_type", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,}, + {"is_void_type", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,}, #line 536 "metafns.gperf" - {"is_union_type", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,}, -#line 512 "metafns.gperf" - {"alignment_of", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,}, -#line 639 "metafns.gperf" - {"annotations_of", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, + {"is_pointer_type", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 442 "metafns.gperf" + {"is_volatile", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,}, +#line 488 "metafns.gperf" + {"is_value", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,}, +#line 495 "metafns.gperf" + {"is_base", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,}, +#line 456 "metafns.gperf" + {"is_variable", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,}, +#line 610 "metafns.gperf" + {"is_nothrow_convertible_type", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 588 "metafns.gperf" + {"is_nothrow_constructible_type", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, +#line 615 "metafns.gperf" + {"is_nothrow_invocable_type", METAFN_IS_NOTHROW_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, +#line 593 "metafns.gperf" + {"is_nothrow_copy_assignable_type", METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 616 "metafns.gperf" + {"is_nothrow_invocable_r_type", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,}, +#line 590 "metafns.gperf" + {"is_nothrow_copy_constructible_type", METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 607 "metafns.gperf" + {"is_base_of_type", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 594 "metafns.gperf" + {"is_nothrow_move_assignable_type", METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 591 "metafns.gperf" + {"is_nothrow_move_constructible_type", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 480 "metafns.gperf" + {"is_variable_template", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 642 "metafns.gperf" + {"variant_size", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,}, +#line 532 "metafns.gperf" + {"is_null_pointer_type", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 457 "metafns.gperf" + {"is_type", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,}, +#line 425 "metafns.gperf" + {"is_public", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,}, +#line 437 "metafns.gperf" + {"is_noexcept", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,}, +#line 520 "metafns.gperf" + {"extract", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,}, +#line 643 "metafns.gperf" + {"variant_alternative", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,}, #line 560 "metafns.gperf" + {"is_polymorphic_type", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 427 "metafns.gperf" + {"is_private", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,}, +#line 461 "metafns.gperf" + {"is_function", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,}, +#line 458 "metafns.gperf" + {"is_namespace", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,}, +#line 612 "metafns.gperf" + {"is_pointer_interconvertible_base_of_type", METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 567 "metafns.gperf" + {"is_bounded_array_type", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 441 "metafns.gperf" + {"is_const", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,}, +#line 487 "metafns.gperf" + {"is_concept", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,}, +#line 606 "metafns.gperf" + {"is_same_type", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 511 "metafns.gperf" + {"bases_of", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, +#line 479 "metafns.gperf" + {"is_function_template", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 592 "metafns.gperf" + {"is_nothrow_assignable_type", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 462 "metafns.gperf" + {"is_conversion_function", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,}, +#line 597 "metafns.gperf" + {"is_nothrow_destructible_type", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 609 "metafns.gperf" + {"is_convertible_type", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 599 "metafns.gperf" + {"is_implicit_lifetime_type", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 598 "metafns.gperf" + {"is_nothrow_relocatable_type", METAFN_IS_NOTHROW_RELOCATABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 478 "metafns.gperf" + {"is_template", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 589 "metafns.gperf" + {"is_nothrow_default_constructible_type", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 521 "metafns.gperf" + {"can_substitute", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,}, +#line 483 "metafns.gperf" + {"is_conversion_function_template", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 450 "metafns.gperf" + {"has_module_linkage", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,}, +#line 414 "metafns.gperf" + {"symbol_of", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,}, +#line 572 "metafns.gperf" + {"is_copy_constructible_type", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 497 "metafns.gperf" + {"has_parent", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,}, +#line 570 "metafns.gperf" + {"is_constructible_type", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, +#line 575 "metafns.gperf" + {"is_copy_assignable_type", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 459 "metafns.gperf" + {"is_type_alias", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,}, +#line 468 "metafns.gperf" + {"is_copy_constructor", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, +#line 640 "metafns.gperf" + {"tuple_size", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,}, +#line 504 "metafns.gperf" + {"variable_of", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,}, +#line 545 "metafns.gperf" + {"is_reflection_type", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 519 "metafns.gperf" + {"bit_size_of", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,}, +#line 471 "metafns.gperf" + {"is_copy_assignment", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,}, +#line 548 "metafns.gperf" + {"is_fundamental_type", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 611 "metafns.gperf" + {"is_layout_compatible_type", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 647 "metafns.gperf" + {"current", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,}, +#line 448 "metafns.gperf" + {"has_automatic_storage_duration", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,}, +#line 634 "metafns.gperf" + {"common_type", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,}, +#line 486 "metafns.gperf" + {"is_constructor_template", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 635 "metafns.gperf" + {"common_reference", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,}, +#line 426 "metafns.gperf" + {"is_protected", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,}, +#line 578 "metafns.gperf" + {"is_swappable_type", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 641 "metafns.gperf" + {"tuple_element", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,}, +#line 493 "metafns.gperf" + {"is_nonstatic_data_member", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,}, +#line 596 "metafns.gperf" + {"is_nothrow_swappable_type", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 525 "metafns.gperf" + {"reflect_function", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,}, +#line 595 "metafns.gperf" + {"is_nothrow_swappable_with_type", METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 573 "metafns.gperf" + {"is_move_constructible_type", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 466 "metafns.gperf" + {"is_constructor", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, +#line 644 "metafns.gperf" + {"type_order", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,}, +#line 571 "metafns.gperf" + {"is_default_constructible_type", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 496 "metafns.gperf" + {"has_default_member_initializer", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,}, +#line 546 "metafns.gperf" + {"is_reference_type", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 503 "metafns.gperf" + {"parameters_of", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, +#line 638 "metafns.gperf" + {"unwrap_reference", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,}, +#line 552 "metafns.gperf" + {"is_member_pointer_type", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 576 "metafns.gperf" + {"is_move_assignable_type", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 550 "metafns.gperf" + {"is_scalar_type", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 476 "metafns.gperf" + {"has_default_argument", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,}, +#line 465 "metafns.gperf" + {"is_special_member_function", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,}, +#line 422 "metafns.gperf" + {"type_of", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,}, +#line 574 "metafns.gperf" + {"is_assignable_type", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 469 "metafns.gperf" + {"is_move_constructor", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, +#line 631 "metafns.gperf" + {"add_pointer", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,}, +#line 470 "metafns.gperf" + {"is_assignment", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,}, +#line 428 "metafns.gperf" + {"is_virtual", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,}, +#line 636 "metafns.gperf" + {"underlying_type", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,}, +#line 467 "metafns.gperf" + {"is_default_constructor", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,}, +#line 472 "metafns.gperf" + {"is_move_assignment", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,}, +#line 453 "metafns.gperf" + {"has_linkage", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,}, +#line 417 "metafns.gperf" + {"identifier_of", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,}, +#line 556 "metafns.gperf" + {"is_trivially_relocatable_type", METAFN_IS_TRIVIALLY_RELOCATABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 491 "metafns.gperf" + {"is_class_member", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,}, +#line 622 "metafns.gperf" + {"add_cv", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,}, +#line 477 "metafns.gperf" + {"has_ellipsis_parameter", METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,}, +#line 473 "metafns.gperf" + {"is_destructor", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,}, +#line 492 "metafns.gperf" + {"is_namespace_member", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,}, +#line 510 "metafns.gperf" + {"members_of", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, +#line 555 "metafns.gperf" + {"is_trivially_copyable_type", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 608 "metafns.gperf" + {"is_virtual_base_of_type", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 580 "metafns.gperf" + {"is_trivially_constructible_type", METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, +#line 517 "metafns.gperf" + {"size_of", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,}, +#line 585 "metafns.gperf" + {"is_trivially_copy_assignable_type", METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 582 "metafns.gperf" + {"is_trivially_copy_constructible_type", METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 485 "metafns.gperf" + {"is_literal_operator_template", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 565 "metafns.gperf" + {"is_signed_type", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 501 "metafns.gperf" + {"template_of", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,}, +#line 620 "metafns.gperf" + {"add_const", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,}, +#line 432 "metafns.gperf" + {"is_deleted", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,}, +#line 481 "metafns.gperf" + {"is_class_template", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 547 "metafns.gperf" + {"is_arithmetic_type", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 522 "metafns.gperf" + {"substitute", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,}, +#line 433 "metafns.gperf" + {"is_defaulted", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,}, +#line 506 "metafns.gperf" + {"is_accessible", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, +#line 429 "metafns.gperf" + {"is_pure_virtual", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,}, +#line 474 "metafns.gperf" + {"is_function_parameter", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,}, +#line 431 "metafns.gperf" + {"is_final", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,}, +#line 464 "metafns.gperf" + {"is_literal_operator", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,}, +#line 557 "metafns.gperf" + {"is_replaceable_type", METAFN_IS_REPLACEABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 579 "metafns.gperf" + {"is_destructible_type", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 538 "metafns.gperf" + {"is_rvalue_reference_type", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 625 "metafns.gperf" + {"add_rvalue_reference", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,}, +#line 605 "metafns.gperf" + {"extent", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,}, +#line 541 "metafns.gperf" + {"is_enum_type", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 460 "metafns.gperf" + {"is_namespace_alias", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,}, +#line 587 "metafns.gperf" + {"is_trivially_destructible_type", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 490 "metafns.gperf" + {"is_structured_binding", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,}, +#line 581 "metafns.gperf" + {"is_trivially_default_constructible_type", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 443 "metafns.gperf" + {"is_mutable_member", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,}, +#line 569 "metafns.gperf" + {"is_scoped_enum_type", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 559 "metafns.gperf" + {"is_empty_type", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 455 "metafns.gperf" + {"is_enumerable_type", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,}, +#line 537 "metafns.gperf" + {"is_lvalue_reference_type", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 586 "metafns.gperf" + {"is_trivially_move_assignable_type", METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 498 "metafns.gperf" + {"parent_of", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,}, +#line 554 "metafns.gperf" + {"is_volatile_type", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 583 "metafns.gperf" + {"is_trivially_move_constructible_type", METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 419 "metafns.gperf" + {"display_string_of", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,}, +#line 438 "metafns.gperf" + {"is_bit_field", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,}, +#line 577 "metafns.gperf" + {"is_swappable_with_type", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 526 "metafns.gperf" + {"reflect_constant_string", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,}, +#line 540 "metafns.gperf" + {"is_member_function_pointer_type", METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 563 "metafns.gperf" + {"is_aggregate_type", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 529 "metafns.gperf" + {"is_data_member_spec", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,}, +#line 523 "metafns.gperf" + {"reflect_constant", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,}, +#line 601 "metafns.gperf" + {"has_unique_object_representations", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,}, +#line 584 "metafns.gperf" + {"is_trivially_assignable_type", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 624 "metafns.gperf" + {"add_lvalue_reference", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,}, +#line 627 "metafns.gperf" + {"make_unsigned", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,}, +#line 420 "metafns.gperf" + {"u8display_string_of", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,}, +#line 499 "metafns.gperf" + {"dealias", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,}, +#line 439 "metafns.gperf" + {"is_enumerator", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,}, +#line 489 "metafns.gperf" + {"is_object", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,}, +#line 553 "metafns.gperf" + {"is_const_type", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 524 "metafns.gperf" + {"reflect_object", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,}, +#line 436 "metafns.gperf" + {"is_explicit", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,}, +#line 482 "metafns.gperf" + {"is_alias_template", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 515 "metafns.gperf" + {"enumerators_of", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, +#line 454 "metafns.gperf" + {"is_complete_type", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,}, +#line 502 "metafns.gperf" + {"template_arguments_of", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, +#line 549 "metafns.gperf" + {"is_object_type", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 452 "metafns.gperf" + {"has_c_language_linkage", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,}, +#line 505 "metafns.gperf" + {"return_type_of", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,}, +#line 544 "metafns.gperf" + {"is_function_type", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 424 "metafns.gperf" + {"constant_of", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,}, +#line 445 "metafns.gperf" + {"is_rvalue_reference_qualified", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,}, +#line 435 "metafns.gperf" + {"is_user_declared", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,}, +#line 621 "metafns.gperf" + {"add_volatile", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,}, +#line 416 "metafns.gperf" + {"has_identifier", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,}, +#line 508 "metafns.gperf" + {"has_inaccessible_bases", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, +#line 451 "metafns.gperf" + {"has_external_linkage", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,}, +#line 509 "metafns.gperf" + {"has_inaccessible_subobjects", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, +#line 600 "metafns.gperf" + {"has_virtual_destructor", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,}, +#line 494 "metafns.gperf" + {"is_static_member", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,}, +#line 475 "metafns.gperf" + {"is_explicit_object_parameter", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,}, +#line 613 "metafns.gperf" + {"is_invocable_type", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,}, +#line 507 "metafns.gperf" + {"has_inaccessible_nonstatic_data_members", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,}, +#line 444 "metafns.gperf" + {"is_lvalue_reference_qualified", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,}, +#line 423 "metafns.gperf" + {"object_of", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,}, +#line 446 "metafns.gperf" + {"has_static_storage_duration", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,}, +#line 614 "metafns.gperf" + {"is_invocable_r_type", METAFN_IS_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,}, +#line 413 "metafns.gperf" + {"operator_of", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,}, +#line 514 "metafns.gperf" + {"subobjects_of", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, +#line 516 "metafns.gperf" + {"offset_of", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,}, +#line 626 "metafns.gperf" + {"make_signed", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,}, +#line 512 "metafns.gperf" + {"static_data_members_of", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, +#line 440 "metafns.gperf" + {"is_annotation", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,}, +#line 551 "metafns.gperf" + {"is_compound_type", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 430 "metafns.gperf" + {"is_override", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,}, +#line 528 "metafns.gperf" + {"data_member_spec", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,}, +#line 603 "metafns.gperf" + {"reference_converts_from_temporary", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 619 "metafns.gperf" + {"remove_cv", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,}, +#line 449 "metafns.gperf" + {"has_internal_linkage", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,}, +#line 543 "metafns.gperf" + {"is_class_type", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 463 "metafns.gperf" + {"is_operator_function", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,}, +#line 623 "metafns.gperf" + {"remove_reference", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,}, +#line 534 "metafns.gperf" + {"is_floating_point_type", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 558 "metafns.gperf" + {"is_standard_layout_type", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 539 "metafns.gperf" + {"is_member_object_pointer_type", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 564 "metafns.gperf" + {"is_consteval_only_type", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 484 "metafns.gperf" + {"is_operator_function_template", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,}, +#line 628 "metafns.gperf" + {"remove_extent", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,}, +#line 500 "metafns.gperf" + {"has_template_arguments", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,}, +#line 562 "metafns.gperf" + {"is_final_type", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 535 "metafns.gperf" + {"is_array_type", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 602 "metafns.gperf" + {"reference_constructs_from_temporary", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,}, +#line 513 "metafns.gperf" + {"nonstatic_data_members_of", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,}, +#line 637 "metafns.gperf" + {"invoke_result", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,}, +#line 632 "metafns.gperf" + {"remove_cvref", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,}, +#line 633 "metafns.gperf" + {"decay", METAFN_DECAY, METAFN_KIND_INFO_TINFO,}, +#line 561 "metafns.gperf" + {"is_abstract_type", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 639 "metafns.gperf" + {"unwrap_ref_decay", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,}, +#line 447 "metafns.gperf" + {"has_thread_storage_duration", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,}, +#line 630 "metafns.gperf" + {"remove_pointer", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,}, +#line 415 "metafns.gperf" + {"u8symbol_of", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,}, +#line 617 "metafns.gperf" + {"remove_const", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,}, +#line 629 "metafns.gperf" + {"remove_all_extents", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,}, +#line 530 "metafns.gperf" + {"define_aggregate", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,}, +#line 568 "metafns.gperf" + {"is_unbounded_array_type", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 527 "metafns.gperf" + {"reflect_constant_array", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,}, +#line 648 "metafns.gperf" + {"_S_exception_cvt_to_utf8", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,}, +#line 649 "metafns.gperf" + {"_S_exception_cvt_from_utf8", METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, METAFN_KIND_STRING_VIEW_INPUT_RANGE,}, +#line 418 "metafns.gperf" + {"u8identifier_of", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,}, +#line 434 "metafns.gperf" + {"is_user_provided", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,}, +#line 533 "metafns.gperf" + {"is_integral_type", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 421 "metafns.gperf" + {"source_location_of", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,}, +#line 618 "metafns.gperf" + {"remove_volatile", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,}, +#line 646 "metafns.gperf" + {"annotations_of_with_type", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,}, +#line 542 "metafns.gperf" + {"is_union_type", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,}, +#line 518 "metafns.gperf" + {"alignment_of", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,}, +#line 645 "metafns.gperf" + {"annotations_of", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,}, +#line 566 "metafns.gperf" {"is_unsigned_type", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,} }; @@ -1049,18 +1059,18 @@ metafn_lookup::find (const char *str, size_t len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 223, -1, -1, 224, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 225, -1, + 226, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 227, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 228, -1, -1, -1, -1, -1, -1, -1, -1, + 229, -1, -1, 230, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 231, -1, -1, -1, -1, -1, -1, -1, -1, 232, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 225, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 226, -1, -1, -1, -1, -1, -1, -1, -1, - 227, -1, -1, 228, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 229, -1, -1, -1, -1, -1, -1, -1, -1, 230, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 231, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 232, -1, 233, + -1, -1, 233, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 234, -1, 235, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1068,7 +1078,7 @@ metafn_lookup::find (const char *str, size_t len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 234 + 236 }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc index 6b9961e3763..aa8f5e825ae 100644 --- a/gcc/cp/reflect.cc +++ b/gcc/cp/reflect.cc @@ -1,4 +1,4 @@ - /* C++ reflection code. +/* C++ reflection code. Copyright (C) 2025 Free Software Foundation, Inc. Written by Marek Polacek @@ -521,7 +521,7 @@ fail_ret: { if (TREE_CODE (retvec[i]) != INTEGER_CST) return throw_exception (loc, ctx, - N_("array element not a constant integer"), + "array element not a constant integer", fun, jump_target); } else @@ -529,7 +529,7 @@ fail_ret: gcc_assert (kind == REFLECT_CONSTANT_ARRAY); tree expr = convert_reflect_constant_arg (valuet, retvec[i]); if (expr == error_mark_node) - return throw_exception (loc, ctx, N_("reflect_constant failed"), + return throw_exception (loc, ctx, "reflect_constant failed", fun, jump_target); if (VAR_P (expr)) expr = unshare_expr (DECL_INITIAL (expr)); @@ -918,9 +918,21 @@ get_meta_exception_object (location_t loc, const char *what, tree from) type = TREE_TYPE (type); vec *elts = nullptr; what = _(what); + /* Translate what from SOURCE_CHARSET to exec charset. */ + cpp_string istr, ostr; + istr.len = strlen (what) + 1; + istr.text = (const unsigned char *) what; + if (!cpp_translate_string (parse_in, &istr, &ostr, CPP_STRING, false)) + { + what = ""; + ostr.text = NULL; + } + else + what = (const char *) ostr.text; if (TREE_CODE (from) == FUNCTION_DECL && DECL_TEMPLATE_INFO (from)) from = DECL_TI_TEMPLATE (from); tree string_lit = build_string (strlen (what) + 1, what); + free (const_cast (ostr.text)); TREE_TYPE (string_lit) = char_array_type_node; string_lit = fix_string_type (string_lit); CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE, string_lit); @@ -2230,20 +2242,14 @@ eval_operator_of (location_t loc, const constexpr_ctx *ctx, tree r, static tree temp_string_literal (const char *name, tree elt_type) { - cpp_string cstr = { 0, 0 }, strname; - size_t len = strlen (name) + 3; /* Two for '"'s. One for NULL. */ - char *namep = XNEWVEC (char, len); - snprintf (namep, len, "\"%s\"", name); - strname.text = (unsigned char *) namep; - strname.len = len - 1; - if (!cpp_interpret_string (parse_in, &strname, 1, &cstr, + cpp_string istr, ostr; + istr.len = strlen (name) + 1; + istr.text = (const unsigned char *) name; + if (!cpp_translate_string (parse_in, &istr, &ostr, elt_type == char_type_node - ? CPP_STRING : CPP_UTF8STRING)) - { - XDELETEVEC (namep); - return NULL_TREE; - } - name = (const char *) cstr.text; + ? CPP_STRING : CPP_UTF8STRING, false)) + return NULL_TREE; + name = (const char *) ostr.text; tree ret = build_string_literal (strlen (name) + 1, name, elt_type); free (const_cast (name)); return ret; @@ -6514,6 +6520,116 @@ eval_has_inaccessible_subobjects (location_t loc, const constexpr_ctx *ctx, jump_target, fun); } +/* Implement std::meta::exception::_S_exception_cvt_to_utf8. This is + an implementation specific metafunction which translates string_view + into u8string_view for use in std::meta::exception constructors. + On translation failure returns an empty u8string_view. */ + +static tree +eval_exception__S_exception_cvt_to_utf8 (location_t loc, + const constexpr_ctx *ctx, + tree call, bool *non_constant_p, + bool *overflow_p, tree *jump_target, + tree fun) +{ + tree str = get_range_elts (loc, ctx, call, 0, non_constant_p, overflow_p, + jump_target, REFLECT_CONSTANT_STRING, fun); + if (*jump_target) + return NULL_TREE; + if (*non_constant_p) + return call; + if (TREE_CODE (str) != STRING_CST + || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (str))) != char_type_node) + { + error_at (loc, "unexpected argument to %<_S_exception_cvt_to_utf8%>"); + *non_constant_p = true; + return call; + } + /* We need to translate the string twice for the theoretical case + of non-UTF8 SOURCE_CHARSET. First translate from exec charset to + SOURCE_CHARSET... */ + cpp_string istr, ostr; + istr.len = TREE_STRING_LENGTH (str) + 1; + istr.text = (const unsigned char *) TREE_STRING_POINTER (str); + const char *name; + if (!cpp_translate_string (parse_in, &istr, &ostr, CPP_STRING, true)) + { + ostr.text = NULL; + name = ""; + } + else + name = (const char *) ostr.text; + /* And then let temp_string_literal translate from SOURCE_CHARSET to + UTF-8. */ + str = temp_string_literal (name, char8_type_node); + free (const_cast (ostr.text)); + if (str == NULL_TREE) + { + str = temp_string_literal ("", char8_type_node); + gcc_assert (str); + } + releasing_vec args (make_tree_vector_single (str)); + tree ret = build_special_member_call (NULL_TREE, complete_ctor_identifier, + &args, TREE_TYPE (call), LOOKUP_NORMAL, + tf_warning_or_error); + return build_cplus_new (TREE_TYPE (call), ret, tf_warning_or_error); +} + +/* Implement std::meta::exception::_S_exception_cvt_from_utf8. This is + an implementation specific metafunction which translates u8string_view + into string_view for use in std::meta::exception constructors. + On translation failure returns an empty string_view. */ + +static tree +eval_exception__S_exception_cvt_from_utf8 (location_t loc, + const constexpr_ctx *ctx, + tree call, bool *non_constant_p, + bool *overflow_p, tree *jump_target, + tree fun) +{ + tree str = get_range_elts (loc, ctx, call, 0, non_constant_p, overflow_p, + jump_target, REFLECT_CONSTANT_STRING, fun); + if (*jump_target) + return NULL_TREE; + if (*non_constant_p) + return call; + if (TREE_CODE (str) != STRING_CST + || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (str))) != char8_type_node) + { + error_at (loc, "unexpected argument to %<_S_exception_cvt_from_utf8%>"); + *non_constant_p = true; + return call; + } + /* We need to translate the string twice for the theoretical case + of non-UTF8 SOURCE_CHARSET. First translate from UTF-8 to + SOURCE_CHARSET... */ + cpp_string istr, ostr; + istr.len = TREE_STRING_LENGTH (str) + 1; + istr.text = (const unsigned char *) TREE_STRING_POINTER (str); + const char *name; + if (!cpp_translate_string (parse_in, &istr, &ostr, CPP_UTF8STRING, true)) + { + ostr.text = NULL; + name = ""; + } + else + name = (const char *) ostr.text; + /* And then let temp_string_literal translate from SOURCE_CHARSET to + exec charset. */ + str = temp_string_literal (name, char_type_node); + free (const_cast (ostr.text)); + if (str == NULL_TREE) + { + str = temp_string_literal ("", char_type_node); + gcc_assert (str); + } + releasing_vec args (make_tree_vector_single (str)); + tree ret = build_special_member_call (NULL_TREE, complete_ctor_identifier, + &args, TREE_TYPE (call), LOOKUP_NORMAL, + tf_warning_or_error); + return build_cplus_new (TREE_TYPE (call), ret, tf_warning_or_error); +} + #include "metafns.h" /* Expand a call to a metafunction FUN. CALL is the CALL_EXPR. @@ -7206,6 +7322,28 @@ process_metafunction (const constexpr_ctx *ctx, tree fun, tree call, "access_context")) return eval_access_context_current (loc, ctx, call, non_constant_p); goto not_found; + case METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8: + case METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8: + if (DECL_CLASS_SCOPE_P (fun) + && TYPE_NAME (DECL_CONTEXT (fun)) + && TREE_CODE (TYPE_NAME (DECL_CONTEXT (fun))) == TYPE_DECL + && DECL_NAME (TYPE_NAME (DECL_CONTEXT (fun))) + && id_equal (DECL_NAME (TYPE_NAME (DECL_CONTEXT (fun))), + "exception")) + { + if (minfo->code == METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8) + return eval_exception__S_exception_cvt_to_utf8 (loc, ctx, call, + non_constant_p, + overflow_p, + jump_target, fun); + else + return eval_exception__S_exception_cvt_from_utf8 (loc, ctx, call, + non_constant_p, + overflow_p, + jump_target, + fun); + } + goto not_found; } goto not_found; } diff --git a/gcc/testsuite/g++.dg/reflect/eh5.C b/gcc/testsuite/g++.dg/reflect/eh5.C index fefe0560c5a..9e6c78169f6 100644 --- a/gcc/testsuite/g++.dg/reflect/eh5.C +++ b/gcc/testsuite/g++.dg/reflect/eh5.C @@ -23,7 +23,8 @@ foo (info x) std::source_location loc = ex.where (); if (loc.line () != std::source_location::current ().line () - 7 || from != ^^std::meta::is_class_type - || what != "reflection does not represent a type") + || what != "reflection does not represent a type" + || ex.u8what () != u8"reflection does not represent a type") return false; return true; } @@ -44,7 +45,8 @@ bar (info x) std::source_location loc = ex.where (); if (loc.line () != std::source_location::current ().line () - 7 || from != ^^std::meta::parameters_of - || what != "reflection does not represent a function or function type") + || what != "reflection does not represent a function or function type" + || ex.u8what () != u8"reflection does not represent a function or function type") return false; return true; } @@ -65,7 +67,8 @@ baz (info x) std::source_location loc = ex.where (); if (loc.line () != std::source_location::current ().line () - 7 || from != ^^std::meta::data_member_spec - || what != "name is a keyword") + || what != "name is a keyword" + || ex.u8what () != u8"name is a keyword") return false; return true; } @@ -86,7 +89,8 @@ qux (info x) std::source_location loc = ex.where (); if (loc.line () != std::source_location::current ().line () - 7 || from != ^^std::meta::can_substitute - || what != "invalid argument to can_substitute") + || what != "invalid argument to can_substitute" + || ex.u8what () != u8"invalid argument to can_substitute") return false; return true; } diff --git a/gcc/testsuite/g++.dg/reflect/eh6.C b/gcc/testsuite/g++.dg/reflect/eh6.C new file mode 100644 index 00000000000..b33cf319085 --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/eh6.C @@ -0,0 +1,6 @@ +// { dg-do compile { target c++26 } } +// { dg-require-iconv "IBM1047" } +// { dg-additional-options "-freflection -fexec-charset=IBM1047" } +// Test throwing std::meta::exception. + +#include "eh5.C" diff --git a/gcc/testsuite/g++.dg/reflect/eh7.C b/gcc/testsuite/g++.dg/reflect/eh7.C new file mode 100644 index 00000000000..2a065241e1a --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/eh7.C @@ -0,0 +1,22 @@ +// { dg-do compile { target c++26 } } +// { dg-require-iconv "IBM1047" } +// { dg-additional-options "-freflection -fexec-charset=IBM1047" } +// Test std::meta::exception. + +#include + +using namespace std::meta; + +consteval bool +foo () +{ + exception a (u8"This is a string", ^^foo); + if (std::string_view (a.what ()) != std::string_view ("This is a string")) + return false; + exception b ("This is a string", ^^foo); + if (b.u8what () != std::u8string_view (u8"This is a string")) + return false; + return true; +} + +static_assert (foo ()); diff --git a/gcc/testsuite/g++.dg/reflect/eh8.C b/gcc/testsuite/g++.dg/reflect/eh8.C new file mode 100644 index 00000000000..ac4afa4b053 --- /dev/null +++ b/gcc/testsuite/g++.dg/reflect/eh8.C @@ -0,0 +1,31 @@ +// { dg-do compile { target c++26 } } +// { dg-require-iconv "ISO-8859-2" } +// { dg-options "-freflection -fexec-charset=ISO-8859-2" } +// Test std::meta::exception. + +#include + +using namespace std::meta; + +consteval bool +foo () +{ + exception a (u8"h\u00e1\U0000010Dky a \u010d\u00E1rky", ^^foo); + if (std::string_view (a.what ()) != std::string_view ("h\u00e1\U0000010Dky a \u010d\u00E1rky")) + return false; + exception b ("h\u00e1\U0000010Dky a \u010d\u00E1rky", ^^foo); + if (b.u8what () != std::u8string_view (u8"h\u00e1\U0000010Dky a \u010d\u00E1rky")) + return false; + return true; +} + +consteval bool +bar () +{ + exception a (u8"\N{GRINNING FACE}\N{GRINNING FACE WITH SMILING EYES}\N{LEFT SPEECH BUBBLE}", ^^foo); + const char *b = a.what (); // { dg-message "in 'constexpr' expansion of 'a.std::meta::exception::what\\\(\\\)" } + return true; // { dg-error "inline assembly is not a constant expression" "" { target *-*-* } 0 } +} + +static_assert (foo ()); +constexpr auto c = bar (); diff --git a/libstdc++-v3/include/std/meta b/libstdc++-v3/include/std/meta index c1b165439bb..07eb9078d20 100644 --- a/libstdc++-v3/include/std/meta +++ b/libstdc++-v3/include/std/meta @@ -87,8 +87,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // [meta.reflection.exception], class exception class exception : public std::exception { private: - //optional _M_what; - std::string_view _M_what; + string _M_what; u8string _M_u8what; info _M_from; source_location _M_where; @@ -97,12 +96,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION consteval exception(u8string_view __what, info __from, source_location __where = source_location::current()) noexcept - : _M_u8what{__what}, _M_from{__from}, _M_where{__where} { } + : _M_what{_S_exception_cvt_from_utf8(__what)}, _M_u8what{__what}, + _M_from{__from}, _M_where{__where} {} consteval exception(string_view __what, info __from, source_location __where = source_location::current()) noexcept - : _M_what{__what}, _M_from{__from}, _M_where{__where} { } + : _M_what{__what}, _M_u8what{_S_exception_cvt_to_utf8(__what)}, + _M_from{__from}, _M_where{__where} {} exception(const exception&) = default; exception(exception&&) = default; @@ -111,10 +112,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION exception& operator=(exception&&) = default; constexpr const char *what() const noexcept override - { return _M_what.data (); } + { + // If u8string is not empty and string is empty, conversion + // from UTF-8 to ordinary literal encoding failed. + // In that case what() should be non-constant. + if (_M_what.size() == 0 && _M_u8what.size() != 0) + asm(""); + return _M_what.c_str(); + } consteval u8string_view u8what() const noexcept { return _M_u8what; } consteval info from() const noexcept { return _M_from; } consteval source_location where() const noexcept { return _M_where; } + private: + // Helper special template metafunctions to convert from UTF-8 to + // ordinary literal encoding and vice versa. On conversion failure + // they just return an empty {,u8}string_view. + template + static consteval u8string_view _S_exception_cvt_to_utf8(_R&&); + template + static consteval string_view _S_exception_cvt_from_utf8(_R&&); }; // [meta.reflection.operators], operator representations