On Fri, Apr 03, 2026 at 12:26:04AM -0400, Jason Merrill wrote:
> > +    case METAFN_KIND_ARG_SIZE_T:
> > +      if (TREE_CODE (type) != INTEGER_TYPE
> > +     || TYPE_PRECISION (type) != TYPE_PRECISION (size_type_node)
> > +     || !TYPE_UNSIGNED (type))
> 
> Why not same_type_ignoring...?

Changed.
> > +   type = TREE_TYPE (type);
> > +      if (TREE_CODE (type) != RECORD_TYPE
> > +     || TYPE_NAME (type) == NULL_TREE
> > +     || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL
> > +     || DECL_NAME (TYPE_NAME (type)) == NULL_TREE
> > +     || !id_equal (DECL_NAME (TYPE_NAME (type)), "access_context")
> > +     || TYPE_CONTEXT (type) != std_meta_node)
> 
> Seems like we want an is_std_meta_class to go with is_std_class, or a more
> generic version that takes the namespace as an argument.

Added is_std_meta_class.

> > +  tree expected_ret = NULL_TREE;
> > +  const char *expected_ret_str = NULL;
> > +  tree rettype;
> > +  if (TREE_CODE (call) == AGGR_INIT_EXPR)
> > +    rettype = TREE_TYPE (AGGR_INIT_EXPR_SLOT (call));
> > +  else
> > +    rettype = TREE_TYPE (call);
> > +  switch (METAFN_KIND_RET)
> 
> Please factor the return checking out of process_metafunction as well.

Done.

Tested on x86_64-linux, ok for trunk?

2026-04-03  Jakub Jelinek  <[email protected]>

        PR c++/124689
        * metafns.gperf (enum metafn_kind): Add
        METAFN_KIND_BOOL_INFO_REFLECTION_RANGE.
        (can_substitute): Use METAFN_KIND_BOOL_INFO_REFLECTION_RANGE
        instead of METAFN_KIND_INFO_INFO_REFLECTION_RANGE.
        (METAFN_KIND_ARG): Add MINFO argument.
        (METAFN_KIND_RET): Define.
        * reflect.cc (is_std_meta_class): New function.
        (get_info): Add LOC argument, diagnose invalid argument type instead
        of failing assertion.
        (check_metafn_arg_type): New function.
        (check_metafn_return_type): New function.
        (process_metafunction): Diagnose clearly invalid return
        or argument types.  Use rettype variable instead of TREE_TYPE (call).
        * metafns.h: Regenerate.

        * g++.dg/reflect/pr124689.C: New test.

--- gcc/cp/metafns.gperf.jj     2026-03-31 23:42:05.560331889 +0200
+++ gcc/cp/metafns.gperf        2026-04-03 11:20:21.836980025 +0200
@@ -267,10 +267,6 @@ enum {
   METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1
 };
 
-/* Get the metafn_kind_arg for argument ARGNO.  */
-#define METAFN_KIND_ARG(ARGNO) \
-  ((minfo->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) & METAFN_KIND_MASK)
-
 /* Possible return types of metafunctions.  */
 enum metafn_kind_ret {
   METAFN_KIND_RET_BOOL,
@@ -288,6 +284,10 @@ enum metafn_kind_ret {
 };
 static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK, "");
 
