On Mon, Mar 30, 2026 at 03:59:28PM -0400, Jason Merrill wrote:
> > +       /* Similarly for these 3 metafns.  */
> > +       if (id_equal (DECL_NAME (fn), "current_function")
> > +           || id_equal (DECL_NAME (fn), "current_class")
> > +           || id_equal (DECL_NAME (fn), "current_namespace"))
> 
> Optionally, I wonder about looking up the METAFN_ code rather than a bunch
> of id_equal?

I wanted to avoid that because right now metafns.h is fairly large header
included in reflect.cc only ATM.  And actually it isn't even includable in
multiple TUs, while the gperf generated hash method is inline, the
static find method is not and we can't have multiple definitions thereof.

> > --- gcc/cp/reflect.cc.jj    2026-03-27 10:17:14.033332387 +0100
> > +++ gcc/cp/reflect.cc       2026-03-27 15:51:18.122236375 +0100
> > @@ -6236,11 +6236,11 @@ eval_reflect_constant_array (location_t
> >     return get_reflection_raw (loc, decl);
> >   }
> > -/* Process std::meta::access_context::current.  */
> > +/* Return CURRENT-SCOPE(P).  */
> >   static tree
> > -eval_access_context_current (location_t loc, const constexpr_ctx *ctx,
> > -                        tree call, bool *non_constant_p)
> > +current_scope (location_t loc, const constexpr_ctx *ctx, tree call,
> 
> There's already a current_scope in search.cc, this shouldn't have the same
> name.

It is static, but changed that to reflect_current_scope.

> > +/* Process std::meta::current_namespace.  */
> > +
> > +static tree
> > +eval_current_namespace (location_t loc, const constexpr_ctx *ctx,
> > +                   tree call, bool *non_constant_p)
> > +{
> > +  tree scope = current_scope (loc, ctx, call, non_constant_p,
> > +                         "std::meta::current_namespace");
> > +  while (TREE_CODE (scope) != NAMESPACE_DECL)
> > +    {
> > +      if (DECL_P (scope))
> > +   scope = CP_DECL_CONTEXT (scope);
> > +      else
> > +   scope = CP_TYPE_CONTEXT (scope);
> > +    }
> 
> decl_namespace_context?

Changed.

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

gcc/cp/
        * metafns.gperf (enum metafn_code): Add METAFN_CURRENT_FUNCTION,
        METAFN_CURRENT_CLASS and METAFN_CURRENT_NAMESPACE.
        (enum metafn_kind): Add METAFN_KIND_INFO_VOID.
        (current_function, current_class, current_namespace): New
        metafunctions.
        * pt.cc (value_dependent_expression_p): Make current_function(),
        current_class() and current_namespace() calls dependent if they
        are inside of template.
        * reflect.cc (reflect_current_scope, eval_current_function,
        eval_current_class, eval_current_namespace): New functions.
        (eval_access_context_current): Use reflect_current_scope.
        (process_metafunction): Handle METAFN_CURRENT_FUNCTION,
        METAFN_CURRENT_CLASS and METAFN_CURRENT_NAMESPACE.
        * metafns.h: Regenerate.
gcc/testsuite/
        * g++.dg/reflect/current_function1.C: New test.
        * g++.dg/reflect/current_function2.C: New test.
        * g++.dg/reflect/current_class1.C: New test.
        * g++.dg/reflect/current_class2.C: New test.
        * g++.dg/reflect/current_namespace1.C: New test.
libstdc++-v3/
        * include/std/meta (std::meta::current_function,
        std::meta::current_class, std::meta::current_namespace): New
        declarations.
        * src/c++23/std.cc.in: Export those 3.

--- gcc/cp/metafns.gperf.jj     2026-03-27 10:17:14.022332567 +0100
+++ gcc/cp/metafns.gperf        2026-03-27 15:15:06.493926265 +0100
@@ -119,6 +119,9 @@ enum metafn_code {
   METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS,
   METAFN_HAS_INACCESSIBLE_BASES,
   METAFN_HAS_INACCESSIBLE_SUBOBJECTS,
+  METAFN_CURRENT_FUNCTION,
+  METAFN_CURRENT_CLASS,
+  METAFN_CURRENT_NAMESPACE,
   METAFN_MEMBERS_OF,
   METAFN_BASES_OF,
   METAFN_STATIC_DATA_MEMBERS_OF,
@@ -363,6 +366,8 @@ enum metafn_kind {
   METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET
     = (METAFN_KIND_ARGS_TINFO_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_BOOL,
+  METAFN_KIND_INFO_VOID
+    = (METAFN_KIND_ARGS_VOID << METAFN_KIND_SHIFT) | METAFN_KIND_RET_INFO,
   METAFN_KIND_INFO_INFO
     = (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_INFO,
   METAFN_KIND_INFO_TINFO
@@ -554,6 +559,9 @@ is_accessible, METAFN_IS_ACCESSIBLE, MET
 has_inaccessible_nonstatic_data_members, 
METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,
 has_inaccessible_bases, METAFN_HAS_INACCESSIBLE_BASES, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,
 has_inaccessible_subobjects, METAFN_HAS_INACCESSIBLE_SUBOBJECTS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,
+current_function, METAFN_CURRENT_FUNCTION, METAFN_KIND_INFO_VOID,
+current_class, METAFN_CURRENT_CLASS, METAFN_KIND_INFO_VOID,
+current_namespace, METAFN_CURRENT_NAMESPACE, METAFN_KIND_INFO_VOID,
 members_of, METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,
 bases_of, METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,
 static_data_members_of, METAFN_STATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,
--- gcc/cp/pt.cc.jj     2026-03-27 10:17:14.033332387 +0100
+++ gcc/cp/pt.cc        2026-03-27 15:20:11.586883334 +0100
@@ -29794,12 +29794,19 @@ value_dependent_expression_p (tree expre
           is enclosed by a scope corresponding to a templated entity.  */
        if (flag_reflection
            && fn
-           && metafunction_p (fn)
-           && id_equal (DECL_NAME (fn), "current")
-           && DECL_CLASS_SCOPE_P (fn)
-           && id_equal (TYPE_IDENTIFIER (DECL_CONTEXT (fn)),
-                        "access_context"))
-         return true;
+           && metafunction_p (fn))
+         {
+           if (id_equal (DECL_NAME (fn), "current")
+               && DECL_CLASS_SCOPE_P (fn)
+               && id_equal (TYPE_IDENTIFIER (DECL_CONTEXT (fn)),
+                            "access_context"))
+             return true;
+           /* Similarly for these 3 metafns.  */
+           if (id_equal (DECL_NAME (fn), "current_function")
+               || id_equal (DECL_NAME (fn), "current_class")
+               || id_equal (DECL_NAME (fn), "current_namespace"))
+             return true;
+         }
 
        return false;
       }
--- gcc/cp/reflect.cc.jj        2026-03-27 10:17:14.033332387 +0100
+++ gcc/cp/reflect.cc   2026-03-27 15:51:18.122236375 +0100
@@ -6236,11 +6236,11 @@ eval_reflect_constant_array (location_t
   return get_reflection_raw (loc, decl);
 }
 
-/* Process std::meta::access_context::current.  */
+/* Return CURRENT-SCOPE(P).  */
 
 static tree
-eval_access_context_current (location_t loc, const constexpr_ctx *ctx,
-                            tree call, bool *non_constant_p)
+reflect_current_scope (location_t loc, const constexpr_ctx *ctx, tree call,
+                      bool *non_constant_p, const char *name)
 {
   tree scope = cxx_constexpr_caller (ctx);
   /* Ignore temporary current_function_decl changes caused by
@@ -6259,8 +6259,8 @@ eval_access_context_current (location_t
          /* Outside of functions limit this to manifestly constant-evaluation
             so that we don't fold it prematurely.  */
          if (!cxx_constexpr_quiet_p (ctx))
-           error_at (loc, "%<access_context::current%> used outside of "
-                          "manifestly constant-evaluation");
+           error_at (loc, "%qs used outside of manifestly constant-evaluation",
+                     name);
          *non_constant_p = true;
          return call;
        }
@@ -6276,6 +6276,63 @@ eval_access_context_current (location_t
         && (lam = CLASSTYPE_LAMBDA_EXPR (CP_DECL_CONTEXT (scope)))
         && LAMBDA_EXPR_CONSTEVAL_BLOCK_P (lam))
     scope = CP_TYPE_CONTEXT (CP_DECL_CONTEXT (scope));
+  return scope;
+}
+
+/* Process std::meta::current_function.  */
+
+static tree
+eval_current_function (location_t loc, const constexpr_ctx *ctx,
+                      tree call, bool *non_constant_p, tree *jump_target,
+                      tree fun)
+{
+  tree scope = reflect_current_scope (loc, ctx, call, non_constant_p,
+                                     "std::meta::current_function");
+  if (TREE_CODE (scope) != FUNCTION_DECL)
+    throw_exception (loc, ctx, "current scope does not represent a function",
+                    fun, non_constant_p, jump_target);
+  return get_reflection_raw (loc, scope);
+}
+
+/* Process std::meta::current_class.  */
+
+static tree
+eval_current_class (location_t loc, const constexpr_ctx *ctx,
+                   tree call, bool *non_constant_p, tree *jump_target,
+                   tree fun)
+{
+  tree scope = reflect_current_scope (loc, ctx, call, non_constant_p,
+                                     "std::meta::current_class");
+  if (TREE_CODE (scope) == FUNCTION_DECL
+      && DECL_CONTEXT (scope)
+      && TYPE_P (DECL_CONTEXT (scope)))
+    scope = DECL_CONTEXT (scope);
+  if (!CLASS_TYPE_P (scope))
+    throw_exception (loc, ctx, "current scope does not represent a class"
+                              " nor a member function",
+                    fun, non_constant_p, jump_target);
+  return get_reflection_raw (loc, scope);
+}
+
+/* Process std::meta::current_namespace.  */
+
+static tree
+eval_current_namespace (location_t loc, const constexpr_ctx *ctx,
+                       tree call, bool *non_constant_p)
+{
+  tree scope = reflect_current_scope (loc, ctx, call, non_constant_p,
+                                     "std::meta::current_namespace");
+  return get_reflection_raw (loc, decl_namespace_context (scope));
+}
+
+/* Process std::meta::access_context::current.  */
+
+static tree
+eval_access_context_current (location_t loc, const constexpr_ctx *ctx,
+                            tree call, bool *non_constant_p)
+{
+  tree scope = reflect_current_scope (loc, ctx, call, non_constant_p,
+                                     "std::meta::access_context::current");
   tree access_context = TREE_TYPE (call);
   if (TREE_CODE (access_context) != RECORD_TYPE)
     {
@@ -7690,6 +7747,14 @@ process_metafunction (const constexpr_ct
       return eval_has_inaccessible_subobjects (loc, ctx, h, expr, call,
                                               non_constant_p, jump_target,
                                               fun);
+    case METAFN_CURRENT_FUNCTION:
+      return eval_current_function (loc, ctx, call, non_constant_p,
+                                   jump_target, fun);
+    case METAFN_CURRENT_CLASS:
+      return eval_current_class (loc, ctx, call, non_constant_p,
+                                jump_target, fun);
+    case METAFN_CURRENT_NAMESPACE:
+      return eval_current_namespace (loc, ctx, call, non_constant_p);
     case METAFN_MEMBERS_OF:
       return eval_members_of (loc, ctx, h, expr, call, non_constant_p,
                              jump_target, fun);
--- gcc/testsuite/g++.dg/reflect/current_function1.C.jj 2026-03-27 
15:56:04.804555671 +0100
+++ gcc/testsuite/g++.dg/reflect/current_function1.C    2026-03-27 
16:38:06.301962448 +0100
@@ -0,0 +1,76 @@
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+// Test std::current_function.
+
+#include <meta>
+
+using namespace std::meta;
+
+consteval info
+foo (info x = current_function ())
+{
+  static_assert (current_function () == ^^foo);
+  return x;
+}
+
+static_assert (foo (^^std) == ^^std);
+
+void
+qux ()
+{
+  static_assert (foo () == ^^qux);
+}
+
+struct T
+{
+  info t = current_function ();
+};
+
+struct U
+{
+  consteval U () {}
+  info u = current_function ();
+};
+
+struct V : U
+{
+  using U::U;
+  info v = current_function ();
+};
+
+void
+bar ()
+{
+  static_assert (current_function () == ^^bar);
+  static_assert (foo (^^foo) == ^^foo);
+  static_assert (foo () == ^^bar);
+  static_assert (T {}.t == ^^bar);
+  consteval {
+    static_assert (current_function () == ^^bar);
+    consteval {
+      static_assert (current_function () == ^^bar);
+    }
+  }
+  auto l = [] () {
+    int v = 0;
+    static_assert (current_function () == parent_of (^^v));
+    static_assert (parent_of (parent_of (current_function ())) == ^^bar);
+  };
+  auto l2 = [] () -> int (&) [current_function () == ^^bar ? 2 : 3] {
+    static int a[2];
+    return a;
+  };
+}
+
+consteval bool
+baz ()
+{
+  constexpr U u;
+  static_assert (is_constructor (u.u) && parent_of (u.u) == ^^U);
+  constexpr V v;
+  static_assert (is_constructor (v.u) && parent_of (v.u) == ^^U);
+  static_assert (is_constructor (v.v) && parent_of (v.v) == ^^V);
+  return true;
+}
+
+static_assert (baz ());
--- gcc/testsuite/g++.dg/reflect/current_function2.C.jj 2026-03-27 
16:43:41.361420414 +0100
+++ gcc/testsuite/g++.dg/reflect/current_function2.C    2026-03-27 
17:26:07.718334831 +0100
@@ -0,0 +1,78 @@
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+// Test std::meta::access_context.
+
+#include <meta>
+
+using namespace std::meta;
+
+constexpr auto a = current_function ();                // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+
+consteval info
+foo (info x = current_function ())
+{
+  return x;
+}
+
+static_assert (foo (^^std) == ^^std);
+constexpr auto b = foo ();                     // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+
+namespace N
+{
+  constexpr auto c = current_function ();      // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+  constexpr auto d = foo ();                   // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+  namespace M
+  {
+    constexpr auto e = current_function ();    // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+    constexpr auto f = foo ();                 // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+    consteval {
+      constexpr auto g = current_function ();  // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+      consteval {
+       constexpr auto h = foo ();              // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+      }
+    }
+  }
+}
+
+struct T
+{
+  static_assert (current_function () != ^^T);  // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+                                               // { dg-error "non-constant 
condition for static assertion" "" { target *-*-* } .-1 }
+  static_assert (foo () != ^^T);               // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+  info t = current_function ();                        // { dg-error 
"non-constant condition for static assertion" "" { target *-*-* } .-1 }
+};
+
+struct U
+{
+  consteval U () {}
+  info u = current_function ();
+};
+
+struct V : U
+{
+  using U::U;
+  info v = current_function ();
+  consteval {
+    static_assert (current_function () != ^^V);                // { dg-error 
"uncaught exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current 
scope does not represent a function'" }
+    consteval {                                                // { dg-error 
"non-constant condition for static assertion" "" { target *-*-* } .-1 }
+      static_assert (current_function () != ^^V);      // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+    }                                                  // { dg-error 
"non-constant condition for static assertion" "" { target *-*-* } .-1 }
+  }
+};
+
+consteval {
+  static_assert (current_function () != ^^::);         // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+  consteval {                                          // { dg-error 
"non-constant condition for static assertion" "" { target *-*-* } .-1 }
+    static_assert (current_function () != ^^::);       // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a function'" }
+  }                                                    // { dg-error 
"non-constant condition for static assertion" "" { target *-*-* } .-1 }
+}
+
+namespace O
+{
+  int a[2];
+  auto
+  foo () -> int (&) [current_function () != ^^O ? 2 : 3]       // { dg-error 
"size of array is not an integral constant-expression" }
+  {
+    return a;                                          // { dg-error "invalid 
initialization of reference of type" }
+  }
+}
--- gcc/testsuite/g++.dg/reflect/current_class1.C.jj    2026-03-27 
16:15:47.965107295 +0100
+++ gcc/testsuite/g++.dg/reflect/current_class1.C       2026-03-27 
17:14:36.688766585 +0100
@@ -0,0 +1,70 @@
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+// Test std::meta::current_class.
+
+#include <meta>
+
+using namespace std::meta;
+
+consteval info
+foo (info x = current_class ())
+{
+  try
+    {
+      current_class ();
+    }
+  catch (const std::meta::exception &)
+    {
+      return x;
+    }
+  throw 1;
+}
+
+static_assert (foo (^^std) == ^^std);
+
+struct T
+{
+  static_assert (current_class () == ^^T);
+  static_assert (foo () == ^^T);
+  info t = current_class ();
+};
+
+struct U
+{
+  static_assert (current_class () == ^^U);
+  static_assert (foo () == ^^U);
+  consteval U () {}
+  info u = current_class ();
+};
+
+struct V : U
+{
+  static_assert (current_class () == ^^V);
+  static_assert (foo () == ^^V);
+  using U::U;
+  consteval {
+    static_assert (current_class () == ^^V);
+    static_assert (foo () == ^^V);
+    consteval {
+      static_assert (current_class () == ^^V);
+      static_assert (foo () == ^^V);
+    }
+  }
+  void baz ()
+  {
+    static_assert (current_class () == ^^V);
+    static_assert (foo () == ^^V);
+    static_assert (T {}.t == ^^V);
+    static_assert (U {}.u == ^^U);
+  }
+};
+
+void
+bar ()
+{
+  auto l = [] () {
+    int v = 0;
+    static_assert (current_class () == parent_of (parent_of (^^v)));
+    static_assert (parent_of (current_class ()) == ^^bar);
+  };
+}
--- gcc/testsuite/g++.dg/reflect/current_class2.C.jj    2026-03-27 
16:49:27.897688548 +0100
+++ gcc/testsuite/g++.dg/reflect/current_class2.C       2026-03-27 
17:18:09.234250461 +0100
@@ -0,0 +1,73 @@
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+// Test std::meta::current_class.
+
+#include <meta>
+
+using namespace std::meta;
+
+constexpr auto a = current_class ();           // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+
+consteval info
+foo (info x = current_class ())
+{
+  return x;
+}
+
+void
+qux ()
+{
+  static constexpr auto a = current_class ();  // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+}
+
+static_assert (foo (^^std) == ^^std);
+constexpr auto b = foo ();                     // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+
+namespace N
+{
+  struct S {};
+  constexpr auto c = foo ();                   // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+  namespace M
+  {
+    constexpr auto d = current_class ();       // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+    consteval {
+      auto e = foo ();
+      consteval {
+       auto f = current_class ();
+      }                                                // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+    }                                          // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+  }
+}
+
+struct T
+{
+  info t = current_class ();
+};
+
+void
+bar ()
+{
+  static constexpr auto g = current_class ();  // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+  static constexpr auto h = T{}.t;             // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+  auto l2 = [] () -> int (&) [current_class () != ^^bar ? 2 : 3] {     // { 
dg-error "size of array is not an integral constant-expression" }
+    static int a[2];
+    return a;                                  // { dg-error "invalid 
initialization of reference of type" }
+  };
+}
+
+consteval {
+  auto a = current_class ();
+  consteval {
+    auto b = foo ();
+  }                                            // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+}                                              // { dg-error "uncaught 
exception of type 'std::meta::exception'; 'what\\\(\\\)': 'current scope does 
not represent a class nor a member function'" }
+
+namespace O
+{
+  int a[2];
+  auto
+  foo () -> int (&) [current_class () != ^^O ? 2 : 3]  // { dg-error "size of 
array is not an integral constant-expression" }
+  {
+    return a;                                          // { dg-error "invalid 
initialization of reference of type" }
+  }
+}
--- gcc/testsuite/g++.dg/reflect/current_namespace1.C.jj        2026-03-27 
16:01:38.206095962 +0100
+++ gcc/testsuite/g++.dg/reflect/current_namespace1.C   2026-03-27 
16:38:23.647675541 +0100
@@ -0,0 +1,93 @@
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+// Test std::meta::current_namespace.
+
+#include <meta>
+
+using namespace std::meta;
+
+static_assert (current_namespace () == ^^::);
+
+consteval info
+foo (info x = current_namespace ())
+{
+  static_assert (current_namespace () == ^^::);
+  return x;
+}
+
+static_assert (foo (^^std) == ^^std);
+static_assert (foo () == ^^::);
+
+namespace N
+{
+  static_assert (foo () == ^^N);
+  static_assert (current_namespace () == ^^N);
+  namespace M
+  {
+    static_assert (foo () == ^^M);
+    static_assert (current_namespace () == ^^M);
+    consteval {
+      static_assert (current_namespace () == ^^M);
+      consteval {
+       static_assert (current_namespace () == ^^M);
+      }
+    }
+  }
+}
+
+struct T
+{
+  static_assert (current_namespace () == ^^::);
+  static_assert (foo () == ^^::);
+  info t = current_namespace ();
+};
+
+namespace O
+{
+  struct T
+  {
+    static_assert (current_namespace () == ^^O);
+    static_assert (foo () == ^^O);
+    info t = current_namespace ();
+  };
+}
+
+void
+bar ()
+{
+  static_assert (current_namespace () == ^^::);
+  static_assert (T {}.t == ^^::);
+  static_assert (O::T {}.t == ^^::);
+  static_assert (foo (^^foo) == ^^foo);
+  static_assert (foo () == ^^::);
+}
+
+namespace P
+{
+  void
+  bar ()
+  {
+    static_assert (current_namespace () == ^^P);
+    static_assert (T {}.t == ^^P);
+    static_assert (O::T {}.t == ^^P);
+    static_assert (foo (^^foo) == ^^foo);
+    static_assert (foo () == ^^P);
+  }
+}
+
+consteval {
+  static_assert (current_namespace () == ^^::);
+  consteval {
+    static_assert (current_namespace () == ^^::);
+  }
+}
+
+namespace Q
+{
+  int a[2];
+  auto
+  foo () -> int (&) [current_namespace () == ^^Q ? 2 : 3]
+  {
+    return a;
+  }
+}
--- libstdc++-v3/include/std/meta.jj    2026-03-27 10:17:22.940187041 +0100
+++ libstdc++-v3/include/std/meta       2026-03-27 15:09:54.057090580 +0100
@@ -342,6 +342,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     consteval bool has_inaccessible_bases(info, access_context);
     consteval bool has_inaccessible_subobjects(info, access_context);
 
+    // [meta.reflection.scope], scope identification
+    consteval info current_function();
+    consteval info current_class();
+    consteval info current_namespace();
+
     // [meta.reflection.member.queries], reflection member queries
     consteval vector<info> members_of(info, access_context);
     consteval vector<info> bases_of(info, access_context);
--- libstdc++-v3/src/c++23/std.cc.in.jj 2026-03-27 10:17:22.970186552 +0100
+++ libstdc++-v3/src/c++23/std.cc.in    2026-03-27 15:11:02.064966469 +0100
@@ -2195,6 +2195,9 @@ export namespace std
     using std::meta::has_inaccessible_nonstatic_data_members;
     using std::meta::has_inaccessible_bases;
     using std::meta::has_inaccessible_subobjects;
+    using std::meta::current_function;
+    using std::meta::current_class;
+    using std::meta::current_namespace;
     using std::meta::members_of;
     using std::meta::bases_of;
     using std::meta::static_data_members_of;
--- gcc/cp/metafns.h.jj 2026-03-27 10:17:14.022332567 +0100
+++ gcc/cp/metafns.h    2026-03-30 23:55:47.453025966 +0200
@@ -147,6 +147,9 @@ enum metafn_code {
   METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS,
   METAFN_HAS_INACCESSIBLE_BASES,
   METAFN_HAS_INACCESSIBLE_SUBOBJECTS,
+  METAFN_CURRENT_FUNCTION,
+  METAFN_CURRENT_CLASS,
+  METAFN_CURRENT_NAMESPACE,
   METAFN_MEMBERS_OF,
   METAFN_BASES_OF,
   METAFN_STATIC_DATA_MEMBERS_OF,
@@ -391,6 +394,8 @@ enum metafn_kind {
   METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET
     = (METAFN_KIND_ARGS_TINFO_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_BOOL,
+  METAFN_KIND_INFO_VOID
+    = (METAFN_KIND_ARGS_VOID << METAFN_KIND_SHIFT) | METAFN_KIND_RET_INFO,
   METAFN_KIND_INFO_INFO
     = (METAFN_KIND_ARGS_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_RET_INFO,
   METAFN_KIND_INFO_TINFO
@@ -472,7 +477,7 @@ enum metafn_kind {
     = (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)
       | METAFN_KIND_RET_U8STRING_VIEW
 };
-#line 448 "metafns.gperf"
+#line 453 "metafns.gperf"
 struct metafn_info
 {
   /* A name within "std::meta::" (or "std::meta::access_context::").  */
@@ -484,7 +489,7 @@ struct metafn_info
   /* METAFN_KIND_ kind of arguments and return type.  */
   metafn_kind kind;
 };
-/* maximum key range = 879, duplicates = 0 */
+/* maximum key range = 782, duplicates = 0 */
 
 class metafn_lookup
 {
@@ -499,32 +504,32 @@ metafn_lookup::hash (const char *str, si
 {
   static const unsigned short asso_values[] =
     {
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918,   0, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918,   5, 100, 145,  10,  45,
-      165,   5,  55,  50,  72,  20, 248,   0,  55, 105,
-        0, 205,   0,  45,  35,  55,  25, 195,   5, 199,
-       20, 311,  80, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918, 918, 918, 918,
-      918, 918, 918, 918, 918, 918, 918
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821,   0, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821,   5,  45, 145,  10,  45,
+      190,   5,  55,  35, 115,  20, 346,   0,  60, 110,
+        0, 219,   0,  40,  35,  20,  25, 160,   5,  80,
+        0, 183,  45, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821, 821, 821, 821,
+      821, 821, 821, 821, 821, 821, 821
     };
   unsigned int hval = len;
 
@@ -583,11 +588,11 @@ metafn_lookup::find (const char *str, si
 {
   enum
     {
-      TOTAL_KEYWORDS = 234,
+      TOTAL_KEYWORDS = 237,
       MIN_WORD_LENGTH = 4,
       MAX_WORD_LENGTH = 40,
       MIN_HASH_VALUE = 39,
-      MAX_HASH_VALUE = 917
+      MAX_HASH_VALUE = 820
     };
 
 #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined 
__clang__ && __clang_major__ >= 3)
@@ -596,474 +601,480 @@ metafn_lookup::find (const char *str, si
 #endif
   static const struct metafn_info wordlist[] =
     {
-#line 648 "metafns.gperf"
+#line 656 "metafns.gperf"
       {"rank", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},
-#line 578 "metafns.gperf"
+#line 586 "metafns.gperf"
       {"is_void_type", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 583 "metafns.gperf"
+#line 591 "metafns.gperf"
       {"is_pointer_type", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 489 "metafns.gperf"
+#line 494 "metafns.gperf"
       {"is_volatile", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},
-#line 535 "metafns.gperf"
+#line 540 "metafns.gperf"
       {"is_value", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},
-#line 542 "metafns.gperf"
+#line 547 "metafns.gperf"
       {"is_base", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},
-#line 503 "metafns.gperf"
+#line 479 "metafns.gperf"
+      {"is_private", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},
+#line 508 "metafns.gperf"
       {"is_variable", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},
-#line 654 "metafns.gperf"
+#line 662 "metafns.gperf"
       {"is_nothrow_convertible_type", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 633 "metafns.gperf"
+#line 641 "metafns.gperf"
       {"is_nothrow_constructible_type", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 659 "metafns.gperf"
+#line 667 "metafns.gperf"
       {"is_nothrow_invocable_type", METAFN_IS_NOTHROW_INVOCABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 638 "metafns.gperf"
+#line 646 "metafns.gperf"
       {"is_nothrow_copy_assignable_type", 
METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 660 "metafns.gperf"
+#line 668 "metafns.gperf"
       {"is_nothrow_invocable_r_type", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},
-#line 635 "metafns.gperf"
+#line 643 "metafns.gperf"
       {"is_nothrow_copy_constructible_type", 
METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 651 "metafns.gperf"
+#line 659 "metafns.gperf"
       {"is_base_of_type", METAFN_IS_BASE_OF_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 639 "metafns.gperf"
+#line 647 "metafns.gperf"
       {"is_nothrow_move_assignable_type", 
METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 636 "metafns.gperf"
+#line 658 "metafns.gperf"
+      {"is_same_type", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 644 "metafns.gperf"
       {"is_nothrow_move_constructible_type", 
METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 527 "metafns.gperf"
+#line 532 "metafns.gperf"
       {"is_variable_template", METAFN_IS_VARIABLE_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 579 "metafns.gperf"
+#line 587 "metafns.gperf"
       {"is_null_pointer_type", METAFN_IS_NULL_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 472 "metafns.gperf"
+#line 645 "metafns.gperf"
+      {"is_nothrow_assignable_type", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 650 "metafns.gperf"
+      {"is_nothrow_destructible_type", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 477 "metafns.gperf"
       {"is_public", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},
-#line 484 "metafns.gperf"
+#line 489 "metafns.gperf"
       {"is_noexcept", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},
-#line 567 "metafns.gperf"
+#line 575 "metafns.gperf"
       {"extract", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},
-#line 687 "metafns.gperf"
+#line 695 "metafns.gperf"
       {"variant_alternative", METAFN_VARIANT_ALTERNATIVE, 
METAFN_KIND_INFO_SIZE_T_TINFO,},
-#line 605 "metafns.gperf"
+#line 613 "metafns.gperf"
       {"is_polymorphic_type", METAFN_IS_POLYMORPHIC_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 474 "metafns.gperf"
-      {"is_private", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},
-#line 508 "metafns.gperf"
+#line 513 "metafns.gperf"
       {"is_function", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},
-#line 505 "metafns.gperf"
+#line 510 "metafns.gperf"
       {"is_namespace", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},
-#line 656 "metafns.gperf"
+#line 466 "metafns.gperf"
+      {"symbol_of", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},
+#line 664 "metafns.gperf"
       {"is_pointer_interconvertible_base_of_type", 
METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 612 "metafns.gperf"
+#line 620 "metafns.gperf"
       {"is_bounded_array_type", METAFN_IS_BOUNDED_ARRAY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 488 "metafns.gperf"
+#line 694 "metafns.gperf"
+      {"variant_size", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},
+#line 493 "metafns.gperf"
       {"is_const", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},
-#line 534 "metafns.gperf"
+#line 539 "metafns.gperf"
       {"is_concept", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},
-#line 650 "metafns.gperf"
-      {"is_same_type", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 558 "metafns.gperf"
+#line 509 "metafns.gperf"
+      {"is_type", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},
+#line 566 "metafns.gperf"
       {"bases_of", METAFN_BASES_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 497 "metafns.gperf"
-      {"has_module_linkage", METAFN_HAS_MODULE_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 526 "metafns.gperf"
+#line 531 "metafns.gperf"
       {"is_function_template", METAFN_IS_FUNCTION_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 637 "metafns.gperf"
-      {"is_nothrow_assignable_type", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 509 "metafns.gperf"
+#line 514 "metafns.gperf"
       {"is_conversion_function", METAFN_IS_CONVERSION_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 642 "metafns.gperf"
-      {"is_nothrow_destructible_type", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 653 "metafns.gperf"
+#line 628 "metafns.gperf"
+      {"is_copy_assignable_type", METAFN_IS_COPY_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 661 "metafns.gperf"
       {"is_convertible_type", METAFN_IS_CONVERTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 643 "metafns.gperf"
+#line 651 "metafns.gperf"
       {"is_implicit_lifetime_type", METAFN_IS_IMPLICIT_LIFETIME_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 525 "metafns.gperf"
+#line 696 "metafns.gperf"
+      {"type_order", METAFN_TYPE_ORDER, 
METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},
+#line 530 "metafns.gperf"
       {"is_template", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 634 "metafns.gperf"
+#line 642 "metafns.gperf"
       {"is_nothrow_default_constructible_type", 
METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 568 "metafns.gperf"
+#line 576 "metafns.gperf"
       {"can_substitute", METAFN_CAN_SUBSTITUTE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
-#line 530 "metafns.gperf"
+#line 535 "metafns.gperf"
       {"is_conversion_function_template", 
METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 461 "metafns.gperf"
-      {"symbol_of", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},
-#line 617 "metafns.gperf"
+#line 523 "metafns.gperf"
+      {"is_copy_assignment", METAFN_IS_COPY_ASSIGNMENT, 
METAFN_KIND_BOOL_INFO,},
+#line 625 "metafns.gperf"
       {"is_copy_constructible_type", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 686 "metafns.gperf"
-      {"variant_size", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},
-#line 504 "metafns.gperf"
-      {"is_type", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},
-#line 615 "metafns.gperf"
+#line 572 "metafns.gperf"
+      {"size_of", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},
+#line 474 "metafns.gperf"
+      {"type_of", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},
+#line 511 "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 495 "metafns.gperf"
-      {"has_automatic_storage_duration", 
METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},
-#line 620 "metafns.gperf"
-      {"is_copy_assignable_type", METAFN_IS_COPY_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 684 "metafns.gperf"
-      {"tuple_size", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},
-#line 524 "metafns.gperf"
+#line 631 "metafns.gperf"
+      {"is_swappable_type", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 502 "metafns.gperf"
+      {"has_module_linkage", METAFN_HAS_MODULE_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
+#line 529 "metafns.gperf"
       {"is_vararg_function", METAFN_IS_VARARG_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 515 "metafns.gperf"
+#line 520 "metafns.gperf"
       {"is_copy_constructor", METAFN_IS_COPY_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
-#line 551 "metafns.gperf"
+#line 692 "metafns.gperf"
+      {"tuple_size", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},
+#line 556 "metafns.gperf"
       {"variable_of", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},
-#line 544 "metafns.gperf"
-      {"has_parent", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},
-#line 592 "metafns.gperf"
+#line 600 "metafns.gperf"
       {"is_reflection_type", METAFN_IS_REFLECTION_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 595 "metafns.gperf"
+#line 574 "metafns.gperf"
+      {"bit_size_of", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},
+#line 603 "metafns.gperf"
       {"is_fundamental_type", METAFN_IS_FUNDAMENTAL_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 655 "metafns.gperf"
+#line 663 "metafns.gperf"
       {"is_layout_compatible_type", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 566 "metafns.gperf"
-      {"bit_size_of", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},
-#line 518 "metafns.gperf"
-      {"is_copy_assignment", METAFN_IS_COPY_ASSIGNMENT, 
METAFN_KIND_BOOL_INFO,},
-#line 691 "metafns.gperf"
+#line 699 "metafns.gperf"
       {"current", METAFN_ACCESS_CONTEXT_CURRENT, 
METAFN_KIND_ACCESS_CONTEXT_VOID,},
-#line 678 "metafns.gperf"
-      {"common_type", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},
-#line 533 "metafns.gperf"
+#line 562 "metafns.gperf"
+      {"current_function", METAFN_CURRENT_FUNCTION, METAFN_KIND_INFO_VOID,},
+#line 538 "metafns.gperf"
       {"is_constructor_template", METAFN_IS_CONSTRUCTOR_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 688 "metafns.gperf"
-      {"type_order", METAFN_TYPE_ORDER, 
METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},
-#line 679 "metafns.gperf"
+#line 686 "metafns.gperf"
+      {"common_type", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},
+#line 629 "metafns.gperf"
+      {"is_move_assignable_type", METAFN_IS_MOVE_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 687 "metafns.gperf"
       {"common_reference", METAFN_COMMON_REFERENCE, 
METAFN_KIND_INFO_REFLECTION_RANGET,},
-#line 543 "metafns.gperf"
-      {"has_default_member_initializer", 
METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},
-#line 685 "metafns.gperf"
+#line 693 "metafns.gperf"
       {"tuple_element", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},
-#line 572 "metafns.gperf"
+#line 580 "metafns.gperf"
       {"reflect_function", METAFN_REFLECT_FUNCTION, 
METAFN_KIND_INFO_TEMPLATE_PARM_REF,},
-#line 523 "metafns.gperf"
-      {"has_default_argument", METAFN_HAS_DEFAULT_ARGUMENT, 
METAFN_KIND_BOOL_INFO,},
-#line 618 "metafns.gperf"
-      {"is_move_constructible_type", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 469 "metafns.gperf"
-      {"type_of", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},
-#line 513 "metafns.gperf"
+#line 500 "metafns.gperf"
+      {"has_automatic_storage_duration", 
METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},
+#line 524 "metafns.gperf"
+      {"is_move_assignment", METAFN_IS_MOVE_ASSIGNMENT, 
METAFN_KIND_BOOL_INFO,},
+#line 518 "metafns.gperf"
       {"is_constructor", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},
-#line 623 "metafns.gperf"
-      {"is_swappable_type", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 641 "metafns.gperf"
+#line 549 "metafns.gperf"
+      {"has_parent", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},
+#line 626 "metafns.gperf"
+      {"is_move_constructible_type", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 649 "metafns.gperf"
       {"is_nothrow_swappable_type", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 593 "metafns.gperf"
+#line 610 "metafns.gperf"
+      {"is_trivially_copyable_type", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 601 "metafns.gperf"
       {"is_reference_type", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 500 "metafns.gperf"
-      {"has_linkage", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},
-#line 640 "metafns.gperf"
+#line 593 "metafns.gperf"
+      {"is_rvalue_reference_type", METAFN_IS_RVALUE_REFERENCE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 648 "metafns.gperf"
       {"is_nothrow_swappable_with_type", 
METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 599 "metafns.gperf"
-      {"is_member_pointer_type", METAFN_IS_MEMBER_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 621 "metafns.gperf"
-      {"is_move_assignable_type", METAFN_IS_MOVE_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 506 "metafns.gperf"
-      {"is_type_alias", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},
-#line 516 "metafns.gperf"
-      {"is_move_constructor", METAFN_IS_MOVE_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
-#line 550 "metafns.gperf"
-      {"parameters_of", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
-#line 564 "metafns.gperf"
-      {"size_of", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},
-#line 519 "metafns.gperf"
-      {"is_move_assignment", METAFN_IS_MOVE_ASSIGNMENT, 
METAFN_KIND_BOOL_INFO,},
-#line 619 "metafns.gperf"
-      {"is_assignable_type", METAFN_IS_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 538 "metafns.gperf"
-      {"is_class_member", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},
-#line 602 "metafns.gperf"
-      {"is_trivially_copyable_type", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 517 "metafns.gperf"
-      {"is_assignment", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},
-#line 539 "metafns.gperf"
-      {"is_namespace_member", METAFN_IS_NAMESPACE_MEMBER, 
METAFN_KIND_BOOL_INFO,},
-#line 557 "metafns.gperf"
-      {"members_of", METAFN_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 625 "metafns.gperf"
+#line 633 "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_trivially_copy_assignable_type", 
METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 627 "metafns.gperf"
+#line 688 "metafns.gperf"
+      {"underlying_type", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},
+#line 635 "metafns.gperf"
       {"is_trivially_copy_constructible_type", 
METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 649 "metafns.gperf"
-      {"extent", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},
-#line 588 "metafns.gperf"
-      {"is_enum_type", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 607 "metafns.gperf"
+      {"is_member_pointer_type", METAFN_IS_MEMBER_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 577 "metafns.gperf"
+      {"substitute", METAFN_SUBSTITUTE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
+#line 555 "metafns.gperf"
+      {"parameters_of", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
+#line 521 "metafns.gperf"
+      {"is_move_constructor", METAFN_IS_MOVE_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
 #line 548 "metafns.gperf"
-      {"template_of", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},
-#line 528 "metafns.gperf"
-      {"is_class_template", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 512 "metafns.gperf"
+      {"has_default_member_initializer", 
METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},
+#line 517 "metafns.gperf"
       {"is_special_member_function", METAFN_IS_SPECIAL_MEMBER_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 473 "metafns.gperf"
-      {"is_protected", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},
-#line 540 "metafns.gperf"
-      {"is_nonstatic_data_member", METAFN_IS_NONSTATIC_DATA_MEMBER, 
METAFN_KIND_BOOL_INFO,},
-#line 682 "metafns.gperf"
+#line 612 "metafns.gperf"
+      {"is_empty_type", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 627 "metafns.gperf"
+      {"is_assignable_type", METAFN_IS_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 592 "metafns.gperf"
+      {"is_lvalue_reference_type", METAFN_IS_LVALUE_REFERENCE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 528 "metafns.gperf"
+      {"has_default_argument", METAFN_HAS_DEFAULT_ARGUMENT, 
METAFN_KIND_BOOL_INFO,},
+#line 690 "metafns.gperf"
       {"unwrap_reference", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},
-#line 502 "metafns.gperf"
-      {"is_enumerable_type", METAFN_IS_ENUMERABLE_TYPE, 
METAFN_KIND_BOOL_INFO,},
-#line 594 "metafns.gperf"
+#line 522 "metafns.gperf"
+      {"is_assignment", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},
+#line 609 "metafns.gperf"
+      {"is_volatile_type", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 543 "metafns.gperf"
+      {"is_class_member", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},
+#line 602 "metafns.gperf"
       {"is_arithmetic_type", METAFN_IS_ARITHMETIC_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 545 "metafns.gperf"
-      {"parent_of", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},
-#line 476 "metafns.gperf"
-      {"is_pure_virtual", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},
-#line 675 "metafns.gperf"
-      {"add_pointer", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},
-#line 616 "metafns.gperf"
-      {"is_default_constructible_type", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 680 "metafns.gperf"
-      {"underlying_type", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},
-#line 521 "metafns.gperf"
-      {"is_function_parameter", METAFN_IS_FUNCTION_PARAMETER, 
METAFN_KIND_BOOL_INFO,},
-#line 464 "metafns.gperf"
+#line 544 "metafns.gperf"
+      {"is_namespace_member", METAFN_IS_NAMESPACE_MEMBER, 
METAFN_KIND_BOOL_INFO,},
+#line 565 "metafns.gperf"
+      {"members_of", METAFN_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
+#line 478 "metafns.gperf"
+      {"is_protected", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},
+#line 505 "metafns.gperf"
+      {"has_linkage", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},
+#line 469 "metafns.gperf"
       {"identifier_of", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},
-#line 597 "metafns.gperf"
-      {"is_scalar_type", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 669 "metafns.gperf"
+#line 677 "metafns.gperf"
       {"add_rvalue_reference", METAFN_ADD_RVALUE_REFERENCE, 
METAFN_KIND_INFO_TINFO,},
-#line 490 "metafns.gperf"
-      {"is_mutable_member", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},
-#line 507 "metafns.gperf"
+#line 553 "metafns.gperf"
+      {"template_of", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},
+#line 512 "metafns.gperf"
       {"is_namespace_alias", METAFN_IS_NAMESPACE_ALIAS, 
METAFN_KIND_BOOL_INFO,},
-#line 631 "metafns.gperf"
+#line 657 "metafns.gperf"
+      {"extent", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},
+#line 596 "metafns.gperf"
+      {"is_enum_type", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 533 "metafns.gperf"
+      {"is_class_template", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
+#line 608 "metafns.gperf"
+      {"is_const_type", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 564 "metafns.gperf"
+      {"current_namespace", METAFN_CURRENT_NAMESPACE, METAFN_KIND_INFO_VOID,},
+#line 488 "metafns.gperf"
+      {"is_explicit", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},
+#line 683 "metafns.gperf"
+      {"add_pointer", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},
+#line 639 "metafns.gperf"
       {"is_trivially_move_assignable_type", 
METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 628 "metafns.gperf"
+#line 506 "metafns.gperf"
+      {"is_complete_type", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},
+#line 636 "metafns.gperf"
       {"is_trivially_move_constructible_type", 
METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 514 "metafns.gperf"
-      {"is_default_constructor", METAFN_IS_DEFAULT_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
-#line 486 "metafns.gperf"
+#line 605 "metafns.gperf"
+      {"is_scalar_type", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 481 "metafns.gperf"
+      {"is_pure_virtual", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},
+#line 526 "metafns.gperf"
+      {"is_function_parameter", METAFN_IS_FUNCTION_PARAMETER, 
METAFN_KIND_BOOL_INFO,},
+#line 507 "metafns.gperf"
+      {"is_enumerable_type", METAFN_IS_ENUMERABLE_TYPE, 
METAFN_KIND_BOOL_INFO,},
+#line 599 "metafns.gperf"
+      {"is_function_type", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 550 "metafns.gperf"
+      {"parent_of", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},
+#line 545 "metafns.gperf"
+      {"is_nonstatic_data_member", METAFN_IS_NONSTATIC_DATA_MEMBER, 
METAFN_KIND_BOOL_INFO,},
+#line 542 "metafns.gperf"
+      {"is_structured_binding", METAFN_IS_STRUCTURED_BINDING, 
METAFN_KIND_BOOL_INFO,},
+#line 495 "metafns.gperf"
+      {"is_mutable_member", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},
+#line 637 "metafns.gperf"
+      {"is_trivially_assignable_type", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 624 "metafns.gperf"
+      {"is_default_constructible_type", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 527 "metafns.gperf"
+      {"is_explicit_object_parameter", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, 
METAFN_KIND_BOOL_INFO,},
+#line 673 "metafns.gperf"
+      {"add_volatile", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},
+#line 563 "metafns.gperf"
+      {"current_class", METAFN_CURRENT_CLASS, METAFN_KIND_INFO_VOID,},
+#line 570 "metafns.gperf"
+      {"enumerators_of", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
+#line 491 "metafns.gperf"
       {"is_enumerator", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},
-#line 536 "metafns.gperf"
+#line 541 "metafns.gperf"
       {"is_object", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},
-#line 608 "metafns.gperf"
-      {"is_aggregate_type", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 520 "metafns.gperf"
-      {"is_destructor", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},
-#line 587 "metafns.gperf"
+#line 472 "metafns.gperf"
+      {"u8display_string_of", METAFN_U8DISPLAY_STRING_OF, 
METAFN_KIND_U8STRING_VIEW_INFO,},
+#line 595 "metafns.gperf"
       {"is_member_function_pointer_type", 
METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 596 "metafns.gperf"
+#line 652 "metafns.gperf"
+      {"has_virtual_destructor", METAFN_HAS_VIRTUAL_DESTRUCTOR, 
METAFN_KIND_BOOL_TINFO,},
+#line 655 "metafns.gperf"
+      {"reference_converts_from_temporary", 
METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 519 "metafns.gperf"
+      {"is_default_constructor", METAFN_IS_DEFAULT_CONSTRUCTOR, 
METAFN_KIND_BOOL_INFO,},
+#line 604 "metafns.gperf"
       {"is_object_type", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 569 "metafns.gperf"
-      {"substitute", METAFN_SUBSTITUTE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
-#line 585 "metafns.gperf"
-      {"is_rvalue_reference_type", METAFN_IS_RVALUE_REFERENCE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 666 "metafns.gperf"
-      {"add_cv", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},
-#line 570 "metafns.gperf"
+#line 578 "metafns.gperf"
       {"reflect_constant", METAFN_REFLECT_CONSTANT, 
METAFN_KIND_INFO_TEMPLATE_PARM,},
-#line 629 "metafns.gperf"
-      {"is_trivially_assignable_type", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 475 "metafns.gperf"
-      {"is_virtual", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},
-#line 493 "metafns.gperf"
-      {"has_static_storage_duration", METAFN_HAS_STATIC_STORAGE_DURATION, 
METAFN_KIND_BOOL_INFO,},
-#line 668 "metafns.gperf"
+#line 525 "metafns.gperf"
+      {"is_destructor", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},
+#line 482 "metafns.gperf"
+      {"is_override", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},
+#line 654 "metafns.gperf"
+      {"reference_constructs_from_temporary", 
METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},
+#line 557 "metafns.gperf"
+      {"return_type_of", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},
+#line 676 "metafns.gperf"
       {"add_lvalue_reference", METAFN_ADD_LVALUE_REFERENCE, 
METAFN_KIND_INFO_TINFO,},
-#line 584 "metafns.gperf"
-      {"is_lvalue_reference_type", METAFN_IS_LVALUE_REFERENCE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 562 "metafns.gperf"
-      {"enumerators_of", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
-#line 624 "metafns.gperf"
-      {"is_destructible_type", METAFN_IS_DESTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 549 "metafns.gperf"
+#line 476 "metafns.gperf"
+      {"constant_of", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},
+#line 671 "metafns.gperf"
+      {"remove_cv", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},
+#line 640 "metafns.gperf"
+      {"is_trivially_destructible_type", 
METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 674 "metafns.gperf"
+      {"add_cv", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},
+#line 616 "metafns.gperf"
+      {"is_aggregate_type", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 581 "metafns.gperf"
+      {"reflect_constant_string", METAFN_REFLECT_CONSTANT_STRING, 
METAFN_KIND_INFO_INPUT_RANGE,},
+#line 554 "metafns.gperf"
       {"template_arguments_of", METAFN_TEMPLATE_ARGUMENTS_OF, 
METAFN_KIND_VECTOR_INFO_INFO,},
-#line 657 "metafns.gperf"
+#line 569 "metafns.gperf"
+      {"subobjects_of", METAFN_SUBOBJECTS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
+#line 571 "metafns.gperf"
+      {"offset_of", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},
+#line 634 "metafns.gperf"
+      {"is_trivially_default_constructible_type", 
METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 675 "metafns.gperf"
+      {"remove_reference", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},
+#line 534 "metafns.gperf"
+      {"is_alias_template", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
+#line 679 "metafns.gperf"
+      {"make_unsigned", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},
+#line 665 "metafns.gperf"
       {"is_invocable_type", METAFN_IS_INVOCABLE_TYPE, 
METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},
-#line 664 "metafns.gperf"
+#line 622 "metafns.gperf"
+      {"is_scoped_enum_type", METAFN_IS_SCOPED_ENUM_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 546 "metafns.gperf"
+      {"is_static_member", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},
+#line 672 "metafns.gperf"
       {"add_const", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},
-#line 529 "metafns.gperf"
-      {"is_alias_template", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},
-#line 604 "metafns.gperf"
-      {"is_empty_type", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},
 #line 632 "metafns.gperf"
-      {"is_trivially_destructible_type", 
METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
+      {"is_destructible_type", METAFN_IS_DESTRUCTIBLE_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 598 "metafns.gperf"
+      {"is_class_type", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 680 "metafns.gperf"
+      {"remove_extent", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},
+#line 666 "metafns.gperf"
+      {"is_invocable_r_type", METAFN_IS_INVOCABLE_R_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},
+#line 558 "metafns.gperf"
+      {"is_accessible", METAFN_IS_ACCESSIBLE, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
+#line 465 "metafns.gperf"
+      {"operator_of", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},
+#line 590 "metafns.gperf"
+      {"is_array_type", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 669 "metafns.gperf"
+      {"remove_const", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},
+#line 497 "metafns.gperf"
+      {"is_rvalue_reference_qualified", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, 
METAFN_KIND_BOOL_INFO,},
 #line 498 "metafns.gperf"
+      {"has_static_storage_duration", METAFN_HAS_STATIC_STORAGE_DURATION, 
METAFN_KIND_BOOL_INFO,},
+#line 681 "metafns.gperf"
+      {"remove_all_extents", METAFN_REMOVE_ALL_EXTENTS, 
METAFN_KIND_INFO_TINFO,},
+#line 503 "metafns.gperf"
       {"has_external_linkage", METAFN_HAS_EXTERNAL_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 553 "metafns.gperf"
-      {"is_accessible", METAFN_IS_ACCESSIBLE, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 658 "metafns.gperf"
-      {"is_invocable_r_type", METAFN_IS_INVOCABLE_R_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},
-#line 652 "metafns.gperf"
+#line 684 "metafns.gperf"
+      {"remove_cvref", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},
+#line 492 "metafns.gperf"
+      {"is_annotation", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},
+#line 682 "metafns.gperf"
+      {"remove_pointer", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},
+#line 496 "metafns.gperf"
+      {"is_lvalue_reference_qualified", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, 
METAFN_KIND_BOOL_INFO,},
+#line 660 "metafns.gperf"
       {"is_virtual_base_of_type", METAFN_IS_VIRTUAL_BASE_OF_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 601 "metafns.gperf"
-      {"is_volatile_type", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 573 "metafns.gperf"
-      {"reflect_constant_string", METAFN_REFLECT_CONSTANT_STRING, 
METAFN_KIND_INFO_INPUT_RANGE,},
-#line 626 "metafns.gperf"
-      {"is_trivially_default_constructible_type", 
METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 532 "metafns.gperf"
-      {"is_literal_operator_template", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 460 "metafns.gperf"
-      {"operator_of", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},
-#line 610 "metafns.gperf"
+#line 584 "metafns.gperf"
+      {"is_data_member_spec", METAFN_IS_DATA_MEMBER_SPEC, 
METAFN_KIND_BOOL_INFO,},
+#line 618 "metafns.gperf"
       {"is_signed_type", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},
 #line 614 "metafns.gperf"
-      {"is_scoped_enum_type", METAFN_IS_SCOPED_ENUM_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 622 "metafns.gperf"
-      {"is_swappable_with_type", METAFN_IS_SWAPPABLE_WITH_TYPE, 
METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 561 "metafns.gperf"
-      {"subobjects_of", METAFN_SUBOBJECTS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 563 "metafns.gperf"
-      {"offset_of", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},
-#line 537 "metafns.gperf"
-      {"is_structured_binding", METAFN_IS_STRUCTURED_BINDING, 
METAFN_KIND_BOOL_INFO,},
-#line 478 "metafns.gperf"
-      {"is_final", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},
-#line 511 "metafns.gperf"
-      {"is_literal_operator", METAFN_IS_LITERAL_OPERATOR, 
METAFN_KIND_BOOL_INFO,},
-#line 671 "metafns.gperf"
-      {"make_unsigned", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},
-#line 467 "metafns.gperf"
-      {"u8display_string_of", METAFN_U8DISPLAY_STRING_OF, 
METAFN_KIND_U8STRING_VIEW_INFO,},
-#line 644 "metafns.gperf"
-      {"has_virtual_destructor", METAFN_HAS_VIRTUAL_DESTRUCTOR, 
METAFN_KIND_BOOL_TINFO,},
-#line 600 "metafns.gperf"
-      {"is_const_type", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 483 "metafns.gperf"
-      {"is_explicit", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},
-#line 576 "metafns.gperf"
-      {"is_data_member_spec", METAFN_IS_DATA_MEMBER_SPEC, 
METAFN_KIND_BOOL_INFO,},
-#line 501 "metafns.gperf"
-      {"is_complete_type", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},
-#line 487 "metafns.gperf"
-      {"is_annotation", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},
-#line 591 "metafns.gperf"
-      {"is_function_type", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 552 "metafns.gperf"
-      {"return_type_of", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},
-#line 479 "metafns.gperf"
-      {"is_deleted", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},
-#line 471 "metafns.gperf"
-      {"constant_of", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},
-#line 665 "metafns.gperf"
-      {"add_volatile", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},
+      {"is_abstract_type", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},
 #line 480 "metafns.gperf"
-      {"is_defaulted", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},
-#line 645 "metafns.gperf"
-      {"has_unique_object_representations", 
METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},
-#line 586 "metafns.gperf"
-      {"is_member_object_pointer_type", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 466 "metafns.gperf"
+      {"is_virtual", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},
+#line 471 "metafns.gperf"
       {"display_string_of", METAFN_DISPLAY_STRING_OF, 
METAFN_KIND_STRING_VIEW_INFO,},
-#line 522 "metafns.gperf"
-      {"is_explicit_object_parameter", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, 
METAFN_KIND_BOOL_INFO,},
-#line 541 "metafns.gperf"
-      {"is_static_member", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},
-#line 470 "metafns.gperf"
-      {"object_of", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},
-#line 609 "metafns.gperf"
+#line 594 "metafns.gperf"
+      {"is_member_object_pointer_type", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 691 "metafns.gperf"
+      {"unwrap_ref_decay", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},
+#line 617 "metafns.gperf"
       {"is_consteval_only_type", METAFN_IS_CONSTEVAL_ONLY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 477 "metafns.gperf"
-      {"is_override", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},
-#line 663 "metafns.gperf"
-      {"remove_cv", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},
-#line 571 "metafns.gperf"
-      {"reflect_object", METAFN_REFLECT_OBJECT, 
METAFN_KIND_INFO_TEMPLATE_PARM_REF,},
-#line 581 "metafns.gperf"
+#line 606 "metafns.gperf"
+      {"is_compound_type", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 467 "metafns.gperf"
+      {"u8symbol_of", METAFN_U8SYMBOL_OF, 
METAFN_KIND_U8STRING_VIEW_OPERATORS,},
+#line 484 "metafns.gperf"
+      {"is_deleted", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},
+#line 589 "metafns.gperf"
       {"is_floating_point_type", METAFN_IS_FLOATING_POINT_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 463 "metafns.gperf"
-      {"has_identifier", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},
-#line 667 "metafns.gperf"
-      {"remove_reference", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},
-#line 555 "metafns.gperf"
-      {"has_inaccessible_bases", METAFN_HAS_INACCESSIBLE_BASES, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 499 "metafns.gperf"
-      {"has_c_language_linkage", METAFN_HAS_C_LANGUAGE_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 556 "metafns.gperf"
-      {"has_inaccessible_subobjects", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 672 "metafns.gperf"
-      {"remove_extent", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},
-#line 554 "metafns.gperf"
-      {"has_inaccessible_nonstatic_data_members", 
METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
-#line 492 "metafns.gperf"
-      {"is_rvalue_reference_qualified", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, 
METAFN_KIND_BOOL_INFO,},
-#line 647 "metafns.gperf"
-      {"reference_converts_from_temporary", 
METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 590 "metafns.gperf"
-      {"is_class_type", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 482 "metafns.gperf"
-      {"is_user_declared", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},
-#line 575 "metafns.gperf"
-      {"data_member_spec", METAFN_DATA_MEMBER_SPEC, 
METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},
-#line 491 "metafns.gperf"
-      {"is_lvalue_reference_qualified", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, 
METAFN_KIND_BOOL_INFO,},
-#line 494 "metafns.gperf"
-      {"has_thread_storage_duration", METAFN_HAS_THREAD_STORAGE_DURATION, 
METAFN_KIND_BOOL_INFO,},
+#line 537 "metafns.gperf"
+      {"is_literal_operator_template", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
 #line 485 "metafns.gperf"
-      {"is_bit_field", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},
-#line 676 "metafns.gperf"
-      {"remove_cvref", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},
-#line 681 "metafns.gperf"
-      {"invoke_result", METAFN_INVOKE_RESULT, 
METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},
-#line 547 "metafns.gperf"
+      {"is_defaulted", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},
+#line 583 "metafns.gperf"
+      {"data_member_spec", METAFN_DATA_MEMBER_SPEC, 
METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},
+#line 475 "metafns.gperf"
+      {"object_of", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},
+#line 700 "metafns.gperf"
+      {"_S_exception_cvt_to_utf8", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, 
METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},
+#line 701 "metafns.gperf"
+      {"_S_exception_cvt_from_utf8", 
METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, 
METAFN_KIND_STRING_VIEW_INPUT_RANGE,},
+#line 483 "metafns.gperf"
+      {"is_final", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},
+#line 516 "metafns.gperf"
+      {"is_literal_operator", METAFN_IS_LITERAL_OPERATOR, 
METAFN_KIND_BOOL_INFO,},
+#line 487 "metafns.gperf"
+      {"is_user_declared", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},
+#line 552 "metafns.gperf"
       {"has_template_arguments", METAFN_HAS_TEMPLATE_ARGUMENTS, 
METAFN_KIND_BOOL_INFO,},
-#line 510 "metafns.gperf"
+#line 515 "metafns.gperf"
       {"is_operator_function", METAFN_IS_OPERATOR_FUNCTION, 
METAFN_KIND_BOOL_INFO,},
-#line 674 "metafns.gperf"
-      {"remove_pointer", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},
-#line 546 "metafns.gperf"
-      {"dealias", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},
-#line 661 "metafns.gperf"
-      {"remove_const", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},
-#line 531 "metafns.gperf"
-      {"is_operator_function_template", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
-#line 646 "metafns.gperf"
-      {"reference_constructs_from_temporary", 
METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},
-#line 673 "metafns.gperf"
-      {"remove_all_extents", METAFN_REMOVE_ALL_EXTENTS, 
METAFN_KIND_INFO_TINFO,},
+#line 689 "metafns.gperf"
+      {"invoke_result", METAFN_INVOKE_RESULT, 
METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},
 #line 582 "metafns.gperf"
-      {"is_array_type", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 496 "metafns.gperf"
-      {"has_internal_linkage", METAFN_HAS_INTERNAL_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
-#line 670 "metafns.gperf"
-      {"make_signed", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},
-#line 559 "metafns.gperf"
-      {"static_data_members_of", METAFN_STATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 598 "metafns.gperf"
-      {"is_compound_type", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 606 "metafns.gperf"
-      {"is_abstract_type", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 577 "metafns.gperf"
-      {"define_aggregate", METAFN_DEFINE_AGGREGATE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
-#line 692 "metafns.gperf"
-      {"_S_exception_cvt_to_utf8", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, 
METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},
-#line 693 "metafns.gperf"
-      {"_S_exception_cvt_from_utf8", 
METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, 
METAFN_KIND_STRING_VIEW_INPUT_RANGE,},
-#line 613 "metafns.gperf"
-      {"is_unbounded_array_type", METAFN_IS_UNBOUNDED_ARRAY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 603 "metafns.gperf"
-      {"is_standard_layout_type", METAFN_IS_STANDARD_LAYOUT_TYPE, 
METAFN_KIND_BOOL_TINFO,},
-#line 683 "metafns.gperf"
-      {"unwrap_ref_decay", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},
-#line 574 "metafns.gperf"
       {"reflect_constant_array", METAFN_REFLECT_CONSTANT_ARRAY, 
METAFN_KIND_INFO_INPUT_RANGE,},
-#line 462 "metafns.gperf"
-      {"u8symbol_of", METAFN_U8SYMBOL_OF, 
METAFN_KIND_U8STRING_VIEW_OPERATORS,},
-#line 580 "metafns.gperf"
+#line 504 "metafns.gperf"
+      {"has_c_language_linkage", METAFN_HAS_C_LANGUAGE_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
+#line 536 "metafns.gperf"
+      {"is_operator_function_template", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, 
METAFN_KIND_BOOL_INFO,},
+#line 588 "metafns.gperf"
       {"is_integral_type", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 653 "metafns.gperf"
+      {"has_unique_object_representations", 
METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},
+#line 499 "metafns.gperf"
+      {"has_thread_storage_duration", METAFN_HAS_THREAD_STORAGE_DURATION, 
METAFN_KIND_BOOL_INFO,},
 #line 560 "metafns.gperf"
-      {"nonstatic_data_members_of", METAFN_NONSTATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
-#line 607 "metafns.gperf"
-      {"is_final_type", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 662 "metafns.gperf"
+      {"has_inaccessible_bases", METAFN_HAS_INACCESSIBLE_BASES, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
+#line 561 "metafns.gperf"
+      {"has_inaccessible_subobjects", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
+#line 678 "metafns.gperf"
+      {"make_signed", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},
+#line 559 "metafns.gperf"
+      {"has_inaccessible_nonstatic_data_members", 
METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, 
METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},
+#line 670 "metafns.gperf"
       {"remove_volatile", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},
-#line 565 "metafns.gperf"
-      {"alignment_of", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},
+#line 579 "metafns.gperf"
+      {"reflect_object", METAFN_REFLECT_OBJECT, 
METAFN_KIND_INFO_TEMPLATE_PARM_REF,},
+#line 611 "metafns.gperf"
+      {"is_standard_layout_type", METAFN_IS_STANDARD_LAYOUT_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 685 "metafns.gperf"
+      {"decay", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},
+#line 621 "metafns.gperf"
+      {"is_unbounded_array_type", METAFN_IS_UNBOUNDED_ARRAY_TYPE, 
METAFN_KIND_BOOL_TINFO,},
+#line 568 "metafns.gperf"
+      {"nonstatic_data_members_of", METAFN_NONSTATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
+#line 597 "metafns.gperf"
+      {"is_union_type", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},
 #line 468 "metafns.gperf"
-      {"source_location_of", METAFN_SOURCE_LOCATION_OF, 
METAFN_KIND_SOURCE_LOCATION_INFO,},
-#line 690 "metafns.gperf"
+      {"has_identifier", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},
+#line 567 "metafns.gperf"
+      {"static_data_members_of", METAFN_STATIC_DATA_MEMBERS_OF, 
METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},
+#line 615 "metafns.gperf"
+      {"is_final_type", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 551 "metafns.gperf"
+      {"dealias", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},
+#line 698 "metafns.gperf"
       {"annotations_of_with_type", METAFN_ANNOTATIONS_OF_WITH_TYPE, 
METAFN_KIND_VECTOR_INFO_INFO_INFO,},
-#line 465 "metafns.gperf"
-      {"u8identifier_of", METAFN_U8IDENTIFIER_OF, 
METAFN_KIND_U8STRING_VIEW_INFO,},
-#line 677 "metafns.gperf"
-      {"decay", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},
-#line 689 "metafns.gperf"
+#line 585 "metafns.gperf"
+      {"define_aggregate", METAFN_DEFINE_AGGREGATE, 
METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},
+#line 490 "metafns.gperf"
+      {"is_bit_field", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},
+#line 697 "metafns.gperf"
       {"annotations_of", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},
-#line 589 "metafns.gperf"
-      {"is_union_type", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},
-#line 481 "metafns.gperf"
-      {"is_user_provided", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,},
-#line 611 "metafns.gperf"
-      {"is_unsigned_type", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,}
+#line 473 "metafns.gperf"
+      {"source_location_of", METAFN_SOURCE_LOCATION_OF, 
METAFN_KIND_SOURCE_LOCATION_INFO,},
+#line 573 "metafns.gperf"
+      {"alignment_of", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},
+#line 501 "metafns.gperf"
+      {"has_internal_linkage", METAFN_HAS_INTERNAL_LINKAGE, 
METAFN_KIND_BOOL_INFO,},
+#line 470 "metafns.gperf"
+      {"u8identifier_of", METAFN_U8IDENTIFIER_OF, 
METAFN_KIND_U8STRING_VIEW_INFO,},
+#line 619 "metafns.gperf"
+      {"is_unsigned_type", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},
+#line 486 "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)
 #pragma GCC diagnostic pop
@@ -1076,81 +1087,71 @@ metafn_lookup::find (const char *str, si
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,
        -1,  -1,   1,  -1,  -1,   2,   3,  -1,   4,  -1,
-       -1,  -1,   5,  -1,  -1,  -1,   6,   7,  -1,   8,
-        9,  10,  11,  -1,  12,  13,  14,  -1,  -1,  15,
-       16,  -1,  -1,  -1,  -1,  17,  -1,  -1,  -1,  18,
-       -1,  19,  20,  -1,  21,  -1,  -1,  -1,  -1,  22,
-       23,  24,  25,  -1,  -1,  26,  27,  -1,  28,  -1,
-       29,  -1,  30,  31,  -1,  32,  -1,  -1,  -1,  -1,
-       33,  34,  35,  36,  37,  38,  -1,  -1,  -1,  -1,
-       -1,  39,  40,  -1,  41,  -1,  42,  -1,  -1,  43,
-       -1,  44,  45,  -1,  -1,  -1,  -1,  46,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  47,  48,  49,  -1,
-       50,  -1,  -1,  51,  52,  -1,  53,  54,  55,  56,
-       57,  58,  -1,  59,  -1,  -1,  -1,  60,  -1,  -1,
-       -1,  61,  -1,  62,  -1,  63,  64,  65,  66,  -1,
-       -1,  67,  -1,  -1,  -1,  -1,  -1,  68,  -1,  -1,
-       -1,  69,  70,  -1,  71,  -1,  -1,  72,  -1,  -1,
-       73,  -1,  74,  75,  -1,  76,  -1,  77,  78,  -1,
-       -1,  -1,  -1,  79,  80,  -1,  -1,  -1,  81,  -1,
-       -1,  -1,  82,  83,  -1,  -1,  -1,  -1,  84,  -1,
-       85,  86,  -1,  87,  88,  89,  90,  -1,  91,  -1,
-       -1,  92,  -1,  -1,  -1,  -1,  93,  94,  -1,  -1,
-       -1,  95,  96,  -1,  -1,  -1,  97,  98,  -1,  -1,
-       -1,  -1,  -1,  -1,  99,  -1, 100,  -1, 101,  -1,
-       -1,  -1,  -1, 102, 103, 104, 105,  -1,  -1, 106,
-      107, 108,  -1,  -1,  -1,  -1,  -1,  -1, 109, 110,
-      111,  -1, 112, 113,  -1,  -1,  -1,  -1, 114,  -1,
-       -1, 115, 116, 117, 118,  -1,  -1,  -1,  -1, 119,
-       -1,  -1,  -1, 120,  -1,  -1, 121,  -1,  -1, 122,
-      123,  -1,  -1, 124,  -1,  -1, 125,  -1,  -1,  -1,
-       -1, 126,  -1, 127,  -1,  -1,  -1,  -1, 128, 129,
-      130,  -1,  -1, 131, 132, 133, 134, 135,  -1, 136,
-       -1,  -1, 137,  -1, 138, 139,  -1, 140, 141, 142,
-       -1, 143, 144, 145, 146,  -1, 147,  -1,  -1,  -1,
-       -1, 148, 149,  -1, 150,  -1, 151,  -1, 152, 153,
-       -1, 154,  -1,  -1,  -1,  -1, 155, 156, 157, 158,
-       -1,  -1,  -1, 159, 160,  -1,  -1, 161,  -1, 162,
-       -1,  -1, 163, 164,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1, 165,  -1, 166, 167, 168,  -1,  -1,  -1,
-       -1, 169, 170, 171, 172,  -1,  -1, 173,  -1,  -1,
-       -1,  -1,  -1,  -1, 174,  -1, 175,  -1,  -1, 176,
-       -1,  -1, 177,  -1,  -1, 178,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 179,  -1,  -1,  -1, 180,  -1,  -1,
-       -1,  -1, 181,  -1, 182, 183,  -1, 184,  -1, 185,
-       -1,  -1, 186,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1, 187,  -1, 188,  -1,  -1,  -1, 189, 190,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 191,
-       -1, 192,  -1,  -1,  -1,  -1, 193,  -1, 194, 195,
-      196, 197,  -1, 198,  -1,  -1,  -1,  -1,  -1, 199,
-      200,  -1,  -1, 201,  -1,  -1,  -1,  -1,  -1,  -1,
-      202, 203,  -1,  -1, 204,  -1,  -1,  -1,  -1,  -1,
-       -1, 205, 206,  -1,  -1,  -1,  -1,  -1,  -1, 207,
-      208, 209,  -1,  -1,  -1, 210,  -1,  -1,  -1,  -1,
-       -1,  -1, 211,  -1,  -1,  -1,  -1, 212,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1, 213,  -1,  -1,  -1, 214,  -1, 215, 216,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 217,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1, 218,  -1,  -1,
-       -1,  -1,  -1, 219,  -1,  -1,  -1, 220,  -1,  -1,
-       -1,  -1, 221,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      222,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1, 223,  -1,  -1,  -1,  -1,  -1,  -1, 224,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1, 225,  -1,  -1,  -1,  -1,  -1, 226,  -1,
-       -1,  -1,  -1,  -1, 227,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 228,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1, 229,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1, 230,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 231,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1, 232,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,   5,  -1,  -1,   6,   7,   8,  -1,   9,
+       10,  11,  12,  -1,  13,  14,  15,  16,  -1,  17,
+       18,  -1,  -1,  -1,  -1,  19,  20,  -1,  21,  22,
+       -1,  23,  24,  -1,  25,  -1,  -1,  -1,  -1,  26,
+       -1,  27,  28,  -1,  29,  30,  31,  32,  33,  -1,
+       34,  -1,  35,  36,  -1,  -1,  -1,  -1,  -1,  -1,
+       37,  -1,  38,  39,  40,  41,  -1,  -1,  -1,  -1,
+       42,  43,  44,  -1,  45,  -1,  46,  -1,  47,  -1,
+       -1,  48,  49,  -1,  -1,  -1,  -1,  50,  -1,  -1,
+       -1,  -1,  -1,  51,  -1,  -1,  52,  53,  54,  -1,
+       -1,  -1,  -1,  55,  56,  57,  58,  -1,  59,  -1,
+       -1,  60,  -1,  -1,  61,  62,  -1,  63,  -1,  -1,
+       -1,  64,  -1,  65,  -1,  -1,  66,  -1,  67,  -1,
+       -1,  68,  -1,  69,  -1,  -1,  70,  -1,  -1,  -1,
+       71,  -1,  -1,  72,  73,  74,  75,  -1,  -1,  -1,
+       76,  77,  78,  -1,  79,  80,  81,  82,  83,  -1,
+       84,  85,  86,  -1,  -1,  87,  -1,  -1,  88,  89,
+       90,  91,  -1,  -1,  -1,  -1,  92,  -1,  93,  94,
+       95,  96,  -1,  97,  98,  99,  -1,  -1, 100, 101,
+      102,  -1,  -1,  -1,  -1,  -1,  -1, 103,  -1,  -1,
+       -1, 104,  -1, 105,  -1, 106, 107,  -1, 108,  -1,
+      109, 110, 111,  -1,  -1,  -1, 112, 113,  -1, 114,
+       -1, 115,  -1, 116, 117,  -1, 118,  -1,  -1, 119,
+      120, 121, 122,  -1, 123,  -1,  -1,  -1, 124, 125,
+       -1,  -1,  -1,  -1,  -1,  -1, 126,  -1,  -1,  -1,
+       -1,  -1, 127, 128, 129,  -1, 130, 131,  -1,  -1,
+       -1,  -1,  -1, 132, 133,  -1,  -1, 134, 135, 136,
+       -1, 137, 138,  -1,  -1,  -1, 139, 140,  -1,  -1,
+       -1,  -1,  -1, 141,  -1,  -1, 142,  -1, 143,  -1,
+      144,  -1,  -1, 145, 146, 147, 148,  -1, 149,  -1,
+      150, 151, 152, 153,  -1,  -1, 154, 155, 156, 157,
+      158,  -1, 159, 160,  -1,  -1, 161,  -1,  -1, 162,
+       -1, 163,  -1,  -1, 164, 165, 166, 167, 168,  -1,
+       -1,  -1,  -1, 169,  -1, 170, 171,  -1,  -1,  -1,
+       -1, 172,  -1,  -1, 173,  -1, 174,  -1,  -1,  -1,
+       -1,  -1, 175,  -1,  -1, 176, 177,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 178, 179, 180,
+       -1,  -1,  -1,  -1, 181,  -1,  -1,  -1,  -1, 182,
+       -1,  -1,  -1,  -1,  -1, 183,  -1,  -1,  -1, 184,
+       -1, 185, 186, 187,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 188,  -1, 189,  -1,  -1, 190,
+       -1,  -1,  -1,  -1, 191, 192, 193,  -1,  -1, 194,
+       -1,  -1, 195,  -1,  -1,  -1, 196,  -1, 197,  -1,
+       -1, 198,  -1, 199,  -1,  -1,  -1,  -1,  -1, 200,
+      201, 202, 203,  -1, 204,  -1,  -1, 205,  -1,  -1,
+      206,  -1, 207,  -1,  -1,  -1,  -1,  -1, 208,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 209,  -1,  -1,  -1,  -1,  -1, 210,
+       -1, 211,  -1,  -1,  -1,  -1,  -1,  -1, 212,  -1,
+       -1,  -1,  -1, 213,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1, 214,  -1,  -1,  -1, 215,  -1,  -1,  -1, 216,
+      217,  -1,  -1, 218,  -1,  -1,  -1,  -1, 219,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 220,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1, 221,  -1,  -1,  -1,  -1,
+      222,  -1,  -1,  -1,  -1, 223,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 224,  -1,
+       -1,  -1, 225, 226,  -1,  -1,  -1,  -1, 227,  -1,
+      228,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 229,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 230,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 231,  -1,  -1, 232,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 233,  -1,  -1, 234,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
@@ -1160,9 +1161,10 @@ metafn_lookup::find (const char *str, si
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 235,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1, 233
+      236
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)


        Jakub

Reply via email to