[{"id":3673113,"web_url":"http://patchwork.ozlabs.org/comment/3673113/","msgid":"<29e7269e-124b-4f05-8ef6-ce3cf1ee9241@redhat.com>","list_archive_url":null,"date":"2026-04-03T12:52:35","subject":"Re: [PATCH] c++, v2: Error recovery for fuzzed <meta> [PR124689]","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/3/26 8:45 AM, Jakub Jelinek wrote:\n> On Fri, Apr 03, 2026 at 12:26:04AM -0400, Jason Merrill wrote:\n>>> +    case METAFN_KIND_ARG_SIZE_T:\n>>> +      if (TREE_CODE (type) != INTEGER_TYPE\n>>> +\t  || TYPE_PRECISION (type) != TYPE_PRECISION (size_type_node)\n>>> +\t  || !TYPE_UNSIGNED (type))\n>>\n>> Why not same_type_ignoring...?\n> \n> Changed.\n>>> +\ttype = TREE_TYPE (type);\n>>> +      if (TREE_CODE (type) != RECORD_TYPE\n>>> +\t  || TYPE_NAME (type) == NULL_TREE\n>>> +\t  || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL\n>>> +\t  || DECL_NAME (TYPE_NAME (type)) == NULL_TREE\n>>> +\t  || !id_equal (DECL_NAME (TYPE_NAME (type)), \"access_context\")\n>>> +\t  || TYPE_CONTEXT (type) != std_meta_node)\n>>\n>> Seems like we want an is_std_meta_class to go with is_std_class, or a more\n>> generic version that takes the namespace as an argument.\n> \n> Added is_std_meta_class.\n> \n>>> +  tree expected_ret = NULL_TREE;\n>>> +  const char *expected_ret_str = NULL;\n>>> +  tree rettype;\n>>> +  if (TREE_CODE (call) == AGGR_INIT_EXPR)\n>>> +    rettype = TREE_TYPE (AGGR_INIT_EXPR_SLOT (call));\n>>> +  else\n>>> +    rettype = TREE_TYPE (call);\n>>> +  switch (METAFN_KIND_RET)\n>>\n>> Please factor the return checking out of process_metafunction as well.\n> \n> Done.\n> \n> Tested on x86_64-linux, ok for trunk?\n\nOK.\n\n> 2026-04-03  Jakub Jelinek  <jakub@redhat.com>\n> \n> \tPR c++/124689\n> \t* metafns.gperf (enum metafn_kind): Add\n> \tMETAFN_KIND_BOOL_INFO_REFLECTION_RANGE.\n> \t(can_substitute): Use METAFN_KIND_BOOL_INFO_REFLECTION_RANGE\n> \tinstead of METAFN_KIND_INFO_INFO_REFLECTION_RANGE.\n> \t(METAFN_KIND_ARG): Add MINFO argument.\n> \t(METAFN_KIND_RET): Define.\n> \t* reflect.cc (is_std_meta_class): New function.\n> \t(get_info): Add LOC argument, diagnose invalid argument type instead\n> \tof failing assertion.\n> \t(check_metafn_arg_type): New function.\n> \t(check_metafn_return_type): New function.\n> \t(process_metafunction): Diagnose clearly invalid return\n> \tor argument types.  Use rettype variable instead of TREE_TYPE (call).\n> \t* metafns.h: Regenerate.\n> \n> \t* g++.dg/reflect/pr124689.C: New test.\n> \n> --- gcc/cp/metafns.gperf.jj\t2026-03-31 23:42:05.560331889 +0200\n> +++ gcc/cp/metafns.gperf\t2026-04-03 11:20:21.836980025 +0200\n> @@ -267,10 +267,6 @@ enum {\n>     METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1\n>   };\n>   \n> -/* Get the metafn_kind_arg for argument ARGNO.  */\n> -#define METAFN_KIND_ARG(ARGNO) \\\n> -  ((minfo->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) & METAFN_KIND_MASK)\n> -\n>   /* Possible return types of metafunctions.  */\n>   enum metafn_kind_ret {\n>     METAFN_KIND_RET_BOOL,\n> @@ -288,6 +284,10 @@ enum metafn_kind_ret {\n>   };\n>   static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK, \"\");\n>   \n> +/* Get the metafn_kind_ret.  */\n> +#define METAFN_KIND_RET(MINFO) \\\n> +  ((metafn_kind_ret) (((int) (MINFO)->kind) & METAFN_KIND_MASK))\n> +\n>   /* Possible argument types of metafunctions.  */\n>   enum metafn_kind_arg {\n>     METAFN_KIND_ARG_VOID = 0,\n> @@ -308,6 +308,11 @@ enum metafn_kind_arg {\n>   static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK,\n>   \t       \"\");\n>   \n> +/* Get the metafn_kind_arg for argument ARGNO.  */\n> +#define METAFN_KIND_ARG(MINFO, ARGNO) \\\n> +  ((metafn_kind_arg) (((MINFO)->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) \\\n> +\t\t      & METAFN_KIND_MASK))\n> +\n>   /* Possible sets of 0-3 arguments of metafunctions.  */\n>   enum metafn_kind_args {\n>     METAFN_KIND_ARGS_VOID = METAFN_KIND_ARG_VOID,\n> @@ -381,6 +386,9 @@ enum metafn_kind {\n>     METAFN_KIND_INFO_REFLECTION_RANGET\n>       = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n>         | METAFN_KIND_RET_INFO,\n> +  METAFN_KIND_BOOL_INFO_REFLECTION_RANGE\n> +    = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n> +      | METAFN_KIND_RET_BOOL,\n>     METAFN_KIND_INFO_INFO_REFLECTION_RANGE\n>       = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n>         | METAFN_KIND_RET_INFO,\n> @@ -573,7 +581,7 @@ size_of, METAFN_SIZE_OF, METAFN_KIND_SIZ\n>   alignment_of, METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,\n>   bit_size_of, METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,\n>   extract, METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,\n> -can_substitute, METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,\n> +can_substitute, METAFN_CAN_SUBSTITUTE, METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,\n>   substitute, METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,\n>   reflect_constant, METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,\n>   reflect_object, METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,\n> --- gcc/cp/reflect.cc.jj\t2026-04-03 10:29:43.263184609 +0200\n> +++ gcc/cp/reflect.cc\t2026-04-03 11:31:03.702171089 +0200\n> @@ -308,6 +308,22 @@ decl_in_std_meta_p (tree decl)\n>     return decl_namespace_context (decl) == std_meta_node;\n>   }\n>   \n> +/* True if CTX is an instance of std::meta::NAME class.  */\n> +\n> +static bool\n> +is_std_meta_class (tree ctx, const char *name)\n> +{\n> +  if (ctx == NULL_TREE || !CLASS_TYPE_P (ctx) || !TYPE_MAIN_DECL (ctx))\n> +    return false;\n> +\n> +  tree decl = TYPE_MAIN_DECL (ctx);\n> +  tree dname = DECL_NAME (decl);\n> +  if (dname == NULL_TREE || !id_equal (dname, name))\n> +    return false;\n> +\n> +  return decl_in_std_meta_p (decl);\n> +}\n> +\n>   /* Returns true if FNDECL, a FUNCTION_DECL, is a call to a metafunction\n>      declared in namespace std::meta.  */\n>   \n> @@ -340,12 +356,18 @@ metafunction_p (tree fndecl)\n>   /* Extract the N-th reflection argument from a metafunction call CALL.  */\n>   \n>   static tree\n> -get_info (const constexpr_ctx *ctx, tree call, int n, bool *non_constant_p,\n> -\t  bool *overflow_p, tree *jump_target)\n> +get_info (location_t loc, const constexpr_ctx *ctx, tree call, int n,\n> +\t  bool *non_constant_p, bool *overflow_p, tree *jump_target)\n>   {\n>     gcc_checking_assert (call_expr_nargs (call) > n);\n>     tree info = get_nth_callarg (call, n);\n> -  gcc_checking_assert (REFLECTION_TYPE_P (TREE_TYPE (info)));\n> +  if (!REFLECTION_TYPE_P (TREE_TYPE (info)))\n> +    {\n> +      error_at (loc, \"incorrect %qT type of argument %d, expected %qT\",\n> +\t\tTREE_TYPE (info), n + 1, meta_info_type_node);\n> +      *non_constant_p = true;\n> +      return NULL_TREE;\n> +    }\n>     info = cxx_eval_constant_expression (ctx, info, vc_prvalue,\n>   \t\t\t\t       non_constant_p, overflow_p,\n>   \t\t\t\t       jump_target);\n> @@ -7538,6 +7560,146 @@ eval_extract (location_t loc, const cons\n>       }\n>   }\n>   \n> +/* Diagnose incorrect type of metafn argument and return true in that\n> +   case.  */\n> +\n> +static bool\n> +check_metafn_arg_type (location_t loc, metafn_kind_arg kind, int n, tree type,\n> +\t\t       bool *non_constant_p)\n> +{\n> +  tree expected = NULL_TREE;\n> +  const char *expected_str = NULL;\n> +  switch ((metafn_kind_arg) kind)\n> +    {\n> +    case METAFN_KIND_ARG_VOID:\n> +      break;\n> +    case METAFN_KIND_ARG_INFO:\n> +    case METAFN_KIND_ARG_TINFO:\n> +      if (!REFLECTION_TYPE_P (type))\n> +\texpected = meta_info_type_node;\n> +      break;\n> +    case METAFN_KIND_ARG_REFLECTION_RANGE:\n> +    case METAFN_KIND_ARG_REFLECTION_RANGET:\n> +    case METAFN_KIND_ARG_INPUT_RANGE:\n> +      break;\n> +    case METAFN_KIND_ARG_SIZE_T:\n> +      if (!same_type_ignoring_top_level_qualifiers_p (type, size_type_node))\n> +\texpected_str = \"std::size_t\";\n> +      break;\n> +    case METAFN_KIND_ARG_UNSIGNED:\n> +      if (!same_type_ignoring_top_level_qualifiers_p (type,\n> +\t\t\t\t\t\t      unsigned_type_node))\n> +\texpected = unsigned_type_node;\n> +      break;\n> +    case METAFN_KIND_ARG_OPERATORS:\n> +      if (TREE_CODE (type) != ENUMERAL_TYPE\n> +\t  || TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)\n> +\t  || TYPE_CONTEXT (type) != std_meta_node)\n> +\texpected_str = \"std::meta::operators\";\n> +      break;\n> +    case METAFN_KIND_ARG_ACCESS_CONTEXT:\n> +      if (TYPE_REF_P (type))\n> +\ttype = TREE_TYPE (type);\n> +      if (!is_std_meta_class (type, \"access_context\"))\n> +\texpected_str = \"std::meta::access_context\";\n> +      break;\n> +    case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:\n> +      if (TYPE_REF_P (type))\n> +\ttype = TREE_TYPE (type);\n> +      if (!is_std_meta_class (type, \"data_member_options\"))\n> +\texpected_str = \"std::meta::data_member_options\";\n> +      break;\n> +    case METAFN_KIND_ARG_TEMPLATE_PARM:\n> +    case METAFN_KIND_ARG_TEMPLATE_PARM_REF:\n> +      break;\n> +    }\n> +  if (expected || expected_str)\n> +    {\n> +      if (expected_str)\n> +\terror_at (loc, \"incorrect %qT type of argument %d, expected %qs\",\n> +\t\t  type, n + 1, expected_str);\n> +      else\n> +\terror_at (loc, \"incorrect %qT type of argument %d, expected %qT\",\n> +\t\t  type, n + 1, expected);\n> +      *non_constant_p = true;\n> +      return true;\n> +    }\n> +  return false;\n> +}\n> +\n> +/* Diagnose incorrect return type of metafn and return true in that case.  */\n> +\n> +static bool\n> +check_metafn_return_type (location_t loc, metafn_kind_ret kind, tree type,\n> +\t\t\t  bool *non_constant_p)\n> +{\n> +  tree expected = NULL_TREE;\n> +  const char *expected_str = NULL;\n> +  switch (kind)\n> +    {\n> +    case METAFN_KIND_RET_BOOL:\n> +      if (TREE_CODE (type) != BOOLEAN_TYPE)\n> +\texpected = boolean_type_node;\n> +      break;\n> +    case METAFN_KIND_RET_INFO:\n> +      if (!REFLECTION_TYPE_P (type))\n> +\texpected = meta_info_type_node;\n> +      break;\n> +    case METAFN_KIND_RET_SIZE_T:\n> +      if (!same_type_ignoring_top_level_qualifiers_p (type, size_type_node))\n> +\texpected_str = \"std::size_t\";\n> +      break;\n> +    case METAFN_KIND_RET_MEMBER_OFFSET:\n> +      if (!is_std_meta_class (type, \"member_offset\"))\n> +\texpected_str = \"std::meta::member_offset\";\n> +      break;\n> +    case METAFN_KIND_RET_OPERATORS:\n> +      if (TREE_CODE (type) != ENUMERAL_TYPE\n> +\t  || TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)\n> +\t  || TYPE_CONTEXT (type) != std_meta_node)\n> +\texpected_str = \"std::meta::operators\";\n> +      break;\n> +    case METAFN_KIND_RET_SOURCE_LOCATION:\n> +      if (!is_std_class (type, \"source_location\"))\n> +\texpected_str = \"std::source_location\";\n> +      break;\n> +    case METAFN_KIND_RET_STRING_VIEW:\n> +      if (!CLASS_TYPE_P (type))\n> +\texpected_str = \"std::string_view\";\n> +      break;\n> +    case METAFN_KIND_RET_U8STRING_VIEW:\n> +      if (!CLASS_TYPE_P (type))\n> +\texpected_str = \"std::u8string_view\";\n> +      break;\n> +    case METAFN_KIND_RET_STRONG_ORDERING:\n> +      if (!is_std_class (type, \"strong_ordering\"))\n> +\texpected_str = \"std::strong_ordering\";\n> +      break;\n> +    case METAFN_KIND_RET_VECTOR_INFO:\n> +      if (!CLASS_TYPE_P (type))\n> +\texpected_str = \"std::vector<std::meta::info>\";\n> +      break;\n> +    case METAFN_KIND_RET_ACCESS_CONTEXT:\n> +      if (!is_std_meta_class (type, \"access_context\"))\n> +\texpected_str = \"std::meta::access_context\";\n> +      break;\n> +    case METAFN_KIND_RET_TEMPLATE_PARM:\n> +      break;\n> +    }\n> +  if (expected || expected_str)\n> +    {\n> +      if (expected_str)\n> +\terror_at (loc, \"incorrect %qT return type, expected %qs\",\n> +\t\t  type, expected_str);\n> +      else\n> +\terror_at (loc, \"incorrect %qT return type, expected %qT\",\n> +\t\t  type, expected);\n> +      *non_constant_p = true;\n> +      return true;\n> +    }\n> +  return false;\n> +}\n> +\n>   /* Expand a call to a metafunction FUN.  CALL is the CALL_EXPR.\n>      JUMP_TARGET is set if we are throwing std::meta::exception.  */\n>   \n> @@ -7561,20 +7723,28 @@ process_metafunction (const constexpr_ct\n>     tree h = NULL_TREE, h1 = NULL_TREE, hvec = NULL_TREE, expr = NULL_TREE;\n>     tree type = NULL_TREE, ht, info;\n>     reflect_kind kind = REFLECT_UNDEF;\n> +  tree rettype;\n> +  if (TREE_CODE (call) == AGGR_INIT_EXPR)\n> +    rettype = TREE_TYPE (AGGR_INIT_EXPR_SLOT (call));\n> +  else\n> +    rettype = TREE_TYPE (call);\n> +  if (check_metafn_return_type (loc, METAFN_KIND_RET (minfo), rettype,\n> +\t\t\t\tnon_constant_p))\n> +    return NULL_TREE;\n>     for (int argno = 0; argno < 3; ++argno)\n> -    switch (METAFN_KIND_ARG (argno))\n> +    switch (METAFN_KIND_ARG (minfo, argno))\n>         {\n>         case METAFN_KIND_ARG_VOID:\n>   \tbreak;\n>         case METAFN_KIND_ARG_INFO:\n>         case METAFN_KIND_ARG_TINFO:\n>   \tgcc_assert (argno < 2);\n> -\tinfo = get_info (ctx, call, argno, non_constant_p, overflow_p,\n> +\tinfo = get_info (loc, ctx, call, argno, non_constant_p, overflow_p,\n>   \t\t\t jump_target);\n>   \tif (*jump_target || *non_constant_p)\n>   \t  return NULL_TREE;\n>   \tht = REFLECT_EXPR_HANDLE (info);\n> -\tif (METAFN_KIND_ARG (argno) == METAFN_KIND_ARG_TINFO\n> +\tif (METAFN_KIND_ARG (minfo, argno) == METAFN_KIND_ARG_TINFO\n>   \t    && eval_is_type (ht) != boolean_true_node)\n>   \t  return throw_exception_nontype (loc, ctx, fun, non_constant_p,\n>   \t\t\t\t\t  jump_target);\n> @@ -7611,6 +7781,9 @@ process_metafunction (const constexpr_ct\n>         case METAFN_KIND_ARG_OPERATORS:\n>   \tgcc_assert (argno == 0);\n>   \texpr = get_nth_callarg (call, 0);\n> +\tif (check_metafn_arg_type (loc, METAFN_KIND_ARG (minfo, argno), 0,\n> +\t\t\t\t   TREE_TYPE (expr), non_constant_p))\n> +\t  return NULL_TREE;\n>   \texpr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,\n>   \t\t\t\t\t     non_constant_p, overflow_p,\n>   \t\t\t\t\t     jump_target);\n> @@ -7622,6 +7795,9 @@ process_metafunction (const constexpr_ct\n>         case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:\n>   \tgcc_assert (argno == 1);\n>   \texpr = get_nth_callarg (call, argno);\n> +\tif (check_metafn_arg_type (loc, METAFN_KIND_ARG (minfo, argno), 1,\n> +\t\t\t\t   TREE_TYPE (expr), non_constant_p))\n> +\t  return NULL_TREE;\n>   \texpr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,\n>   \t\t\t\t\t     non_constant_p, overflow_p,\n>   \t\t\t\t\t     jump_target);\n> @@ -7636,31 +7812,31 @@ process_metafunction (const constexpr_ct\n>       {\n>       case METAFN_OPERATOR_OF:\n>         return eval_operator_of (loc, ctx, h, non_constant_p, jump_target,\n> -\t\t\t       TREE_TYPE (call), fun);\n> +\t\t\t       rettype, fun);\n>       case METAFN_SYMBOL_OF:\n>         return eval_symbol_of (loc, ctx, expr, non_constant_p, jump_target,\n> -\t\t\t     char_type_node, TREE_TYPE (call), fun);\n> +\t\t\t     char_type_node, rettype, fun);\n>       case METAFN_U8SYMBOL_OF:\n>         return eval_symbol_of (loc, ctx, expr, non_constant_p, jump_target,\n> -\t\t\t     char8_type_node, TREE_TYPE (call), fun);\n> +\t\t\t     char8_type_node, rettype, fun);\n>       case METAFN_HAS_IDENTIFIER:\n>         return eval_has_identifier (h, kind);\n>       case METAFN_IDENTIFIER_OF:\n>         return eval_identifier_of (loc, ctx, h, kind, non_constant_p, jump_target,\n> -\t\t\t\t char_type_node, TREE_TYPE (call), fun);\n> +\t\t\t\t char_type_node, rettype, fun);\n>       case METAFN_U8IDENTIFIER_OF:\n>         return eval_identifier_of (loc, ctx, h, kind, non_constant_p, jump_target,\n> -\t\t\t\t char8_type_node, TREE_TYPE (call), fun);\n> +\t\t\t\t char8_type_node, rettype, fun);\n>       case METAFN_DISPLAY_STRING_OF:\n>         return eval_display_string_of (loc, ctx, h, kind, non_constant_p,\n>   \t\t\t\t     jump_target, char_type_node,\n> -\t\t\t\t     TREE_TYPE (call), fun);\n> +\t\t\t\t     rettype, fun);\n>       case METAFN_U8DISPLAY_STRING_OF:\n>         return eval_display_string_of (loc, ctx, h, kind, non_constant_p,\n>   \t\t\t\t     jump_target, char8_type_node,\n> -\t\t\t\t     TREE_TYPE (call), fun);\n> +\t\t\t\t     rettype, fun);\n>       case METAFN_SOURCE_LOCATION_OF:\n> -      return eval_source_location_of (loc, h, kind, TREE_TYPE (call));\n> +      return eval_source_location_of (loc, h, kind, rettype);\n>       case METAFN_TYPE_OF:\n>         return eval_type_of (loc, ctx, h, kind, non_constant_p, jump_target, fun);\n>       case METAFN_OBJECT_OF:\n> @@ -7880,16 +8056,16 @@ process_metafunction (const constexpr_ct\n>         return eval_enumerators_of (loc, ctx, h, non_constant_p, jump_target,\n>   \t\t\t\t  fun);\n>       case METAFN_OFFSET_OF:\n> -      return eval_offset_of (loc, ctx, h, kind, TREE_TYPE (call),\n> +      return eval_offset_of (loc, ctx, h, kind, rettype,\n>   \t\t\t     non_constant_p, jump_target, fun);\n>       case METAFN_SIZE_OF:\n> -      return eval_size_of (loc, ctx, h, kind, TREE_TYPE (call), non_constant_p,\n> +      return eval_size_of (loc, ctx, h, kind, rettype, non_constant_p,\n>   \t\t\t   jump_target, fun);\n>       case METAFN_ALIGNMENT_OF:\n> -      return eval_alignment_of (loc, ctx, h, kind, TREE_TYPE (call),\n> +      return eval_alignment_of (loc, ctx, h, kind, rettype,\n>   \t\t\t\tnon_constant_p, jump_target, fun);\n>       case METAFN_BIT_SIZE_OF:\n> -      return eval_bit_size_of (loc, ctx, h, kind, TREE_TYPE (call),\n> +      return eval_bit_size_of (loc, ctx, h, kind, rettype,\n>   \t\t\t       non_constant_p, jump_target, fun);\n>       case METAFN_EXTRACT:\n>         {\n> --- gcc/testsuite/g++.dg/reflect/pr124689.C.jj\t2026-04-03 10:58:40.557430658 +0200\n> +++ gcc/testsuite/g++.dg/reflect/pr124689.C\t2026-04-03 10:58:40.557430658 +0200\n> @@ -0,0 +1,58 @@\n> +// PR c++/124689\n> +// { dg-do compile { target c++26 } }\n> +// { dg-additional-options \"-freflection\" }\n> +// Test error recovery from bogus <meta> replacement.\n> +\n> +namespace std {\n> +  using size_t = decltype (sizeof 0);\n> +  struct string_view {};\n> +  namespace meta {\n> +    using info = decltype(^^::);\n> +    consteval int is_enumerator (info);\n> +    consteval void type_of (info);\n> +    consteval char size_of (info);\n> +    consteval int offset_of (info);\n> +    consteval float operator_of (info);\n> +    consteval int *source_location_of (info);\n> +    consteval bool identifier_of (info);\n> +    consteval void u8identifier_of (info);\n> +    consteval int type_order (info, info);\n> +    consteval double enumerators_of (info);\n> +    struct access_context {\n> +      static consteval short current ();\n> +    };\n> +    consteval bool is_bit_field (int);\n> +    consteval bool is_void_type (double);\n> +    consteval info tuple_element (long int, info);\n> +    consteval size_t extent (info, info);\n> +    consteval string_view symbol_of (int);\n> +    consteval info members_of (info, int);\n> +    consteval info data_member_spec (info, float);\n> +  }\n> +}\n> +\n> +int a;\n> +constexpr auto b = is_enumerator (^^::);\t\t// { dg-error \"incorrect 'int' return type, expected 'bool'\" }\n> +consteval {\n> +  type_of (^^a);\t\t\t\t\t// { dg-error \"incorrect 'void' return type, expected 'std::meta::info'\" }\n> +}\n> +struct S { int a; S &operator [] (const S &); };\n> +constexpr auto c = size_of (^^a);\t\t\t// { dg-error \"incorrect 'char' return type, expected 'std::size_t'\" }\n> +constexpr auto d = offset_of (^^S::a);\t\t\t// { dg-error \"incorrect 'int' return type, expected 'std::meta::member_offset'\" }\n> +constexpr auto e = operator_of (^^S::operator []);\t// { dg-error \"incorrect 'float' return type, expected 'std::meta::operators'\" }\n> +constexpr auto f = source_location_of (^^a);\t\t// { dg-error \"incorrect 'int\\\\\\*' return type, expected 'std::source_location'\" }\n> +constexpr auto g = identifier_of (^^a);\t\t\t// { dg-error \"incorrect 'bool' return type, expected 'std::string_view'\" }\n> +consteval {\n> +  u8identifier_of (^^a);\t\t\t\t// { dg-error \"incorrect 'void' return type, expected 'std::u8string_view'\" }\n> +}\n> +constexpr auto i = type_order (^^int, ^^int);\t\t// { dg-error \"incorrect 'int' return type, expected 'std::strong_ordering'\" }\n> +enum E { E1 };\n> +constexpr auto j = enumerators_of (^^E);\t\t// { dg-error \"incorrect 'double' return type, expected 'std::vector<std::meta::info>'\" }\n> +constexpr auto k = std::meta::access_context::current (); // { dg-error \"incorrect 'short int' return type, expected 'std::meta::access_context'\" }\n> +constexpr auto l = std::meta::is_bit_field (0);\t\t// { dg-error \"incorrect 'int' type of argument 1, expected 'std::meta::info'\" }\n> +constexpr auto m = std::meta::is_void_type (0.0);\t// { dg-error \"incorrect 'double' type of argument 1, expected 'std::meta::info'\" }\n> +constexpr auto n = std::meta::tuple_element (0, ^^::);\t// { dg-error \"incorrect 'long int' type of argument 1, expected 'std::size_t'\" }\n> +constexpr auto o = extent (^^int, ^^int);\t\t// { dg-error \"incorrect 'std::meta::info' type of argument 2, expected 'unsigned int'\" }\n> +constexpr auto p = std::meta::symbol_of (0);\t\t// { dg-error \"incorrect 'int' type of argument 1, expected 'std::meta::operators'\" }\n> +constexpr auto q = members_of (^^S, 0);\t\t\t// { dg-error \"incorrect 'std::meta::info' return type, expected 'std::vector<std::meta::info>'\" }\n> +constexpr auto r = data_member_spec (^^S, 0.0f);\t// { dg-error \"incorrect 'float' type of argument 2, expected 'std::meta::data_member_options'\" }\n> --- gcc/cp/metafns.h.jj\t2026-03-31 23:42:30.250203938 +0200\n> +++ gcc/cp/metafns.h\t2026-04-03 11:20:29.156856730 +0200\n> @@ -295,10 +295,6 @@ enum {\n>     METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1\n>   };\n>   \n> -/* Get the metafn_kind_arg for argument ARGNO.  */\n> -#define METAFN_KIND_ARG(ARGNO) \\\n> -  ((minfo->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) & METAFN_KIND_MASK)\n> -\n>   /* Possible return types of metafunctions.  */\n>   enum metafn_kind_ret {\n>     METAFN_KIND_RET_BOOL,\n> @@ -316,6 +312,10 @@ enum metafn_kind_ret {\n>   };\n>   static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK, \"\");\n>   \n> +/* Get the metafn_kind_ret.  */\n> +#define METAFN_KIND_RET(MINFO) \\\n> +  ((metafn_kind_ret) (((int) (MINFO)->kind) & METAFN_KIND_MASK))\n> +\n>   /* Possible argument types of metafunctions.  */\n>   enum metafn_kind_arg {\n>     METAFN_KIND_ARG_VOID = 0,\n> @@ -336,6 +336,11 @@ enum metafn_kind_arg {\n>   static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK,\n>   \t       \"\");\n>   \n> +/* Get the metafn_kind_arg for argument ARGNO.  */\n> +#define METAFN_KIND_ARG(MINFO, ARGNO) \\\n> +  ((metafn_kind_arg) (((MINFO)->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) \\\n> +\t\t      & METAFN_KIND_MASK))\n> +\n>   /* Possible sets of 0-3 arguments of metafunctions.  */\n>   enum metafn_kind_args {\n>     METAFN_KIND_ARGS_VOID = METAFN_KIND_ARG_VOID,\n> @@ -409,6 +414,9 @@ enum metafn_kind {\n>     METAFN_KIND_INFO_REFLECTION_RANGET\n>       = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n>         | METAFN_KIND_RET_INFO,\n> +  METAFN_KIND_BOOL_INFO_REFLECTION_RANGE\n> +    = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n> +      | METAFN_KIND_RET_BOOL,\n>     METAFN_KIND_INFO_INFO_REFLECTION_RANGE\n>       = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n>         | METAFN_KIND_RET_INFO,\n> @@ -477,7 +485,7 @@ enum metafn_kind {\n>       = (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)\n>         | METAFN_KIND_RET_U8STRING_VIEW\n>   };\n> -#line 453 \"metafns.gperf\"\n> +#line 461 \"metafns.gperf\"\n>   struct metafn_info\n>   {\n>     /* A name within \"std::meta::\" (or \"std::meta::access_context::\").  */\n> @@ -601,479 +609,479 @@ metafn_lookup::find (const char *str, si\n>   #endif\n>     static const struct metafn_info wordlist[] =\n>       {\n> -#line 656 \"metafns.gperf\"\n> +#line 664 \"metafns.gperf\"\n>         {\"rank\", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},\n> -#line 586 \"metafns.gperf\"\n> +#line 594 \"metafns.gperf\"\n>         {\"is_void_type\", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 591 \"metafns.gperf\"\n> +#line 599 \"metafns.gperf\"\n>         {\"is_pointer_type\", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 494 \"metafns.gperf\"\n> +#line 502 \"metafns.gperf\"\n>         {\"is_volatile\", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},\n> -#line 540 \"metafns.gperf\"\n> +#line 548 \"metafns.gperf\"\n>         {\"is_value\", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},\n> -#line 547 \"metafns.gperf\"\n> +#line 555 \"metafns.gperf\"\n>         {\"is_base\", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},\n> -#line 479 \"metafns.gperf\"\n> +#line 487 \"metafns.gperf\"\n>         {\"is_private\", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},\n> -#line 508 \"metafns.gperf\"\n> +#line 516 \"metafns.gperf\"\n>         {\"is_variable\", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},\n> -#line 662 \"metafns.gperf\"\n> +#line 670 \"metafns.gperf\"\n>         {\"is_nothrow_convertible_type\", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 641 \"metafns.gperf\"\n> +#line 649 \"metafns.gperf\"\n>         {\"is_nothrow_constructible_type\", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n> -#line 667 \"metafns.gperf\"\n> +#line 675 \"metafns.gperf\"\n>         {\"is_nothrow_invocable_type\", METAFN_IS_NOTHROW_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n> -#line 646 \"metafns.gperf\"\n> +#line 654 \"metafns.gperf\"\n>         {\"is_nothrow_copy_assignable_type\", METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 668 \"metafns.gperf\"\n> +#line 676 \"metafns.gperf\"\n>         {\"is_nothrow_invocable_r_type\", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n> -#line 643 \"metafns.gperf\"\n> +#line 651 \"metafns.gperf\"\n>         {\"is_nothrow_copy_constructible_type\", METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 659 \"metafns.gperf\"\n> +#line 667 \"metafns.gperf\"\n>         {\"is_base_of_type\", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 647 \"metafns.gperf\"\n> +#line 655 \"metafns.gperf\"\n>         {\"is_nothrow_move_assignable_type\", METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 658 \"metafns.gperf\"\n> +#line 666 \"metafns.gperf\"\n>         {\"is_same_type\", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 644 \"metafns.gperf\"\n> +#line 652 \"metafns.gperf\"\n>         {\"is_nothrow_move_constructible_type\", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 532 \"metafns.gperf\"\n> +#line 540 \"metafns.gperf\"\n>         {\"is_variable_template\", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 587 \"metafns.gperf\"\n> +#line 595 \"metafns.gperf\"\n>         {\"is_null_pointer_type\", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 645 \"metafns.gperf\"\n> +#line 653 \"metafns.gperf\"\n>         {\"is_nothrow_assignable_type\", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 650 \"metafns.gperf\"\n> +#line 658 \"metafns.gperf\"\n>         {\"is_nothrow_destructible_type\", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 477 \"metafns.gperf\"\n> +#line 485 \"metafns.gperf\"\n>         {\"is_public\", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},\n> -#line 489 \"metafns.gperf\"\n> +#line 497 \"metafns.gperf\"\n>         {\"is_noexcept\", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},\n> -#line 575 \"metafns.gperf\"\n> +#line 583 \"metafns.gperf\"\n>         {\"extract\", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},\n> -#line 695 \"metafns.gperf\"\n> +#line 703 \"metafns.gperf\"\n>         {\"variant_alternative\", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,},\n> -#line 613 \"metafns.gperf\"\n> +#line 621 \"metafns.gperf\"\n>         {\"is_polymorphic_type\", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 513 \"metafns.gperf\"\n> +#line 521 \"metafns.gperf\"\n>         {\"is_function\", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},\n> -#line 510 \"metafns.gperf\"\n> +#line 518 \"metafns.gperf\"\n>         {\"is_namespace\", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},\n> -#line 466 \"metafns.gperf\"\n> +#line 474 \"metafns.gperf\"\n>         {\"symbol_of\", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},\n> -#line 664 \"metafns.gperf\"\n> +#line 672 \"metafns.gperf\"\n>         {\"is_pointer_interconvertible_base_of_type\", METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 620 \"metafns.gperf\"\n> +#line 628 \"metafns.gperf\"\n>         {\"is_bounded_array_type\", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 694 \"metafns.gperf\"\n> +#line 702 \"metafns.gperf\"\n>         {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n> -#line 493 \"metafns.gperf\"\n> +#line 501 \"metafns.gperf\"\n>         {\"is_const\", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},\n> -#line 539 \"metafns.gperf\"\n> +#line 547 \"metafns.gperf\"\n>         {\"is_concept\", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},\n> -#line 509 \"metafns.gperf\"\n> +#line 517 \"metafns.gperf\"\n>         {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n> -#line 566 \"metafns.gperf\"\n> +#line 574 \"metafns.gperf\"\n>         {\"bases_of\", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n> -#line 531 \"metafns.gperf\"\n> +#line 539 \"metafns.gperf\"\n>         {\"is_function_template\", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 514 \"metafns.gperf\"\n> +#line 522 \"metafns.gperf\"\n>         {\"is_conversion_function\", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,},\n> -#line 628 \"metafns.gperf\"\n> +#line 636 \"metafns.gperf\"\n>         {\"is_copy_assignable_type\", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 661 \"metafns.gperf\"\n> +#line 669 \"metafns.gperf\"\n>         {\"is_convertible_type\", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 651 \"metafns.gperf\"\n> +#line 659 \"metafns.gperf\"\n>         {\"is_implicit_lifetime_type\", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 696 \"metafns.gperf\"\n> +#line 704 \"metafns.gperf\"\n>         {\"type_order\", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},\n> -#line 530 \"metafns.gperf\"\n> +#line 538 \"metafns.gperf\"\n>         {\"is_template\", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 642 \"metafns.gperf\"\n> +#line 650 \"metafns.gperf\"\n>         {\"is_nothrow_default_constructible_type\", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 576 \"metafns.gperf\"\n> -      {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n> -#line 535 \"metafns.gperf\"\n> +#line 584 \"metafns.gperf\"\n> +      {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,},\n> +#line 543 \"metafns.gperf\"\n>         {\"is_conversion_function_template\", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 523 \"metafns.gperf\"\n> +#line 531 \"metafns.gperf\"\n>         {\"is_copy_assignment\", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n> -#line 625 \"metafns.gperf\"\n> +#line 633 \"metafns.gperf\"\n>         {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 572 \"metafns.gperf\"\n> +#line 580 \"metafns.gperf\"\n>         {\"size_of\", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n> -#line 474 \"metafns.gperf\"\n> +#line 482 \"metafns.gperf\"\n>         {\"type_of\", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n> -#line 511 \"metafns.gperf\"\n> +#line 519 \"metafns.gperf\"\n>         {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n> -#line 623 \"metafns.gperf\"\n> -      {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n>   #line 631 \"metafns.gperf\"\n> +      {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n> +#line 639 \"metafns.gperf\"\n>         {\"is_swappable_type\", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 502 \"metafns.gperf\"\n> +#line 510 \"metafns.gperf\"\n>         {\"has_module_linkage\", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n> -#line 529 \"metafns.gperf\"\n> +#line 537 \"metafns.gperf\"\n>         {\"is_vararg_function\", METAFN_IS_VARARG_FUNCTION, METAFN_KIND_BOOL_INFO,},\n> -#line 520 \"metafns.gperf\"\n> +#line 528 \"metafns.gperf\"\n>         {\"is_copy_constructor\", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n> -#line 692 \"metafns.gperf\"\n> +#line 700 \"metafns.gperf\"\n>         {\"tuple_size\", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n> -#line 556 \"metafns.gperf\"\n> +#line 564 \"metafns.gperf\"\n>         {\"variable_of\", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},\n> -#line 600 \"metafns.gperf\"\n> +#line 608 \"metafns.gperf\"\n>         {\"is_reflection_type\", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 574 \"metafns.gperf\"\n> +#line 582 \"metafns.gperf\"\n>         {\"bit_size_of\", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n> -#line 603 \"metafns.gperf\"\n> +#line 611 \"metafns.gperf\"\n>         {\"is_fundamental_type\", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 663 \"metafns.gperf\"\n> +#line 671 \"metafns.gperf\"\n>         {\"is_layout_compatible_type\", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 699 \"metafns.gperf\"\n> +#line 707 \"metafns.gperf\"\n>         {\"current\", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,},\n> -#line 562 \"metafns.gperf\"\n> +#line 570 \"metafns.gperf\"\n>         {\"current_function\", METAFN_CURRENT_FUNCTION, METAFN_KIND_INFO_VOID,},\n> -#line 538 \"metafns.gperf\"\n> +#line 546 \"metafns.gperf\"\n>         {\"is_constructor_template\", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 686 \"metafns.gperf\"\n> +#line 694 \"metafns.gperf\"\n>         {\"common_type\", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n> -#line 629 \"metafns.gperf\"\n> +#line 637 \"metafns.gperf\"\n>         {\"is_move_assignable_type\", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 687 \"metafns.gperf\"\n> +#line 695 \"metafns.gperf\"\n>         {\"common_reference\", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n> -#line 693 \"metafns.gperf\"\n> +#line 701 \"metafns.gperf\"\n>         {\"tuple_element\", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},\n> -#line 580 \"metafns.gperf\"\n> +#line 588 \"metafns.gperf\"\n>         {\"reflect_function\", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n> -#line 500 \"metafns.gperf\"\n> +#line 508 \"metafns.gperf\"\n>         {\"has_automatic_storage_duration\", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n> -#line 524 \"metafns.gperf\"\n> +#line 532 \"metafns.gperf\"\n>         {\"is_move_assignment\", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n> -#line 518 \"metafns.gperf\"\n> +#line 526 \"metafns.gperf\"\n>         {\"is_constructor\", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n> -#line 549 \"metafns.gperf\"\n> +#line 557 \"metafns.gperf\"\n>         {\"has_parent\", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},\n> -#line 626 \"metafns.gperf\"\n> +#line 634 \"metafns.gperf\"\n>         {\"is_move_constructible_type\", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 649 \"metafns.gperf\"\n> +#line 657 \"metafns.gperf\"\n>         {\"is_nothrow_swappable_type\", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 610 \"metafns.gperf\"\n> +#line 618 \"metafns.gperf\"\n>         {\"is_trivially_copyable_type\", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 601 \"metafns.gperf\"\n> +#line 609 \"metafns.gperf\"\n>         {\"is_reference_type\", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 593 \"metafns.gperf\"\n> +#line 601 \"metafns.gperf\"\n>         {\"is_rvalue_reference_type\", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 648 \"metafns.gperf\"\n> +#line 656 \"metafns.gperf\"\n>         {\"is_nothrow_swappable_with_type\", METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 633 \"metafns.gperf\"\n> +#line 641 \"metafns.gperf\"\n>         {\"is_trivially_constructible_type\", METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n> -#line 630 \"metafns.gperf\"\n> -      {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n>   #line 638 \"metafns.gperf\"\n> +      {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> +#line 646 \"metafns.gperf\"\n>         {\"is_trivially_copy_assignable_type\", METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 688 \"metafns.gperf\"\n> +#line 696 \"metafns.gperf\"\n>         {\"underlying_type\", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},\n> -#line 635 \"metafns.gperf\"\n> +#line 643 \"metafns.gperf\"\n>         {\"is_trivially_copy_constructible_type\", METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 607 \"metafns.gperf\"\n> +#line 615 \"metafns.gperf\"\n>         {\"is_member_pointer_type\", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 577 \"metafns.gperf\"\n> +#line 585 \"metafns.gperf\"\n>         {\"substitute\", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n> -#line 555 \"metafns.gperf\"\n> +#line 563 \"metafns.gperf\"\n>         {\"parameters_of\", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n> -#line 521 \"metafns.gperf\"\n> +#line 529 \"metafns.gperf\"\n>         {\"is_move_constructor\", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n> -#line 548 \"metafns.gperf\"\n> +#line 556 \"metafns.gperf\"\n>         {\"has_default_member_initializer\", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},\n> -#line 517 \"metafns.gperf\"\n> +#line 525 \"metafns.gperf\"\n>         {\"is_special_member_function\", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,},\n> -#line 612 \"metafns.gperf\"\n> +#line 620 \"metafns.gperf\"\n>         {\"is_empty_type\", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 627 \"metafns.gperf\"\n> +#line 635 \"metafns.gperf\"\n>         {\"is_assignable_type\", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 592 \"metafns.gperf\"\n> +#line 600 \"metafns.gperf\"\n>         {\"is_lvalue_reference_type\", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 528 \"metafns.gperf\"\n> +#line 536 \"metafns.gperf\"\n>         {\"has_default_argument\", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,},\n> -#line 690 \"metafns.gperf\"\n> +#line 698 \"metafns.gperf\"\n>         {\"unwrap_reference\", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},\n> -#line 522 \"metafns.gperf\"\n> +#line 530 \"metafns.gperf\"\n>         {\"is_assignment\", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n> -#line 609 \"metafns.gperf\"\n> +#line 617 \"metafns.gperf\"\n>         {\"is_volatile_type\", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 543 \"metafns.gperf\"\n> +#line 551 \"metafns.gperf\"\n>         {\"is_class_member\", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},\n> -#line 602 \"metafns.gperf\"\n> +#line 610 \"metafns.gperf\"\n>         {\"is_arithmetic_type\", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 544 \"metafns.gperf\"\n> +#line 552 \"metafns.gperf\"\n>         {\"is_namespace_member\", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,},\n> -#line 565 \"metafns.gperf\"\n> +#line 573 \"metafns.gperf\"\n>         {\"members_of\", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n> -#line 478 \"metafns.gperf\"\n> +#line 486 \"metafns.gperf\"\n>         {\"is_protected\", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},\n> -#line 505 \"metafns.gperf\"\n> +#line 513 \"metafns.gperf\"\n>         {\"has_linkage\", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},\n> -#line 469 \"metafns.gperf\"\n> +#line 477 \"metafns.gperf\"\n>         {\"identifier_of\", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},\n> -#line 677 \"metafns.gperf\"\n> +#line 685 \"metafns.gperf\"\n>         {\"add_rvalue_reference\", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n> -#line 553 \"metafns.gperf\"\n> +#line 561 \"metafns.gperf\"\n>         {\"template_of\", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},\n> -#line 512 \"metafns.gperf\"\n> +#line 520 \"metafns.gperf\"\n>         {\"is_namespace_alias\", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,},\n> -#line 657 \"metafns.gperf\"\n> +#line 665 \"metafns.gperf\"\n>         {\"extent\", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},\n> -#line 596 \"metafns.gperf\"\n> +#line 604 \"metafns.gperf\"\n>         {\"is_enum_type\", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 533 \"metafns.gperf\"\n> +#line 541 \"metafns.gperf\"\n>         {\"is_class_template\", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 608 \"metafns.gperf\"\n> +#line 616 \"metafns.gperf\"\n>         {\"is_const_type\", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 564 \"metafns.gperf\"\n> +#line 572 \"metafns.gperf\"\n>         {\"current_namespace\", METAFN_CURRENT_NAMESPACE, METAFN_KIND_INFO_VOID,},\n> -#line 488 \"metafns.gperf\"\n> +#line 496 \"metafns.gperf\"\n>         {\"is_explicit\", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},\n> -#line 683 \"metafns.gperf\"\n> +#line 691 \"metafns.gperf\"\n>         {\"add_pointer\", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},\n> -#line 639 \"metafns.gperf\"\n> +#line 647 \"metafns.gperf\"\n>         {\"is_trivially_move_assignable_type\", METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 506 \"metafns.gperf\"\n> +#line 514 \"metafns.gperf\"\n>         {\"is_complete_type\", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},\n> -#line 636 \"metafns.gperf\"\n> +#line 644 \"metafns.gperf\"\n>         {\"is_trivially_move_constructible_type\", METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 605 \"metafns.gperf\"\n> +#line 613 \"metafns.gperf\"\n>         {\"is_scalar_type\", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 481 \"metafns.gperf\"\n> +#line 489 \"metafns.gperf\"\n>         {\"is_pure_virtual\", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n> -#line 526 \"metafns.gperf\"\n> +#line 534 \"metafns.gperf\"\n>         {\"is_function_parameter\", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,},\n> -#line 507 \"metafns.gperf\"\n> +#line 515 \"metafns.gperf\"\n>         {\"is_enumerable_type\", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,},\n> -#line 599 \"metafns.gperf\"\n> +#line 607 \"metafns.gperf\"\n>         {\"is_function_type\", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 550 \"metafns.gperf\"\n> +#line 558 \"metafns.gperf\"\n>         {\"parent_of\", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},\n> -#line 545 \"metafns.gperf\"\n> +#line 553 \"metafns.gperf\"\n>         {\"is_nonstatic_data_member\", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,},\n> -#line 542 \"metafns.gperf\"\n> +#line 550 \"metafns.gperf\"\n>         {\"is_structured_binding\", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,},\n> -#line 495 \"metafns.gperf\"\n> +#line 503 \"metafns.gperf\"\n>         {\"is_mutable_member\", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},\n> -#line 637 \"metafns.gperf\"\n> +#line 645 \"metafns.gperf\"\n>         {\"is_trivially_assignable_type\", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 624 \"metafns.gperf\"\n> +#line 632 \"metafns.gperf\"\n>         {\"is_default_constructible_type\", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 527 \"metafns.gperf\"\n> +#line 535 \"metafns.gperf\"\n>         {\"is_explicit_object_parameter\", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,},\n> -#line 673 \"metafns.gperf\"\n> +#line 681 \"metafns.gperf\"\n>         {\"add_volatile\", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},\n> -#line 563 \"metafns.gperf\"\n> +#line 571 \"metafns.gperf\"\n>         {\"current_class\", METAFN_CURRENT_CLASS, METAFN_KIND_INFO_VOID,},\n> -#line 570 \"metafns.gperf\"\n> +#line 578 \"metafns.gperf\"\n>         {\"enumerators_of\", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n> -#line 491 \"metafns.gperf\"\n> +#line 499 \"metafns.gperf\"\n>         {\"is_enumerator\", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},\n> -#line 541 \"metafns.gperf\"\n> +#line 549 \"metafns.gperf\"\n>         {\"is_object\", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},\n> -#line 472 \"metafns.gperf\"\n> +#line 480 \"metafns.gperf\"\n>         {\"u8display_string_of\", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n> -#line 595 \"metafns.gperf\"\n> +#line 603 \"metafns.gperf\"\n>         {\"is_member_function_pointer_type\", METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 652 \"metafns.gperf\"\n> +#line 660 \"metafns.gperf\"\n>         {\"has_virtual_destructor\", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,},\n> -#line 655 \"metafns.gperf\"\n> +#line 663 \"metafns.gperf\"\n>         {\"reference_converts_from_temporary\", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 519 \"metafns.gperf\"\n> +#line 527 \"metafns.gperf\"\n>         {\"is_default_constructor\", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n> -#line 604 \"metafns.gperf\"\n> +#line 612 \"metafns.gperf\"\n>         {\"is_object_type\", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 578 \"metafns.gperf\"\n> +#line 586 \"metafns.gperf\"\n>         {\"reflect_constant\", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,},\n> -#line 525 \"metafns.gperf\"\n> +#line 533 \"metafns.gperf\"\n>         {\"is_destructor\", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},\n> -#line 482 \"metafns.gperf\"\n> +#line 490 \"metafns.gperf\"\n>         {\"is_override\", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},\n> -#line 654 \"metafns.gperf\"\n> +#line 662 \"metafns.gperf\"\n>         {\"reference_constructs_from_temporary\", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 557 \"metafns.gperf\"\n> +#line 565 \"metafns.gperf\"\n>         {\"return_type_of\", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n> -#line 676 \"metafns.gperf\"\n> +#line 684 \"metafns.gperf\"\n>         {\"add_lvalue_reference\", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n> -#line 476 \"metafns.gperf\"\n> +#line 484 \"metafns.gperf\"\n>         {\"constant_of\", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},\n> -#line 671 \"metafns.gperf\"\n> +#line 679 \"metafns.gperf\"\n>         {\"remove_cv\", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},\n> -#line 640 \"metafns.gperf\"\n> +#line 648 \"metafns.gperf\"\n>         {\"is_trivially_destructible_type\", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 674 \"metafns.gperf\"\n> +#line 682 \"metafns.gperf\"\n>         {\"add_cv\", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},\n> -#line 616 \"metafns.gperf\"\n> +#line 624 \"metafns.gperf\"\n>         {\"is_aggregate_type\", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 581 \"metafns.gperf\"\n> +#line 589 \"metafns.gperf\"\n>         {\"reflect_constant_string\", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,},\n> -#line 554 \"metafns.gperf\"\n> +#line 562 \"metafns.gperf\"\n>         {\"template_arguments_of\", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n> -#line 569 \"metafns.gperf\"\n> +#line 577 \"metafns.gperf\"\n>         {\"subobjects_of\", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n> -#line 571 \"metafns.gperf\"\n> +#line 579 \"metafns.gperf\"\n>         {\"offset_of\", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},\n> -#line 634 \"metafns.gperf\"\n> +#line 642 \"metafns.gperf\"\n>         {\"is_trivially_default_constructible_type\", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 675 \"metafns.gperf\"\n> +#line 683 \"metafns.gperf\"\n>         {\"remove_reference\", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n> -#line 534 \"metafns.gperf\"\n> +#line 542 \"metafns.gperf\"\n>         {\"is_alias_template\", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 679 \"metafns.gperf\"\n> +#line 687 \"metafns.gperf\"\n>         {\"make_unsigned\", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},\n> -#line 665 \"metafns.gperf\"\n> +#line 673 \"metafns.gperf\"\n>         {\"is_invocable_type\", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n> -#line 622 \"metafns.gperf\"\n> +#line 630 \"metafns.gperf\"\n>         {\"is_scoped_enum_type\", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 546 \"metafns.gperf\"\n> +#line 554 \"metafns.gperf\"\n>         {\"is_static_member\", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},\n> -#line 672 \"metafns.gperf\"\n> +#line 680 \"metafns.gperf\"\n>         {\"add_const\", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},\n> -#line 632 \"metafns.gperf\"\n> +#line 640 \"metafns.gperf\"\n>         {\"is_destructible_type\", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 598 \"metafns.gperf\"\n> +#line 606 \"metafns.gperf\"\n>         {\"is_class_type\", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 680 \"metafns.gperf\"\n> +#line 688 \"metafns.gperf\"\n>         {\"remove_extent\", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},\n> -#line 666 \"metafns.gperf\"\n> +#line 674 \"metafns.gperf\"\n>         {\"is_invocable_r_type\", METAFN_IS_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n> -#line 558 \"metafns.gperf\"\n> +#line 566 \"metafns.gperf\"\n>         {\"is_accessible\", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n> -#line 465 \"metafns.gperf\"\n> +#line 473 \"metafns.gperf\"\n>         {\"operator_of\", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},\n> -#line 590 \"metafns.gperf\"\n> +#line 598 \"metafns.gperf\"\n>         {\"is_array_type\", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 669 \"metafns.gperf\"\n> +#line 677 \"metafns.gperf\"\n>         {\"remove_const\", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},\n> -#line 497 \"metafns.gperf\"\n> +#line 505 \"metafns.gperf\"\n>         {\"is_rvalue_reference_qualified\", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n> -#line 498 \"metafns.gperf\"\n> +#line 506 \"metafns.gperf\"\n>         {\"has_static_storage_duration\", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n> -#line 681 \"metafns.gperf\"\n> +#line 689 \"metafns.gperf\"\n>         {\"remove_all_extents\", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,},\n> -#line 503 \"metafns.gperf\"\n> +#line 511 \"metafns.gperf\"\n>         {\"has_external_linkage\", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n> -#line 684 \"metafns.gperf\"\n> +#line 692 \"metafns.gperf\"\n>         {\"remove_cvref\", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},\n> -#line 492 \"metafns.gperf\"\n> +#line 500 \"metafns.gperf\"\n>         {\"is_annotation\", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},\n> -#line 682 \"metafns.gperf\"\n> +#line 690 \"metafns.gperf\"\n>         {\"remove_pointer\", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},\n> -#line 496 \"metafns.gperf\"\n> +#line 504 \"metafns.gperf\"\n>         {\"is_lvalue_reference_qualified\", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n> -#line 660 \"metafns.gperf\"\n> +#line 668 \"metafns.gperf\"\n>         {\"is_virtual_base_of_type\", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n> -#line 584 \"metafns.gperf\"\n> +#line 592 \"metafns.gperf\"\n>         {\"is_data_member_spec\", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,},\n> -#line 618 \"metafns.gperf\"\n> +#line 626 \"metafns.gperf\"\n>         {\"is_signed_type\", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 614 \"metafns.gperf\"\n> +#line 622 \"metafns.gperf\"\n>         {\"is_abstract_type\", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 480 \"metafns.gperf\"\n> +#line 488 \"metafns.gperf\"\n>         {\"is_virtual\", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n> -#line 471 \"metafns.gperf\"\n> +#line 479 \"metafns.gperf\"\n>         {\"display_string_of\", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,},\n> -#line 594 \"metafns.gperf\"\n> +#line 602 \"metafns.gperf\"\n>         {\"is_member_object_pointer_type\", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 691 \"metafns.gperf\"\n> +#line 699 \"metafns.gperf\"\n>         {\"unwrap_ref_decay\", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},\n> -#line 617 \"metafns.gperf\"\n> +#line 625 \"metafns.gperf\"\n>         {\"is_consteval_only_type\", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 606 \"metafns.gperf\"\n> +#line 614 \"metafns.gperf\"\n>         {\"is_compound_type\", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 467 \"metafns.gperf\"\n> +#line 475 \"metafns.gperf\"\n>         {\"u8symbol_of\", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,},\n> -#line 484 \"metafns.gperf\"\n> +#line 492 \"metafns.gperf\"\n>         {\"is_deleted\", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},\n> -#line 589 \"metafns.gperf\"\n> +#line 597 \"metafns.gperf\"\n>         {\"is_floating_point_type\", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 537 \"metafns.gperf\"\n> +#line 545 \"metafns.gperf\"\n>         {\"is_literal_operator_template\", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 485 \"metafns.gperf\"\n> +#line 493 \"metafns.gperf\"\n>         {\"is_defaulted\", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},\n> -#line 583 \"metafns.gperf\"\n> +#line 591 \"metafns.gperf\"\n>         {\"data_member_spec\", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},\n> -#line 475 \"metafns.gperf\"\n> +#line 483 \"metafns.gperf\"\n>         {\"object_of\", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},\n> -#line 700 \"metafns.gperf\"\n> +#line 708 \"metafns.gperf\"\n>         {\"_S_exception_cvt_to_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},\n> -#line 701 \"metafns.gperf\"\n> +#line 709 \"metafns.gperf\"\n>         {\"_S_exception_cvt_from_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, METAFN_KIND_STRING_VIEW_INPUT_RANGE,},\n> -#line 483 \"metafns.gperf\"\n> +#line 491 \"metafns.gperf\"\n>         {\"is_final\", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},\n> -#line 516 \"metafns.gperf\"\n> +#line 524 \"metafns.gperf\"\n>         {\"is_literal_operator\", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,},\n> -#line 487 \"metafns.gperf\"\n> +#line 495 \"metafns.gperf\"\n>         {\"is_user_declared\", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},\n> -#line 552 \"metafns.gperf\"\n> +#line 560 \"metafns.gperf\"\n>         {\"has_template_arguments\", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,},\n> -#line 515 \"metafns.gperf\"\n> +#line 523 \"metafns.gperf\"\n>         {\"is_operator_function\", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,},\n> -#line 689 \"metafns.gperf\"\n> +#line 697 \"metafns.gperf\"\n>         {\"invoke_result\", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},\n> -#line 582 \"metafns.gperf\"\n> +#line 590 \"metafns.gperf\"\n>         {\"reflect_constant_array\", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,},\n> -#line 504 \"metafns.gperf\"\n> +#line 512 \"metafns.gperf\"\n>         {\"has_c_language_linkage\", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n> -#line 536 \"metafns.gperf\"\n> +#line 544 \"metafns.gperf\"\n>         {\"is_operator_function_template\", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n> -#line 588 \"metafns.gperf\"\n> +#line 596 \"metafns.gperf\"\n>         {\"is_integral_type\", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 653 \"metafns.gperf\"\n> +#line 661 \"metafns.gperf\"\n>         {\"has_unique_object_representations\", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},\n> -#line 499 \"metafns.gperf\"\n> +#line 507 \"metafns.gperf\"\n>         {\"has_thread_storage_duration\", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n> -#line 560 \"metafns.gperf\"\n> +#line 568 \"metafns.gperf\"\n>         {\"has_inaccessible_bases\", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n> -#line 561 \"metafns.gperf\"\n> +#line 569 \"metafns.gperf\"\n>         {\"has_inaccessible_subobjects\", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n> -#line 678 \"metafns.gperf\"\n> +#line 686 \"metafns.gperf\"\n>         {\"make_signed\", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},\n> -#line 559 \"metafns.gperf\"\n> +#line 567 \"metafns.gperf\"\n>         {\"has_inaccessible_nonstatic_data_members\", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n> -#line 670 \"metafns.gperf\"\n> +#line 678 \"metafns.gperf\"\n>         {\"remove_volatile\", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},\n> -#line 579 \"metafns.gperf\"\n> +#line 587 \"metafns.gperf\"\n>         {\"reflect_object\", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n> -#line 611 \"metafns.gperf\"\n> +#line 619 \"metafns.gperf\"\n>         {\"is_standard_layout_type\", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 685 \"metafns.gperf\"\n> +#line 693 \"metafns.gperf\"\n>         {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n> -#line 621 \"metafns.gperf\"\n> +#line 629 \"metafns.gperf\"\n>         {\"is_unbounded_array_type\", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 568 \"metafns.gperf\"\n> +#line 576 \"metafns.gperf\"\n>         {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n> -#line 597 \"metafns.gperf\"\n> +#line 605 \"metafns.gperf\"\n>         {\"is_union_type\", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 468 \"metafns.gperf\"\n> +#line 476 \"metafns.gperf\"\n>         {\"has_identifier\", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},\n> -#line 567 \"metafns.gperf\"\n> +#line 575 \"metafns.gperf\"\n>         {\"static_data_members_of\", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n> -#line 615 \"metafns.gperf\"\n> +#line 623 \"metafns.gperf\"\n>         {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 551 \"metafns.gperf\"\n> +#line 559 \"metafns.gperf\"\n>         {\"dealias\", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},\n> -#line 698 \"metafns.gperf\"\n> +#line 706 \"metafns.gperf\"\n>         {\"annotations_of_with_type\", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,},\n> -#line 585 \"metafns.gperf\"\n> +#line 593 \"metafns.gperf\"\n>         {\"define_aggregate\", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n> -#line 490 \"metafns.gperf\"\n> +#line 498 \"metafns.gperf\"\n>         {\"is_bit_field\", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},\n> -#line 697 \"metafns.gperf\"\n> +#line 705 \"metafns.gperf\"\n>         {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n> -#line 473 \"metafns.gperf\"\n> +#line 481 \"metafns.gperf\"\n>         {\"source_location_of\", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,},\n> -#line 573 \"metafns.gperf\"\n> +#line 581 \"metafns.gperf\"\n>         {\"alignment_of\", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},\n> -#line 501 \"metafns.gperf\"\n> +#line 509 \"metafns.gperf\"\n>         {\"has_internal_linkage\", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n> -#line 470 \"metafns.gperf\"\n> +#line 478 \"metafns.gperf\"\n>         {\"u8identifier_of\", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n> -#line 619 \"metafns.gperf\"\n> +#line 627 \"metafns.gperf\"\n>         {\"is_unsigned_type\", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n> -#line 486 \"metafns.gperf\"\n> +#line 494 \"metafns.gperf\"\n>         {\"is_user_provided\", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,}\n>       };\n>   #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)\n> \n> \n> \tJakub\n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=QIc56FRj;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=QIc56FRj","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fnJYc25dXz1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 23:53:23 +1100 (AEDT)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 483254BA23C3\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  3 Apr 2026 12:53:21 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 3D6C94BA2E2B\n for <gcc-patches@gcc.gnu.org>; Fri,  3 Apr 2026 12:52:43 +0000 (GMT)","from mail-qk1-f198.google.com (mail-qk1-f198.google.com\n [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-47-6YaKgbpsNDSBvD-R2B7MFg-1; Fri, 03 Apr 2026 08:52:40 -0400","by mail-qk1-f198.google.com with SMTP id\n af79cd13be357-8cfc648b036so602652485a.3\n for <gcc-patches@gcc.gnu.org>; Fri, 03 Apr 2026 05:52:40 -0700 (PDT)","from [192.168.50.145]\n (130-44-146-247.s12789.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com.\n [130.44.146.247]) by smtp.gmail.com with ESMTPSA id\n af79cd13be357-8d2a587c1bdsm416529285a.12.2026.04.03.05.52.35\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Fri, 03 Apr 2026 05:52:36 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 483254BA23C3","OpenDKIM Filter v2.11.0 sourceware.org 3D6C94BA2E2B"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 3D6C94BA2E2B","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 3D6C94BA2E2B","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775220763; cv=none;\n b=Q2Mqdo7bk+E8ddJhJBtGpS+rVjuG2B2X4jsoiXhRoH6gDMQRWoj4L+Z/g2/cm4dug0j147FzKruIGc9Zu+Byp4lSR+We7sOdYjt2rF10w6VpVEVrC5tZME95lb7SJ0nWkTa9fjM3MTBKmhEW6/ULdpJ6gXNUGmBSRO9QY96K49w=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775220763; c=relaxed/simple;\n bh=FL4MLaIDgJnovKtRT7QdU762I3GX8nvPI8sA7t8SQ7k=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=EpJf7It6gpMSFNC4wqa6QW8O3T50H1lY8KFkm9AC2d4gCj7qvNyMpyc7uEqVGwbQDwvi/oHWc2+un3Bc6Hz752MDGgpxBLCjxIvxwVo3bxSOd4GguD2QALVrwpKnEJ0K7BDI74uZjvjHgOGiyeb6noE/M1BXGldSfPhlrl5qAig=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1775220761;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=Rer2j1K5yJsW/yDQqKaRsVq/dveRiV9ndOGjnIAOb9c=;\n b=QIc56FRjhAwXNSi+dhQPFMiaUv6n3nWfc0Yt05UwDAAWLYL/oSZSt8f7ztCI146I1kEC+e\n +iGnnroeNsqW/CzbrmS/p+xRDebUfz77WcwGSCPO+wGdfPfGYuEmr5a8HrKwi/jTeT7cEV\n ncjpOYSmYzpV/PXbki8wlePQ5rycCfs=","X-MC-Unique":"6YaKgbpsNDSBvD-R2B7MFg-1","X-Mimecast-MFC-AGG-ID":"6YaKgbpsNDSBvD-R2B7MFg_1775220759","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775220758; x=1775825558;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=Rer2j1K5yJsW/yDQqKaRsVq/dveRiV9ndOGjnIAOb9c=;\n b=VKtS5I14UJFb+UnzZMlcvzjc5/nlbbd7SYLkL+4QwxsiSLuj02bxHM00xMlR4e+xfm\n lGNfwSoa4Y4D22UOJ+iVytJUHTikSoaB4mBlZL67R1qr0X/yH4/l/ZovSuKY1UXhObRF\n RyI0fdq2BQ4rF78sUWyDy72edPxWFrnIQE1tFNWqqk/qph98BU0YZoucxDldjReFBhal\n t40gwQETWLaqWrQZKzFzvOIanjNE8HLRLY5Ao1z6nfvLNINcch4GgQ0Y3tx3C5fC/MNU\n ixTgCegDHGu6k9mmpfgVFh9wUTW9E750qA90bbfZv3DOxJdObO82jGC3TUbgVPmrAP13\n iY4Q==","X-Gm-Message-State":"AOJu0YyI2li35ub8sCgvyMVt4oIYjimDyILybizSQ6NSwllupDmEZAyf\n OP7B+h1JfG5e8lyiSh5jew96WIWnj8QCMcAoUjRkEVkwq/TdsEtPtLbZd9+5cd8rVuVkfseqvwP\n NA4X4lyN7pyGx/uccO5QoURUdOjIPXWCWcnJazulkiXkltEHbtmOJwvYgOvG48datd/XBDw==","X-Gm-Gg":"ATEYQzwKm8IAgGr8JA/h5YJMNBKnGCt59DPfDCbwnqoASFxHOGofTU41W+cQEzEqF2w\n rgfaMS0PtuBygt90UCOt8X6oaqHWRBkyqdEtFOJP8qjOU9T/kR2xFSxbgdQi21piDbbmjQwtnzo\n iotpcLcD3DgjwL/5xu9li07agbxr+UgDQIyDDLboUh8H5MJkxwCFIInMLcRvwYu61mAg3P672IH\n LyFjjSxasqOcB/UsGBtVeFOHSeXYosBhu/1OQtSJB8Kl3Fdg8fbKE/WFl+j9M07LXe29SpLfgHh\n hA32h++cyzW2JzmT7EnfJ4JkLiOYdQMX+siaTzxYu6k9UL2gHUDH4U1KN190w7KRzo4FECB+Imk\n wRb5IH0LlVS0JvNrWzDcn3j5COtK/z+oMNZqVX5JQzRkZEIkI0u3+2oPsumr2sLFGl0zyoyzLG7\n u4Uq/H9PonMT32YrHwA/Om5W3txoRrsIg=","X-Received":["by 2002:a05:620a:4050:b0:8cd:8ddd:2699 with SMTP id\n af79cd13be357-8d419575859mr422674385a.24.1775220758222;\n Fri, 03 Apr 2026 05:52:38 -0700 (PDT)","by 2002:a05:620a:4050:b0:8cd:8ddd:2699 with SMTP id\n af79cd13be357-8d419575859mr422668885a.24.1775220757421;\n Fri, 03 Apr 2026 05:52:37 -0700 (PDT)"],"Message-ID":"<29e7269e-124b-4f05-8ef6-ce3cf1ee9241@redhat.com>","Date":"Fri, 3 Apr 2026 08:52:35 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++, v2: Error recovery for fuzzed <meta> [PR124689]","To":"Jakub Jelinek <jakub@redhat.com>, Marek Polacek <polacek@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","References":"<acuFl3n5cTclKXUE@tucnak>\n <ca34180a-ffb4-447c-8c0c-daa87e6cf27e@redhat.com> <ac-2fJliydDaFU4Z@tucnak>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<ac-2fJliydDaFU4Z@tucnak>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"UXYli81TO2dw_VNrG-bims7YCGhM68rXX7ioGkZHWws_1775220759","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]