+/* Get the metafn_kind_ret.  */
+#define METAFN_KIND_RET(MINFO) \
+  ((metafn_kind_ret) (((int) (MINFO)->kind) & METAFN_KIND_MASK))
+
 /* Possible argument types of metafunctions.  */
 enum metafn_kind_arg {
   METAFN_KIND_ARG_VOID = 0,
@@ -308,6 +308,11 @@ enum metafn_kind_arg {
 static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK,
               "");
 
+/* Get the metafn_kind_arg for argument ARGNO.  */
+#define METAFN_KIND_ARG(MINFO, ARGNO) \
+  ((metafn_kind_arg) (((MINFO)->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) \
+                     & METAFN_KIND_MASK))
+
 /* Possible sets of 0-3 arguments of metafunctions.  */
 enum metafn_kind_args {
   METAFN_KIND_ARGS_VOID = METAFN_KIND_ARG_VOID,
@@ -381,6 +386,9 @@ enum metafn_kind {
   METAFN_KIND_INFO_REFLECTION_RANGET
     = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_INFO,
+  METAFN_KIND_BOOL_INFO_REFLECTION_RANGE
+    = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)
+      | METAFN_KIND_RET_BOOL,
   METAFN_KIND_INFO_INFO_REFLECTION_RANGE
     = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_INFO,
@@ -573,7 +581,7 @@ size_of, METAFN_SIZE_OF, METAFN_KIND_SIZ
 alignment_of, METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,
 bit_size_of, METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,
 extract, METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,
-can_substitute, METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,
+can_substitute, METAFN_CAN_SUBSTITUTE, METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,
 substitute, METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,
 reflect_constant, METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,
 reflect_object, METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,
--- gcc/cp/reflect.cc.jj        2026-04-03 10:29:43.263184609 +0200
+++ gcc/cp/reflect.cc   2026-04-03 11:31:03.702171089 +0200
@@ -308,6 +308,22 @@ decl_in_std_meta_p (tree decl)
   return decl_namespace_context (decl) == std_meta_node;
 }
 
+/* True if CTX is an instance of std::meta::NAME class.  */
+
+static bool
+is_std_meta_class (tree ctx, const char *name)
+{
+  if (ctx == NULL_TREE || !CLASS_TYPE_P (ctx) || !TYPE_MAIN_DECL (ctx))
+    return false;
+
+  tree decl = TYPE_MAIN_DECL (ctx);
+  tree dname = DECL_NAME (decl);
+  if (dname == NULL_TREE || !id_equal (dname, name))
+    return false;
+
+  return decl_in_std_meta_p (decl);
+}
+
 /* Returns true if FNDECL, a FUNCTION_DECL, is a call to a metafunction
    declared in namespace std::meta.  */
 
@@ -340,12 +356,18 @@ metafunction_p (tree fndecl)
 /* Extract the N-th reflection argument from a metafunction call CALL.  */
 
 static tree
-get_info (const constexpr_ctx *ctx, tree call, int n, bool *non_constant_p,
-         bool *overflow_p, tree *jump_target)
+get_info (location_t loc, const constexpr_ctx *ctx, tree call, int n,
+         bool *non_constant_p, bool *overflow_p, tree *jump_target)
 {
   gcc_checking_assert (call_expr_nargs (call) > n);
   tree info = get_nth_callarg (call, n);
-  gcc_checking_assert (REFLECTION_TYPE_P (TREE_TYPE (info)));
+  if (!REFLECTION_TYPE_P (TREE_TYPE (info)))
+    {
+      error_at (loc, "incorrect %qT type of argument %d, expected %qT",
+               TREE_TYPE (info), n + 1, meta_info_type_node);
+      *non_constant_p = true;
+      return NULL_TREE;
+    }
   info = cxx_eval_constant_expression (ctx, info, vc_prvalue,
                                       non_constant_p, overflow_p,
                                       jump_target);
@@ -7538,6 +7560,146 @@ eval_extract (location_t loc, const cons
     }
 }
 
+/* Diagnose incorrect type of metafn argument and return true in that
+   case.  */
+
+static bool
+check_metafn_arg_type (location_t loc, metafn_kind_arg kind, int n, tree type,
+                      bool *non_constant_p)
+{
+  tree expected = NULL_TREE;
+  const char *expected_str = NULL;
+  switch ((metafn_kind_arg) kind)
+    {
+    case METAFN_KIND_ARG_VOID:
+      break;
+    case METAFN_KIND_ARG_INFO:
+    case METAFN_KIND_ARG_TINFO:
+      if (!REFLECTION_TYPE_P (type))
+       expected = meta_info_type_node;
+      break;
+    case METAFN_KIND_ARG_REFLECTION_RANGE:
+    case METAFN_KIND_ARG_REFLECTION_RANGET:
+    case METAFN_KIND_ARG_INPUT_RANGE:
+      break;
+    case METAFN_KIND_ARG_SIZE_T:
+      if (!same_type_ignoring_top_level_qualifiers_p (type, size_type_node))
+       expected_str = "std::size_t";
+      break;
+    case METAFN_KIND_ARG_UNSIGNED:
+      if (!same_type_ignoring_top_level_qualifiers_p (type,
+                                                     unsigned_type_node))
+       expected = unsigned_type_node;
+      break;
+    case METAFN_KIND_ARG_OPERATORS:
+      if (TREE_CODE (type) != ENUMERAL_TYPE
+         || TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)
+         || TYPE_CONTEXT (type) != std_meta_node)
+       expected_str = "std::meta::operators";
+      break;
+    case METAFN_KIND_ARG_ACCESS_CONTEXT:
+      if (TYPE_REF_P (type))
+       type = TREE_TYPE (type);
+      if (!is_std_meta_class (type, "access_context"))
+       expected_str = "std::meta::access_context";
+      break;
+    case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:
+      if (TYPE_REF_P (type))
+       type = TREE_TYPE (type);
+      if (!is_std_meta_class (type, "data_member_options"))
+       expected_str = "std::meta::data_member_options";
+      break;
+    case METAFN_KIND_ARG_TEMPLATE_PARM:
+    case METAFN_KIND_ARG_TEMPLATE_PARM_REF:
+      break;
+    }
+  if (expected || expected_str)
+    {
+      if (expected_str)
+       error_at (loc, "incorrect %qT type of argument %d, expected %qs",
+                 type, n + 1, expected_str);
+      else
+       error_at (loc, "incorrect %qT type of argument %d, expected %qT",
+                 type, n + 1, expected);
+      *non_constant_p = true;
+      return true;
+    }
+  return false;
+}
+
+/* Diagnose incorrect return type of metafn and return true in that case.  */
+
+static bool
+check_metafn_return_type (location_t loc, metafn_kind_ret kind, tree type,
+                         bool *non_constant_p)
+{
+  tree expected = NULL_TREE;
+  const char *expected_str = NULL;
+  switch (kind)
+    {
+    case METAFN_KIND_RET_BOOL:
+      if (TREE_CODE (type) != BOOLEAN_TYPE)
+       expected = boolean_type_node;
+      break;
+    case METAFN_KIND_RET_INFO:
+      if (!REFLECTION_TYPE_P (type))
+       expected = meta_info_type_node;
+      break;
+    case METAFN_KIND_RET_SIZE_T:
+      if (!same_type_ignoring_top_level_qualifiers_p (type, size_type_node))
+       expected_str = "std::size_t";
+      break;
+    case METAFN_KIND_RET_MEMBER_OFFSET:
+      if (!is_std_meta_class (type, "member_offset"))
+       expected_str = "std::meta::member_offset";
+      break;
+    case METAFN_KIND_RET_OPERATORS:
+      if (TREE_CODE (type) != ENUMERAL_TYPE
+         || TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)
+         || TYPE_CONTEXT (type) != std_meta_node)
+       expected_str = "std::meta::operators";
+      break;
+    case METAFN_KIND_RET_SOURCE_LOCATION:
+      if (!is_std_class (type, "source_location"))
+       expected_str = "std::source_location";
+      break;
+    case METAFN_KIND_RET_STRING_VIEW:
+      if (!CLASS_TYPE_P (type))
+       expected_str = "std::string_view";
+      break;
+    case METAFN_KIND_RET_U8STRING_VIEW:
+      if (!CLASS_TYPE_P (type))
+       expected_str = "std::u8string_view";
+      break;
+    case METAFN_KIND_RET_STRONG_ORDERING:
+      if (!is_std_class (type, "strong_ordering"))
+       expected_str = "std::strong_ordering";
+      break;
+    case METAFN_KIND_RET_VECTOR_INFO:
+      if (!CLASS_TYPE_P (type))
+       expected_str = "std::vector<std::meta::info>";
+      break;
+    case METAFN_KIND_RET_ACCESS_CONTEXT:
+      if (!is_std_meta_class (type, "access_context"))
+       expected_str = "std::meta::access_context";
+      break;
+    case METAFN_KIND_RET_TEMPLATE_PARM:
+      break;
+    }
+  if (expected || expected_str)
+    {
+      if (expected_str)
+       error_at (loc, "incorrect %qT return type, expected %qs",
+                 type, expected_str);
+      else
+       error_at (loc, "incorrect %qT return type, expected %qT",
+                 type, expected);
+      *non_constant_p = true;
+      return true;
+    }
+  return false;
+}
+
 /* Expand a call to a metafunction FUN.  CALL is the CALL_EXPR.
    JUMP_TARGET is set if we are throwing std::meta::exception.  */
 
