[PATCH] c++, libstdc++, v3: Implement current_{function,class,namespace} metafn addition from P3795R2

Jason Merrill jason@redhat.com
Tue Mar 31 20:30:35 GMT 2026


On 3/30/26 6:02 PM, Jakub Jelinek wrote:
> 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.

OK.

> 2026-03-30  Jakub Jelinek  <jakub@redhat.com>
> 
> 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
> 



More information about the Libstdc++ mailing list