@@ -7561,20 +7723,28 @@ process_metafunction (const constexpr_ct
   tree h = NULL_TREE, h1 = NULL_TREE, hvec = NULL_TREE, expr = NULL_TREE;
   tree type = NULL_TREE, ht, info;
   reflect_kind kind = REFLECT_UNDEF;
+  tree rettype;
+  if (TREE_CODE (call) == AGGR_INIT_EXPR)
+    rettype = TREE_TYPE (AGGR_INIT_EXPR_SLOT (call));
+  else
+    rettype = TREE_TYPE (call);
+  if (check_metafn_return_type (loc, METAFN_KIND_RET (minfo), rettype,
+                               non_constant_p))
+    return NULL_TREE;
   for (int argno = 0; argno < 3; ++argno)
-    switch (METAFN_KIND_ARG (argno))
+    switch (METAFN_KIND_ARG (minfo, argno))
       {
       case METAFN_KIND_ARG_VOID:
        break;
       case METAFN_KIND_ARG_INFO:
       case METAFN_KIND_ARG_TINFO:
        gcc_assert (argno < 2);
-       info = get_info (ctx, call, argno, non_constant_p, overflow_p,
+       info = get_info (loc, ctx, call, argno, non_constant_p, overflow_p,
                         jump_target);
        if (*jump_target || *non_constant_p)
          return NULL_TREE;
        ht = REFLECT_EXPR_HANDLE (info);
-       if (METAFN_KIND_ARG (argno) == METAFN_KIND_ARG_TINFO
+       if (METAFN_KIND_ARG (minfo, argno) == METAFN_KIND_ARG_TINFO
            && eval_is_type (ht) != boolean_true_node)
          return throw_exception_nontype (loc, ctx, fun, non_constant_p,
                                          jump_target);
@@ -7611,6 +7781,9 @@ process_metafunction (const constexpr_ct
       case METAFN_KIND_ARG_OPERATORS:
        gcc_assert (argno == 0);
        expr = get_nth_callarg (call, 0);
+       if (check_metafn_arg_type (loc, METAFN_KIND_ARG (minfo, argno), 0,
+                                  TREE_TYPE (expr), non_constant_p))
+         return NULL_TREE;
        expr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,
                                             non_constant_p, overflow_p,
                                             jump_target);
@@ -7622,6 +7795,9 @@ process_metafunction (const constexpr_ct
       case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:
        gcc_assert (argno == 1);
        expr = get_nth_callarg (call, argno);
+       if (check_metafn_arg_type (loc, METAFN_KIND_ARG (minfo, argno), 1,
+                                  TREE_TYPE (expr), non_constant_p))
+         return NULL_TREE;
        expr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,
                                             non_constant_p, overflow_p,
                                             jump_target);
@@ -7636,31 +7812,31 @@ process_metafunction (const constexpr_ct
     {
     case METAFN_OPERATOR_OF:
       return eval_operator_of (loc, ctx, h, non_constant_p, jump_target,
-                              TREE_TYPE (call), fun);
+                              rettype, fun);
     case METAFN_SYMBOL_OF:
       return eval_symbol_of (loc, ctx, expr, non_constant_p, jump_target,
-                            char_type_node, TREE_TYPE (call), fun);
+                            char_type_node, rettype, fun);
     case METAFN_U8SYMBOL_OF:
       return eval_symbol_of (loc, ctx, expr, non_constant_p, jump_target,
-                            char8_type_node, TREE_TYPE (call), fun);
+                            char8_type_node, rettype, fun);
     case METAFN_HAS_IDENTIFIER:
       return eval_has_identifier (h, kind);
     case METAFN_IDENTIFIER_OF:
       return eval_identifier_of (loc, ctx, h, kind, non_constant_p, 
jump_target,
-                                char_type_node, TREE_TYPE (call), fun);
+                                char_type_node, rettype, fun);
     case METAFN_U8IDENTIFIER_OF:
       return eval_identifier_of (loc, ctx, h, kind, non_constant_p, 
jump_target,
-                                char8_type_node, TREE_TYPE (call), fun);
+                                char8_type_node, rettype, fun);
     case METAFN_DISPLAY_STRING_OF:
       return eval_display_string_of (loc, ctx, h, kind, non_constant_p,
                                     jump_target, char_type_node,
-                                    TREE_TYPE (call), fun);
+                                    rettype, fun);
     case METAFN_U8DISPLAY_STRING_OF:
       return eval_display_string_of (loc, ctx, h, kind, non_constant_p,
                                     jump_target, char8_type_node,
-                                    TREE_TYPE (call), fun);
+                                    rettype, fun);
     case METAFN_SOURCE_LOCATION_OF:
-      return eval_source_location_of (loc, h, kind, TREE_TYPE (call));
+      return eval_source_location_of (loc, h, kind, rettype);
     case METAFN_TYPE_OF:
       return eval_type_of (loc, ctx, h, kind, non_constant_p, jump_target, 
fun);
     case METAFN_OBJECT_OF:
@@ -7880,16 +8056,16 @@ process_metafunction (const constexpr_ct
       return eval_enumerators_of (loc, ctx, h, non_constant_p, jump_target,
                                  fun);
     case METAFN_OFFSET_OF:
-      return eval_offset_of (loc, ctx, h, kind, TREE_TYPE (call),
+      return eval_offset_of (loc, ctx, h, kind, rettype,
                             non_constant_p, jump_target, fun);
     case METAFN_SIZE_OF:
-      return eval_size_of (loc, ctx, h, kind, TREE_TYPE (call), non_constant_p,
+      return eval_size_of (loc, ctx, h, kind, rettype, non_constant_p,
                           jump_target, fun);
     case METAFN_ALIGNMENT_OF:
-      return eval_alignment_of (loc, ctx, h, kind, TREE_TYPE (call),
+      return eval_alignment_of (loc, ctx, h, kind, rettype,
                                non_constant_p, jump_target, fun);
     case METAFN_BIT_SIZE_OF:
-      return eval_bit_size_of (loc, ctx, h, kind, TREE_TYPE (call),
+      return eval_bit_size_of (loc, ctx, h, kind, rettype,
                               non_constant_p, jump_target, fun);
     case METAFN_EXTRACT:
       {
--- gcc/testsuite/g++.dg/reflect/pr124689.C.jj  2026-04-03 10:58:40.557430658 
+0200
+++ gcc/testsuite/g++.dg/reflect/pr124689.C     2026-04-03 10:58:40.557430658 
+0200
@@ -0,0 +1,58 @@
+// PR c++/124689
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+// Test error recovery from bogus <meta> replacement.
+
+namespace std {
+  using size_t = decltype (sizeof 0);
+  struct string_view {};
+  namespace meta {
+    using info = decltype(^^::);
+    consteval int is_enumerator (info);
+    consteval void type_of (info);
+    consteval char size_of (info);
+    consteval int offset_of (info);
+    consteval float operator_of (info);
+    consteval int *source_location_of (info);
+    consteval bool identifier_of (info);
+    consteval void u8identifier_of (info);
+    consteval int type_order (info, info);
+    consteval double enumerators_of (info);
+    struct access_context {
+      static consteval short current ();
+    };
+    consteval bool is_bit_field (int);
+    consteval bool is_void_type (double);
+    consteval info tuple_element (long int, info);
+    consteval size_t extent (info, info);
+    consteval string_view symbol_of (int);
+    consteval info members_of (info, int);
+    consteval info data_member_spec (info, float);
+  }
+}
+
+int a;
+constexpr auto b = is_enumerator (^^::);               // { dg-error 
"incorrect 'int' return type, expected 'bool'" }
+consteval {
+  type_of (^^a);                                       // { dg-error 
"incorrect 'void' return type, expected 'std::meta::info'" }
+}
+struct S { int a; S &operator [] (const S &); };
+constexpr auto c = size_of (^^a);                      // { dg-error 
"incorrect 'char' return type, expected 'std::size_t'" }
+constexpr auto d = offset_of (^^S::a);                 // { dg-error 
"incorrect 'int' return type, expected 'std::meta::member_offset'" }
+constexpr auto e = operator_of (^^S::operator []);     // { dg-error 
"incorrect 'float' return type, expected 'std::meta::operators'" }
+constexpr auto f = source_location_of (^^a);           // { dg-error 
"incorrect 'int\\\*' return type, expected 'std::source_location'" }
+constexpr auto g = identifier_of (^^a);                        // { dg-error 
"incorrect 'bool' return type, expected 'std::string_view'" }
+consteval {
+  u8identifier_of (^^a);                               // { dg-error 
"incorrect 'void' return type, expected 'std::u8string_view'" }
+}
+constexpr auto i = type_order (^^int, ^^int);          // { dg-error 
"incorrect 'int' return type, expected 'std::strong_ordering'" }
+enum E { E1 };
+constexpr auto j = enumerators_of (^^E);               // { dg-error 
"incorrect 'double' return type, expected 'std::vector<std::meta::info>'" }
+constexpr auto k = std::meta::access_context::current (); // { dg-error 
"incorrect 'short int' return type, expected 'std::meta::access_context'" }
+constexpr auto l = std::meta::is_bit_field (0);                // { dg-error 
"incorrect 'int' type of argument 1, expected 'std::meta::info'" }
+constexpr auto m = std::meta::is_void_type (0.0);      // { dg-error 
"incorrect 'double' type of argument 1, expected 'std::meta::info'" }
+constexpr auto n = std::meta::tuple_element (0, ^^::); // { dg-error 
"incorrect 'long int' type of argument 1, expected 'std::size_t'" }
+constexpr auto o = extent (^^int, ^^int);              // { dg-error 
"incorrect 'std::meta::info' type of argument 2, expected 'unsigned int'" }
+constexpr auto p = std::meta::symbol_of (0);           // { dg-error 
"incorrect 'int' type of argument 1, expected 'std::meta::operators'" }
+constexpr auto q = members_of (^^S, 0);                        // { dg-error 
"incorrect 'std::meta::info' return type, expected 
'std::vector<std::meta::info>'" }
+constexpr auto r = data_member_spec (^^S, 0.0f);       // { dg-error 
"incorrect 'float' type of argument 2, expected 
'std::meta::data_member_options'" }
--- gcc/cp/metafns.h.jj 2026-03-31 23:42:30.250203938 +0200
+++ gcc/cp/metafns.h    2026-04-03 11:20:29.156856730 +0200
@@ -295,10 +295,6 @@ enum {
   METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1
 };
 
-/* Get the metafn_kind_arg for argument ARGNO.  */
-#define METAFN_KIND_ARG(ARGNO) \
-  ((minfo->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) & METAFN_KIND_MASK)
-
 /* Possible return types of metafunctions.  */
 enum metafn_kind_ret {
   METAFN_KIND_RET_BOOL,
@@ -316,6 +312,10 @@ enum metafn_kind_ret {
 };
 static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK, "");
 
+/* Get the metafn_kind_ret.  */
+#define METAFN_KIND_RET(MINFO) \
+  ((metafn_kind_ret) (((int) (MINFO)->kind) & METAFN_KIND_MASK))
+
 /* Possible argument types of metafunctions.  */
 enum metafn_kind_arg {
   METAFN_KIND_ARG_VOID = 0,
@@ -336,6 +336,11 @@ enum metafn_kind_arg {
 static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK,
               "");
 
+/* Get the metafn_kind_arg for argument ARGNO.  */
+#define METAFN_KIND_ARG(MINFO, ARGNO) \
+  ((metafn_kind_arg) (((MINFO)->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) \
+                     & METAFN_KIND_MASK))
+
 /* Possible sets of 0-3 arguments of metafunctions.  */
 enum metafn_kind_args {
   METAFN_KIND_ARGS_VOID = METAFN_KIND_ARG_VOID,
@@ -409,6 +414,9 @@ enum metafn_kind {
   METAFN_KIND_INFO_REFLECTION_RANGET
     = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_INFO,
+  METAFN_KIND_BOOL_INFO_REFLECTION_RANGE
+    = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)
+      | METAFN_KIND_RET_BOOL,
   METAFN_KIND_INFO_INFO_REFLECTION_RANGE
     = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_INFO,
@@ -477,7 +485,7 @@ enum metafn_kind {
     = (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_U8STRING_VIEW
 };
-#line 453 "metafns.gperf"
+#line 461 "metafns.gperf"
 struct metafn_info
 {
   /* A name within "std::meta::" (or "std::meta::access_context::").  */
@@ -601,479 +609,479 @@ metafn_lookup::find (const char *str, si
 #endif
   static const struct metafn_info wordlist[] =
     {
-#line 656 "metafns.gperf"
+#line 664 "metafns.gperf"
       {"rank", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},
-#line 586 "metafns.gperf"
+#line 594 "metafns.gperf"
       {"is_void_type", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 591 "metafns.gperf"
+#line 599 "metafns.gperf"
       {"is_pointer_type", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 494 "metafns.gperf"
+#line 502 "metafns.gperf"
       {"is_volatile", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},
-#line 540 "metafns.gperf"
+#line 548 "metafns.gperf"
       {"is_value", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},
-#line 547 "metafns.gperf"
+#line 555 "metafns.gperf"
       {"is_base", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},
-#line 479 "metafns.gperf"
+#line 487 "metafns.gperf"
       {"is_private", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},
-#line 508 "metafns.gperf"
+#line 516 "metafns.gperf"
       {"is_variable", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},
-#line 662 "metafns.gperf"
+#line 670 "metafns.gperf"
       {"is_nothrow_convertible_type", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 641 "metafns.gperf"
+#line 649 "metafns.gperf"
       {"is_nothrow_constructible_type", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 667 "metafns.gperf"
+#line 675 "metafns.gperf"
       {"is_nothrow_invocable_type", METAFN_IS_NOTHROW_INVOCABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 646 "metafns.gperf"
+#line 654 "metafns.gperf"
       {"is_nothrow_copy_assignable_type", 
METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 668 "metafns.gperf"
+#line 676 "metafns.gperf"
       {"is_nothrow_invocable_r_type", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},
-#line 643 "metafns.gperf"
+#line 651 "metafns.gperf"
       {"is_nothrow_copy_constructible_type", 
METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 659 "metafns.gperf"
+#line 667 "metafns.gperf"
       {"is_base_of_type", METAFN_IS_BASE_OF_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 647 "metafns.gperf"
+#line 655 "metafns.gperf"
       {"is_nothrow_move_assignable_type", 
METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 658 "metafns.gperf"
+#line 666 "metafns.gperf"
       {"is_same_type", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 644 "metafns.gperf"
+#line 652 "metafns.gperf"
       {"is_nothrow_move_constructible_type", 
METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 532 "metafns.gperf"
+#line 540 "metafns.gperf"
       {"is_variable_template", METAFN_IS_VARIABLE_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 587 "metafns.gperf"
+#line 595 "metafns.gperf"
       {"is_null_pointer_type", METAFN_IS_NULL_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 645 "metafns.gperf"
+#line 653 "metafns.gperf"
       {"is_nothrow_assignable_type", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 650 "metafns.gperf"
+#line 658 "metafns.gperf"
       {"is_nothrow_destructible_type", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 477 "metafns.gperf"
+#line 485 "metafns.gperf"
       {"is_public", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},
-#line 489 "metafns.gperf"
+#line 497 "metafns.gperf"
       {"is_noexcept", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},
-#line 575 "metafns.gperf"
+#line 583 "metafns.gperf"
       {"extract", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},
-#line 695 "metafns.gperf"
+#line 703 "metafns.gperf"
       {"variant_alternative", METAFN_VARIANT_ALTERNATIVE, 
METAFN_KIND_INFO_SIZE_T_TINFO,},
-#line 613 "metafns.gperf"
+#line 621 "metafns.gperf"
       {"is_polymorphic_type", METAFN_IS_POLYMORPHIC_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 513 "metafns.gperf"
+#line 521 "metafns.gperf"
       {"is_function", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},
-#line 510 "metafns.gperf"
+#line 518 "metafns.gperf"
       {"is_namespace", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},
-#line 466 "metafns.gperf"
+#line 474 "metafns.gperf"
       {"symbol_of", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},
-#line 664 "metafns.gperf"
+#line 672 "metafns.gperf"
       {"is_pointer_interconvertible_base_of_type", 
METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 620 "metafns.gperf"
+#line 628 "metafns.gperf"
       {"is_bounded_array_type", METAFN_IS_BOUNDED_ARRAY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 694 "metafns.gperf"
+#line 702 "metafns.gperf"
       {"variant_size", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},
-#line 493 "metafns.gperf"
+#line 501 "metafns.gperf"
       {"is_const", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},
-#line 539 "metafns.gperf"
+#line 547 "metafns.gperf"
       {"is_concept", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},
-#line 509 "metafns.gperf"
+#line 517 "metafns.gperf"
       {"is_type", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},
-#line 566 "metafns.gperf"
+#line 574 "metafns.gperf"
       {"bases_of", METAFN_BASES_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 531 "metafns.gperf"
+#line 539 "metafns.gperf"
       {"is_function_template", METAFN_IS_FUNCTION_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 514 "metafns.gperf"
+#line 522 "metafns.gperf"
       {"is_conversion_function", METAFN_IS_CONVERSION_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 628 "metafns.gperf"
+#line 636 "metafns.gperf"
       {"is_copy_assignable_type", METAFN_IS_COPY_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 661 "metafns.gperf"
+#line 669 "metafns.gperf"
       {"is_convertible_type", METAFN_IS_CONVERTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 651 "metafns.gperf"
+#line 659 "metafns.gperf"
       {"is_implicit_lifetime_type", METAFN_IS_IMPLICIT_LIFETIME_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 696 "metafns.gperf"
+#line 704 "metafns.gperf"
       {"type_order", METAFN_TYPE_ORDER, 
METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},
-#line 530 "metafns.gperf"
+#line 538 "metafns.gperf"
       {"is_template", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 642 "metafns.gperf"
+#line 650 "metafns.gperf"
       {"is_nothrow_default_constructible_type", 
METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 576 "metafns.gperf"
-      {"can_substitute", METAFN_CAN_SUBSTITUTE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
-#line 535 "metafns.gperf"
+#line 584 "metafns.gperf"
+      {"can_substitute", METAFN_CAN_SUBSTITUTE, 
METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,},
+#line 543 "metafns.gperf"
       {"is_conversion_function_template", 
METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 523 "metafns.gperf"
+#line 531 "metafns.gperf"
       {"is_copy_assignment", METAFN_IS_COPY_ASSIGNMENT, 
METAFN_KIND_BOOL_INFO,},
-#line 625 "metafns.gperf"
+#line 633 "metafns.gperf"
       {"is_copy_constructible_type", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 572 "metafns.gperf"
+#line 580 "metafns.gperf"
       {"size_of", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},
-#line 474 "metafns.gperf"
+#line 482 "metafns.gperf"
       {"type_of", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},
-#line 511 "metafns.gperf"
+#line 519 "metafns.gperf"
       {"is_type_alias", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},
-#line 623 "metafns.gperf"
-      {"is_constructible_type", METAFN_IS_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
 #line 631 "metafns.gperf"
+      {"is_constructible_type", METAFN_IS_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
+#line 639 "metafns.gperf"
       {"is_swappable_type", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 502 "metafns.gperf"
+#line 510 "metafns.gperf"
       {"has_module_linkage", METAFN_HAS_MODULE_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 529 "metafns.gperf"
+#line 537 "metafns.gperf"
       {"is_vararg_function", METAFN_IS_VARARG_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 520 "metafns.gperf"
+#line 528 "metafns.gperf"
       {"is_copy_constructor", METAFN_IS_COPY_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
-#line 692 "metafns.gperf"
+#line 700 "metafns.gperf"
       {"tuple_size", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},
-#line 556 "metafns.gperf"
+#line 564 "metafns.gperf"
       {"variable_of", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},
-#line 600 "metafns.gperf"
+#line 608 "metafns.gperf"
       {"is_reflection_type", METAFN_IS_REFLECTION_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 574 "metafns.gperf"
+#line 582 "metafns.gperf"
       {"bit_size_of", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},
-#line 603 "metafns.gperf"
+#line 611 "metafns.gperf"
       {"is_fundamental_type", METAFN_IS_FUNDAMENTAL_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 663 "metafns.gperf"
+#line 671 "metafns.gperf"
       {"is_layout_compatible_type", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 699 "metafns.gperf"
+#line 707 "metafns.gperf"
       {"current", METAFN_ACCESS_CONTEXT_CURRENT, 
METAFN_KIND_ACCESS_CONTEXT_VOID,},
-#line 562 "metafns.gperf"
+#line 570 "metafns.gperf"
       {"current_function", METAFN_CURRENT_FUNCTION, METAFN_KIND_INFO_VOID,},
-#line 538 "metafns.gperf"
+#line 546 "metafns.gperf"
       {"is_constructor_template", METAFN_IS_CONSTRUCTOR_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 686 "metafns.gperf"
+#line 694 "metafns.gperf"
       {"common_type", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},
-#line 629 "metafns.gperf"
+#line 637 "metafns.gperf"
       {"is_move_assignable_type", METAFN_IS_MOVE_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 687 "metafns.gperf"
+#line 695 "metafns.gperf"
       {"common_reference", METAFN_COMMON_REFERENCE, 
METAFN_KIND_INFO_REFLECTION_RANGET,},
-#line 693 "metafns.gperf"
+#line 701 "metafns.gperf"
       {"tuple_element", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},
-#line 580 "metafns.gperf"
+#line 588 "metafns.gperf"
       {"reflect_function", METAFN_REFLECT_FUNCTION, 
METAFN_KIND_INFO_TEMPLATE_PARM_REF,},
-#line 500 "metafns.gperf"
+#line 508 "metafns.gperf"
       {"has_automatic_storage_duration", 
METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},
-#line 524 "metafns.gperf"
+#line 532 "metafns.gperf"
       {"is_move_assignment", METAFN_IS_MOVE_ASSIGNMENT, 
METAFN_KIND_BOOL_INFO,},
-#line 518 "metafns.gperf"
+#line 526 "metafns.gperf"
       {"is_constructor", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},
-#line 549 "metafns.gperf"
+#line 557 "metafns.gperf"
       {"has_parent", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},
-#line 626 "metafns.gperf"
+#line 634 "metafns.gperf"
       {"is_move_constructible_type", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 649 "metafns.gperf"
+#line 657 "metafns.gperf"
       {"is_nothrow_swappable_type", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 610 "metafns.gperf"
+#line 618 "metafns.gperf"
       {"is_trivially_copyable_type", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 601 "metafns.gperf"
+#line 609 "metafns.gperf"
       {"is_reference_type", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 593 "metafns.gperf"
+#line 601 "metafns.gperf"
       {"is_rvalue_reference_type", METAFN_IS_RVALUE_REFERENCE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 648 "metafns.gperf"
+#line 656 "metafns.gperf"
       {"is_nothrow_swappable_with_type", 
METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 633 "metafns.gperf"
+#line 641 "metafns.gperf"
       {"is_trivially_constructible_type", 
METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 630 "metafns.gperf"
-      {"is_swappable_with_type", METAFN_IS_SWAPPABLE_WITH_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
 #line 638 "metafns.gperf"
+      {"is_swappable_with_type", METAFN_IS_SWAPPABLE_WITH_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 646 "metafns.gperf"
       {"is_trivially_copy_assignable_type", 
METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 688 "metafns.gperf"
+#line 696 "metafns.gperf"
       {"underlying_type", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},
-#line 635 "metafns.gperf"
+#line 643 "metafns.gperf"
       {"is_trivially_copy_constructible_type", 
METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 607 "metafns.gperf"
+#line 615 "metafns.gperf"
       {"is_member_pointer_type", METAFN_IS_MEMBER_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 577 "metafns.gperf"
+#line 585 "metafns.gperf"
       {"substitute", METAFN_SUBSTITUTE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
-#line 555 "metafns.gperf"
+#line 563 "metafns.gperf"
       {"parameters_of", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
-#line 521 "metafns.gperf"
+#line 529 "metafns.gperf"
       {"is_move_constructor", METAFN_IS_MOVE_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
-#line 548 "metafns.gperf"
+#line 556 "metafns.gperf"
       {"has_default_member_initializer", 
METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},
-#line 517 "metafns.gperf"
+#line 525 "metafns.gperf"
       {"is_special_member_function", METAFN_IS_SPECIAL_MEMBER_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 612 "metafns.gperf"
+#line 620 "metafns.gperf"
       {"is_empty_type", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 627 "metafns.gperf"
+#line 635 "metafns.gperf"
       {"is_assignable_type", METAFN_IS_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 592 "metafns.gperf"
+#line 600 "metafns.gperf"
       {"is_lvalue_reference_type", METAFN_IS_LVALUE_REFERENCE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 528 "metafns.gperf"
+#line 536 "metafns.gperf"
       {"has_default_argument", METAFN_HAS_DEFAULT_ARGUMENT, 
METAFN_KIND_BOOL_INFO,},
-#line 690 "metafns.gperf"
+#line 698 "metafns.gperf"
       {"unwrap_reference", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},
-#line 522 "metafns.gperf"
+#line 530 "metafns.gperf"
       {"is_assignment", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},
-#line 609 "metafns.gperf"
+#line 617 "metafns.gperf"
       {"is_volatile_type", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 543 "metafns.gperf"
+#line 551 "metafns.gperf"
       {"is_class_member", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},
-#line 602 "metafns.gperf"
+#line 610 "metafns.gperf"
       {"is_arithmetic_type", METAFN_IS_ARITHMETIC_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 544 "metafns.gperf"
+#line 552 "metafns.gperf"
       {"is_namespace_member", METAFN_IS_NAMESPACE_MEMBER, 
METAFN_KIND_BOOL_INFO,},
-#line 565 "metafns.gperf"
+#line 573 "metafns.gperf"
       {"members_of", METAFN_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 478 "metafns.gperf"
+#line 486 "metafns.gperf"
       {"is_protected", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},
-#line 505 "metafns.gperf"
+#line 513 "metafns.gperf"
       {"has_linkage", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},
-#line 469 "metafns.gperf"
+#line 477 "metafns.gperf"
       {"identifier_of", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},
-#line 677 "metafns.gperf"
+#line 685 "metafns.gperf"
       {"add_rvalue_reference", METAFN_ADD_RVALUE_REFERENCE, 
METAFN_KIND_INFO_TINFO,},
-#line 553 "metafns.gperf"
+#line 561 "metafns.gperf"
       {"template_of", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},
-#line 512 "metafns.gperf"
+#line 520 "metafns.gperf"
       {"is_namespace_alias", METAFN_IS_NAMESPACE_ALIAS, 
METAFN_KIND_BOOL_INFO,},
-#line 657 "metafns.gperf"
+#line 665 "metafns.gperf"
       {"extent", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},
-#line 596 "metafns.gperf"
+#line 604 "metafns.gperf"
       {"is_enum_type", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 533 "metafns.gperf"
+#line 541 "metafns.gperf"
       {"is_class_template", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 608 "metafns.gperf"
+#line 616 "metafns.gperf"
       {"is_const_type", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 564 "metafns.gperf"
+#line 572 "metafns.gperf"
       {"current_namespace", METAFN_CURRENT_NAMESPACE, METAFN_KIND_INFO_VOID,},
-#line 488 "metafns.gperf"
+#line 496 "metafns.gperf"
       {"is_explicit", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},
-#line 683 "metafns.gperf"
+#line 691 "metafns.gperf"
       {"add_pointer", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},
-#line 639 "metafns.gperf"
+#line 647 "metafns.gperf"
       {"is_trivially_move_assignable_type", 
METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 506 "metafns.gperf"
+#line 514 "metafns.gperf"
       {"is_complete_type", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},
-#line 636 "metafns.gperf"
+#line 644 "metafns.gperf"
       {"is_trivially_move_constructible_type", 
METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 605 "metafns.gperf"
+#line 613 "metafns.gperf"
       {"is_scalar_type", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 481 "metafns.gperf"
+#line 489 "metafns.gperf"
       {"is_pure_virtual", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},
-#line 526 "metafns.gperf"
+#line 534 "metafns.gperf"
       {"is_function_parameter", METAFN_IS_FUNCTION_PARAMETER, 
METAFN_KIND_BOOL_INFO,},
-#line 507 "metafns.gperf"
+#line 515 "metafns.gperf"
       {"is_enumerable_type", METAFN_IS_ENUMERABLE_TYPE, 
METAFN_KIND_BOOL_INFO,},
-#line 599 "metafns.gperf"
+#line 607 "metafns.gperf"
       {"is_function_type", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 550 "metafns.gperf"
+#line 558 "metafns.gperf"
       {"parent_of", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},
-#line 545 "metafns.gperf"
+#line 553 "metafns.gperf"
       {"is_nonstatic_data_member", METAFN_IS_NONSTATIC_DATA_MEMBER, 
METAFN_KIND_BOOL_INFO,},
-#line 542 "metafns.gperf"
+#line 550 "metafns.gperf"
       {"is_structured_binding", METAFN_IS_STRUCTURED_BINDING, 
METAFN_KIND_BOOL_INFO,},
-#line 495 "metafns.gperf"
+#line 503 "metafns.gperf"
       {"is_mutable_member", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},
-#line 637 "metafns.gperf"
+#line 645 "metafns.gperf"
       {"is_trivially_assignable_type", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 624 "metafns.gperf"
+#line 632 "metafns.gperf"
       {"is_default_constructible_type", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 527 "metafns.gperf"
+#line 535 "metafns.gperf"
       {"is_explicit_object_parameter", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, 
METAFN_KIND_BOOL_INFO,},
-#line 673 "metafns.gperf"
+#line 681 "metafns.gperf"
       {"add_volatile", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},
-#line 563 "metafns.gperf"
+#line 571 "metafns.gperf"
       {"current_class", METAFN_CURRENT_CLASS, METAFN_KIND_INFO_VOID,},
-#line 570 "metafns.gperf"
+#line 578 "metafns.gperf"
       {"enumerators_of", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
-#line 491 "metafns.gperf"
+#line 499 "metafns.gperf"
       {"is_enumerator", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},
-#line 541 "metafns.gperf"
+#line 549 "metafns.gperf"
       {"is_object", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},
-#line 472 "metafns.gperf"
+#line 480 "metafns.gperf"
       {"u8display_string_of", METAFN_U8DISPLAY_STRING_OF, 
METAFN_KIND_U8STRING_VIEW_INFO,},
-#line 595 "metafns.gperf"
+#line 603 "metafns.gperf"
       {"is_member_function_pointer_type", 
METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 652 "metafns.gperf"
+#line 660 "metafns.gperf"
       {"has_virtual_destructor", METAFN_HAS_VIRTUAL_DESTRUCTOR, 
METAFN_KIND_BOOL_TINFO,},
-#line 655 "metafns.gperf"
+#line 663 "metafns.gperf"
       {"reference_converts_from_temporary", 
METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 519 "metafns.gperf"
+#line 527 "metafns.gperf"
       {"is_default_constructor", METAFN_IS_DEFAULT_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
-#line 604 "metafns.gperf"
+#line 612 "metafns.gperf"
       {"is_object_type", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 578 "metafns.gperf"
+#line 586 "metafns.gperf"
       {"reflect_constant", METAFN_REFLECT_CONSTANT, 
METAFN_KIND_INFO_TEMPLATE_PARM,},
-#line 525 "metafns.gperf"
+#line 533 "metafns.gperf"
       {"is_destructor", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},
-#line 482 "metafns.gperf"
+#line 490 "metafns.gperf"
       {"is_override", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},
-#line 654 "metafns.gperf"
+#line 662 "metafns.gperf"
       {"reference_constructs_from_temporary", 
METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 557 "metafns.gperf"
+#line 565 "metafns.gperf"
       {"return_type_of", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},
-#line 676 "metafns.gperf"
+#line 684 "metafns.gperf"
       {"add_lvalue_reference", METAFN_ADD_LVALUE_REFERENCE, 
METAFN_KIND_INFO_TINFO,},
-#line 476 "metafns.gperf"
+#line 484 "metafns.gperf"
       {"constant_of", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},
-#line 671 "metafns.gperf"
+#line 679 "metafns.gperf"
       {"remove_cv", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},
-#line 640 "metafns.gperf"
+#line 648 "metafns.gperf"
       {"is_trivially_destructible_type", 
METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 674 "metafns.gperf"
+#line 682 "metafns.gperf"
       {"add_cv", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},
-#line 616 "metafns.gperf"
+#line 624 "metafns.gperf"
       {"is_aggregate_type", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 581 "metafns.gperf"
+#line 589 "metafns.gperf"
       {"reflect_constant_string", METAFN_REFLECT_CONSTANT_STRING, 
METAFN_KIND_INFO_INPUT_RANGE,},
-#line 554 "metafns.gperf"
+#line 562 "metafns.gperf"
       {"template_arguments_of", METAFN_TEMPLATE_ARGUMENTS_OF, 
METAFN_KIND_VECTOR_INFO_INFO,},
-#line 569 "metafns.gperf"
+#line 577 "metafns.gperf"
       {"subobjects_of", METAFN_SUBOBJECTS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 571 "metafns.gperf"
+#line 579 "metafns.gperf"
       {"offset_of", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},
-#line 634 "metafns.gperf"
+#line 642 "metafns.gperf"
       {"is_trivially_default_constructible_type", 
METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 675 "metafns.gperf"
+#line 683 "metafns.gperf"
       {"remove_reference", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},
-#line 534 "metafns.gperf"
+#line 542 "metafns.gperf"
       {"is_alias_template", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 679 "metafns.gperf"
+#line 687 "metafns.gperf"
       {"make_unsigned", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},
-#line 665 "metafns.gperf"
+#line 673 "metafns.gperf"
       {"is_invocable_type", METAFN_IS_INVOCABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 622 "metafns.gperf"
+#line 630 "metafns.gperf"
       {"is_scoped_enum_type", METAFN_IS_SCOPED_ENUM_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 546 "metafns.gperf"
+#line 554 "metafns.gperf"
       {"is_static_member", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},
-#line 672 "metafns.gperf"
+#line 680 "metafns.gperf"
       {"add_const", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},
-#line 632 "metafns.gperf"
+#line 640 "metafns.gperf"
       {"is_destructible_type", METAFN_IS_DESTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 598 "metafns.gperf"
+#line 606 "metafns.gperf"
       {"is_class_type", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 680 "metafns.gperf"
+#line 688 "metafns.gperf"
       {"remove_extent", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},
-#line 666 "metafns.gperf"
+#line 674 "metafns.gperf"
       {"is_invocable_r_type", METAFN_IS_INVOCABLE_R_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},
-#line 558 "metafns.gperf"
+#line 566 "metafns.gperf"
       {"is_accessible", METAFN_IS_ACCESSIBLE, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 465 "metafns.gperf"
+#line 473 "metafns.gperf"
       {"operator_of", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},
-#line 590 "metafns.gperf"
+#line 598 "metafns.gperf"
       {"is_array_type", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 669 "metafns.gperf"
+#line 677 "metafns.gperf"
       {"remove_const", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},
-#line 497 "metafns.gperf"
+#line 505 "metafns.gperf"
       {"is_rvalue_reference_qualified", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, 
METAFN_KIND_BOOL_INFO,},
-#line 498 "metafns.gperf"
+#line 506 "metafns.gperf"
       {"has_static_storage_duration", METAFN_HAS_STATIC_STORAGE_DURATION, 
METAFN_KIND_BOOL_INFO,},
-#line 681 "metafns.gperf"
+#line 689 "metafns.gperf"
       {"remove_all_extents", METAFN_REMOVE_ALL_EXTENTS, 
METAFN_KIND_INFO_TINFO,},
-#line 503 "metafns.gperf"
+#line 511 "metafns.gperf"
       {"has_external_linkage", METAFN_HAS_EXTERNAL_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 684 "metafns.gperf"
+#line 692 "metafns.gperf"
       {"remove_cvref", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},
-#line 492 "metafns.gperf"
+#line 500 "metafns.gperf"
       {"is_annotation", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},
-#line 682 "metafns.gperf"
+#line 690 "metafns.gperf"
       {"remove_pointer", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},
-#line 496 "metafns.gperf"
+#line 504 "metafns.gperf"
       {"is_lvalue_reference_qualified", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, 
METAFN_KIND_BOOL_INFO,},
-#line 660 "metafns.gperf"
+#line 668 "metafns.gperf"
       {"is_virtual_base_of_type", METAFN_IS_VIRTUAL_BASE_OF_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 584 "metafns.gperf"
+#line 592 "metafns.gperf"
       {"is_data_member_spec", METAFN_IS_DATA_MEMBER_SPEC, 
METAFN_KIND_BOOL_INFO,},
-#line 618 "metafns.gperf"
+#line 626 "metafns.gperf"
       {"is_signed_type", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 614 "metafns.gperf"
+#line 622 "metafns.gperf"
       {"is_abstract_type", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 480 "metafns.gperf"
+#line 488 "metafns.gperf"
       {"is_virtual", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},
-#line 471 "metafns.gperf"
+#line 479 "metafns.gperf"
       {"display_string_of", METAFN_DISPLAY_STRING_OF, 
METAFN_KIND_STRING_VIEW_INFO,},
-#line 594 "metafns.gperf"
+#line 602 "metafns.gperf"
       {"is_member_object_pointer_type", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 691 "metafns.gperf"
+#line 699 "metafns.gperf"
       {"unwrap_ref_decay", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},
-#line 617 "metafns.gperf"
+#line 625 "metafns.gperf"
       {"is_consteval_only_type", METAFN_IS_CONSTEVAL_ONLY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 606 "metafns.gperf"
+#line 614 "metafns.gperf"
       {"is_compound_type", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 467 "metafns.gperf"
+#line 475 "metafns.gperf"
       {"u8symbol_of", METAFN_U8SYMBOL_OF, 
METAFN_KIND_U8STRING_VIEW_OPERATORS,},
-#line 484 "metafns.gperf"
+#line 492 "metafns.gperf"
       {"is_deleted", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},
-#line 589 "metafns.gperf"
+#line 597 "metafns.gperf"
       {"is_floating_point_type", METAFN_IS_FLOATING_POINT_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 537 "metafns.gperf"
+#line 545 "metafns.gperf"
       {"is_literal_operator_template", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 485 "metafns.gperf"
+#line 493 "metafns.gperf"
       {"is_defaulted", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},
-#line 583 "metafns.gperf"
+#line 591 "metafns.gperf"
       {"data_member_spec", METAFN_DATA_MEMBER_SPEC, 
METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},
-#line 475 "metafns.gperf"
+#line 483 "metafns.gperf"
       {"object_of", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},
-#line 700 "metafns.gperf"
+#line 708 "metafns.gperf"
       {"_S_exception_cvt_to_utf8", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, 
METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},
-#line 701 "metafns.gperf"
+#line 709 "metafns.gperf"
       {"_S_exception_cvt_from_utf8", 
METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, 
METAFN_KIND_STRING_VIEW_INPUT_RANGE,},
-#line 483 "metafns.gperf"
+#line 491 "metafns.gperf"
       {"is_final", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},
-#line 516 "metafns.gperf"
+#line 524 "metafns.gperf"
       {"is_literal_operator", METAFN_IS_LITERAL_OPERATOR, 
METAFN_KIND_BOOL_INFO,},
-#line 487 "metafns.gperf"
+#line 495 "metafns.gperf"
       {"is_user_declared", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},
-#line 552 "metafns.gperf"
+#line 560 "metafns.gperf"
       {"has_template_arguments", METAFN_HAS_TEMPLATE_ARGUMENTS, 
METAFN_KIND_BOOL_INFO,},
-#line 515 "metafns.gperf"
+#line 523 "metafns.gperf"
       {"is_operator_function", METAFN_IS_OPERATOR_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 689 "metafns.gperf"
+#line 697 "metafns.gperf"
       {"invoke_result", METAFN_INVOKE_RESULT, 
METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},
-#line 582 "metafns.gperf"
+#line 590 "metafns.gperf"
       {"reflect_constant_array", METAFN_REFLECT_CONSTANT_ARRAY, 
METAFN_KIND_INFO_INPUT_RANGE,},
-#line 504 "metafns.gperf"
+#line 512 "metafns.gperf"
       {"has_c_language_linkage", METAFN_HAS_C_LANGUAGE_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 536 "metafns.gperf"
+#line 544 "metafns.gperf"
       {"is_operator_function_template", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 588 "metafns.gperf"
+#line 596 "metafns.gperf"
       {"is_integral_type", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 653 "metafns.gperf"
+#line 661 "metafns.gperf"
       {"has_unique_object_representations", 
METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},
-#line 499 "metafns.gperf"
+#line 507 "metafns.gperf"
       {"has_thread_storage_duration", METAFN_HAS_THREAD_STORAGE_DURATION, 
METAFN_KIND_BOOL_INFO,},
-#line 560 "metafns.gperf"
+#line 568 "metafns.gperf"
       {"has_inaccessible_bases", METAFN_HAS_INACCESSIBLE_BASES, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 561 "metafns.gperf"
+#line 569 "metafns.gperf"
       {"has_inaccessible_subobjects", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 678 "metafns.gperf"
+#line 686 "metafns.gperf"
       {"make_signed", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},
-#line 559 "metafns.gperf"
+#line 567 "metafns.gperf"
       {"has_inaccessible_nonstatic_data_members", 
METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 670 "metafns.gperf"
+#line 678 "metafns.gperf"
       {"remove_volatile", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},
-#line 579 "metafns.gperf"
+#line 587 "metafns.gperf"
       {"reflect_object", METAFN_REFLECT_OBJECT, 
METAFN_KIND_INFO_TEMPLATE_PARM_REF,},
-#line 611 "metafns.gperf"
+#line 619 "metafns.gperf"
       {"is_standard_layout_type", METAFN_IS_STANDARD_LAYOUT_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 685 "metafns.gperf"
+#line 693 "metafns.gperf"
       {"decay", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},
-#line 621 "metafns.gperf"
+#line 629 "metafns.gperf"
       {"is_unbounded_array_type", METAFN_IS_UNBOUNDED_ARRAY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 568 "metafns.gperf"
+#line 576 "metafns.gperf"
       {"nonstatic_data_members_of", METAFN_NONSTATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 597 "metafns.gperf"
+#line 605 "metafns.gperf"
       {"is_union_type", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 468 "metafns.gperf"
+#line 476 "metafns.gperf"
       {"has_identifier", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},
-#line 567 "metafns.gperf"
+#line 575 "metafns.gperf"
       {"static_data_members_of", METAFN_STATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 615 "metafns.gperf"
+#line 623 "metafns.gperf"
       {"is_final_type", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 551 "metafns.gperf"
+#line 559 "metafns.gperf"
       {"dealias", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},
-#line 698 "metafns.gperf"
+#line 706 "metafns.gperf"
       {"annotations_of_with_type", METAFN_ANNOTATIONS_OF_WITH_TYPE, 
METAFN_KIND_VECTOR_INFO_INFO_INFO,},
-#line 585 "metafns.gperf"
+#line 593 "metafns.gperf"
       {"define_aggregate", METAFN_DEFINE_AGGREGATE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
-#line 490 "metafns.gperf"
+#line 498 "metafns.gperf"
       {"is_bit_field", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},
-#line 697 "metafns.gperf"
+#line 705 "metafns.gperf"
       {"annotations_of", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
-#line 473 "metafns.gperf"
+#line 481 "metafns.gperf"
       {"source_location_of", METAFN_SOURCE_LOCATION_OF, 
METAFN_KIND_SOURCE_LOCATION_INFO,},
-#line 573 "metafns.gperf"
+#line 581 "metafns.gperf"
       {"alignment_of", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},
-#line 501 "metafns.gperf"
+#line 509 "metafns.gperf"
       {"has_internal_linkage", METAFN_HAS_INTERNAL_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 470 "metafns.gperf"
+#line 478 "metafns.gperf"
       {"u8identifier_of", METAFN_U8IDENTIFIER_OF, 
METAFN_KIND_U8STRING_VIEW_INFO,},
-#line 619 "metafns.gperf"
+#line 627 "metafns.gperf"
       {"is_unsigned_type", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 486 "metafns.gperf"
+#line 494 "metafns.gperf"
       {"is_user_provided", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,}
     };
 #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined 
__clang__ && __clang_major__ >= 3)


        Jakub

Reply via email to