Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217404/?format=api
{ "id": 2217404, "url": "http://patchwork.ozlabs.org/api/patches/2217404/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/acgG88uqbzgL7pVx@tucnak/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<acgG88uqbzgL7pVx@tucnak>", "list_archive_url": null, "date": "2026-03-28T16:50:59", "name": "c++, libstdc++, v2: Implement P3856R8 - New reflection metafunction - is_structural_type", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "fe42228e4d249b9a928c0f9a622eda5472460a62", "submitter": { "id": 671, "url": "http://patchwork.ozlabs.org/api/people/671/?format=api", "name": "Jakub Jelinek", "email": "jakub@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/acgG88uqbzgL7pVx@tucnak/mbox/", "series": [ { "id": 497879, "url": "http://patchwork.ozlabs.org/api/series/497879/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=497879", "date": "2026-03-28T16:50:59", "name": "c++, libstdc++, v2: Implement P3856R8 - New reflection metafunction - is_structural_type", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497879/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217404/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217404/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=F50szLM2;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=F50szLM2", "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com", "sourceware.org; spf=pass smtp.mailfrom=redhat.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fjkJV4Nw5z1y1x\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 29 Mar 2026 03:59:38 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 71A974BA900B\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 16:59:36 +0000 (GMT)", "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id D37E94BA903A\n for <gcc-patches@gcc.gnu.org>; Sat, 28 Mar 2026 16:58:04 +0000 (GMT)", "from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-167-c-03Cqi5Nume9lV6yCwCUQ-1; Sat,\n 28 Mar 2026 12:58:01 -0400", "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id DDD8F1800464; Sat, 28 Mar 2026 16:58:00 +0000 (UTC)", "from tucnak.zalov.cz (unknown [10.44.32.9])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id CDBAD3000223; Sat, 28 Mar 2026 16:57:59 +0000 (UTC)", "from tucnak.zalov.cz (localhost [127.0.0.1])\n by tucnak.zalov.cz (8.18.1/8.18.1) with ESMTPS id 62SGvuQp1667412\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Sat, 28 Mar 2026 17:57:57 +0100", "(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 62SGvuQ21667411;\n Sat, 28 Mar 2026 17:57:56 +0100" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 71A974BA900B", "OpenDKIM Filter v2.11.0 sourceware.org D37E94BA903A" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org D37E94BA903A", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org D37E94BA903A", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774717085; cv=none;\n b=hHAjZvYL7zzruX4qRXRuCLBsVrfvFEwKW00saTzL+VyGJ+fR0JMstQZeBCPjmsaYDurHjL4vUmlOIoJaOcBvNfoNA055hIiR1jCFtH6WOdVv0ezL7SC8bM0QEilvg25/F0qzjxumOmi7MAUYYomv9T0iMSL9wz8BRKDIVoyHYRk=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774717085; c=relaxed/simple;\n bh=fQHSPVHsWejy47vRmPFf+NKdADm8dfmNtLxX/5OK82g=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=GerkHTAHWRddWbdq3pjC1BYrv76M1PtHZO7AUaErScNedlQ5/8ZxS8mVPDsxdZWPBfQTFbi8FfW9NnJPLMydvrvUhcxiUa6jTFKBuJFBRka5LaZM1qk0DwIDBY0WU0oXNNlxGLr0V1MZFngw2IN2c9dNnjHsZ3H/oXEft8liXJs=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1774717084;\n h=from:from:reply-to:reply-to:subject:subject:date:date:\n message-id:message-id:to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:resent-to:resent-from:resent-message-id:\n in-reply-to:in-reply-to:references:references;\n bh=GE0AQy+O3u4TDnt4yK9z5Xe/Ubm5IgLTdcxlf4A8bHs=;\n b=F50szLM2b7YZGZLWW26g+stQ31ruvxzsAk0F5d/KbPts0k1yrHgsmEEFiAlq+3PRXjn1XS\n ej6HedRnM5AvXZqASxqLB1ChZnvZs6VaLubU8jyXAjRtMNrgJwssKefyK9cUoSg0FQc0W9\n eA+/+IY/Ca7ZcM+u8jP2PVT0B/1vpA8=", "X-MC-Unique": "c-03Cqi5Nume9lV6yCwCUQ-1", "X-Mimecast-MFC-AGG-ID": "c-03Cqi5Nume9lV6yCwCUQ_1774717081", "Resent-From": "Jakub Jelinek <jakub@redhat.com>", "Resent-Date": "Sat, 28 Mar 2026 17:57:56 +0100", "Resent-Message-ID": "<acgIlJTRk0GgRpCD@tucnak>", "Resent-To": "Jason Merrill <jason@redhat.com>,\n Marek Polacek <polacek@redhat.com>,\n Jonathan Wakely <jwakely@redhat.com>, gcc-patches@gcc.gnu.org,\n libstdc++@gcc.gnu.org", "Date": "Sat, 28 Mar 2026 17:50:59 +0100", "From": "Jakub Jelinek <jakub@redhat.com>", "To": "Jason Merrill <jason@redhat.com>, Marek Polacek <polacek@redhat.com>,\n Jonathan Wakely <jwakely@redhat.com>", "Cc": "gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org", "Subject": "[PATCH] c++, libstdc++, v2: Implement P3856R8 - New reflection\n metafunction - is_structural_type", "Message-ID": "<acgG88uqbzgL7pVx@tucnak>", "References": "<acVlUKaLs5HR19Lq@tucnak> <acVm1WblAk4KBwTB@redhat.com>\n <acVn3zOzun_VNadf@tucnak>", "MIME-Version": "1.0", "In-Reply-To": "<acVn3zOzun_VNadf@tucnak>", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "Q8JD_yg0bX7nsh1dVEXfUwitsRoWEUFHXm3h7iFzBOc_1774717081", "X-Mimecast-Originator": "redhat.com", "Content-Type": "text/plain; charset=us-ascii", "Content-Disposition": "inline", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Reply-To": "Jakub Jelinek <jakub@redhat.com>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "On Thu, Mar 26, 2026 at 06:07:43PM +0100, Jakub Jelinek wrote:\n> On Thu, Mar 26, 2026 at 01:03:17PM -0400, Marek Polacek wrote:\n> > Since this patch is adding the trait, this could be just\n> > \n> > return eval_type_trait (loc, type, CPTK_IS_STRUCTURAL);\n> > \n> > Not that it matters in this case...\n> > \n> > The cp/ bits look good to me otherwise.\n> \n> Changed in my copy.\n\nHere is that updated patch.\n\nBootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n\n2026-03-28 Jakub Jelinek <jakub@redhat.com>\n\ngcc/cp/\n\t* cp-trait.def (__builtin_is_structural): New trait.\n\t* semantics.cc (trait_expr_value): Handle CPTK_IS_STRUCTURAL.\n\t(finish_trait_expr): Likewise.\n\t* constraint.cc (diagnose_trait_expr): Likewise.\n\t* metafns.gperf (enum metafn_code): Add METAFN_IS_STRUCTURAL_TYPE.\n\t(is_structural_type): New metafn.\n\t* metafns.h: Regenerate.\n\t* reflect.cc (eval_is_structural_type): New function.\n\t(process_metafunction): Handle METAFN_IS_STRUCTURAL_TYPE.\ngcc/testsuite/\n\t* g++.dg/reflect/type_trait14.C: New test.\n\t* g++.dg/reflect/eh1.C: Add test for is_structural_type.\n\t* g++.dg/reflect/eh2.C: Likewise.\nlibstdc++-v3/\n\t* include/bits/version.def (is_structural): New.\n\t* include/bits/version.h: Regenerate.\n\t* include/std/type_traits (__glibcxx_want_is_structural): Define.\n\t(std::is_structural): New type trait.\n\t(std::is_structural_v): New type trait variable template.\n\t* include/std/meta (std::meta::is_structural_type): New declaration.\n\t* src/c++23/std.cc.in: Export std::is_structural, std::is_structural_v\n\tand std::meta::is_structural_type.\n\t* testsuite/20_util/is_structural/requirements/explicit_instantiation.cc: New test.\n\t* testsuite/20_util/is_structural/requirements/typedefs.cc: New test.\n\t* testsuite/20_util/is_structural/value.cc: New test.\n\t* testsuite/20_util/variable_templates_for_traits.cc: Test\n\tis_structural_v.\n\n\n\n\tJakub", "diff": "--- gcc/cp/cp-trait.def.jj\t2026-01-15 16:33:46.972098555 +0100\n+++ gcc/cp/cp-trait.def\t2026-03-26 16:57:51.414942417 +0100\n@@ -98,6 +98,7 @@ DEFTRAIT_EXPR (IS_REFERENCE, \"__is_refer\n DEFTRAIT_EXPR (IS_SAME, \"__is_same\", 2)\n DEFTRAIT_EXPR (IS_SCOPED_ENUM, \"__is_scoped_enum\", 1)\n DEFTRAIT_EXPR (IS_STD_LAYOUT, \"__is_standard_layout\", 1)\n+DEFTRAIT_EXPR (IS_STRUCTURAL, \"__builtin_is_structural\", 1)\n DEFTRAIT_EXPR (IS_TRIVIAL, \"__is_trivial\", 1)\n DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE, \"__is_trivially_assignable\", 2)\n DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, \"__is_trivially_constructible\", -1)\n--- gcc/cp/semantics.cc.jj\t2026-03-12 15:27:17.698072317 +0100\n+++ gcc/cp/semantics.cc\t2026-03-26 16:58:37.177163606 +0100\n@@ -14173,6 +14173,9 @@ trait_expr_value (cp_trait_kind kind, tr\n case CPTK_IS_CONSTEVAL_ONLY:\n return consteval_only_p (type1);\n \n+ case CPTK_IS_STRUCTURAL:\n+ return structural_type_p (type1);\n+\n /* __array_rank, __builtin_type_order and __builtin_structured_binding_size\n are handled in finish_trait_expr. */\n case CPTK_RANK:\n@@ -14354,6 +14357,7 @@ finish_trait_expr (location_t loc, cp_tr\n case CPTK_IS_TRIVIAL:\n case CPTK_IS_TRIVIALLY_COPYABLE:\n case CPTK_IS_CONSTEVAL_ONLY:\n+ case CPTK_IS_STRUCTURAL:\n case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS:\n if (!check_trait_type (type1, /* kind = */ 2))\n \treturn error_mark_node;\n--- gcc/cp/constraint.cc.jj\t2026-03-03 09:43:54.564370259 +0100\n+++ gcc/cp/constraint.cc\t2026-03-26 16:58:06.583684262 +0100\n@@ -3357,6 +3357,10 @@ diagnose_trait_expr (location_t loc, tre\n case CPTK_IS_CONSTEVAL_ONLY:\n inform (decl_loc, \"%qT is not consteval-only\", t1);\n break;\n+ case CPTK_IS_STRUCTURAL:\n+ inform (decl_loc, \"%qT is not a structural type\", t1);\n+ structural_type_p (t1, /*explain=*/true);\n+ break;\n case CPTK_RANK:\n inform (loc, \"%qT cannot yield a rank\", t1);\n break;\n--- gcc/cp/metafns.gperf.jj\t2026-03-25 20:19:10.715163161 +0100\n+++ gcc/cp/metafns.gperf\t2026-03-26 14:31:11.313544554 +0100\n@@ -172,6 +172,7 @@ enum metafn_code {\n METAFN_IS_FINAL_TYPE,\n METAFN_IS_AGGREGATE_TYPE,\n METAFN_IS_CONSTEVAL_ONLY_TYPE,\n+ METAFN_IS_STRUCTURAL_TYPE,\n METAFN_IS_SIGNED_TYPE,\n METAFN_IS_UNSIGNED_TYPE,\n METAFN_IS_BOUNDED_ARRAY_TYPE,\n@@ -607,6 +608,7 @@ is_abstract_type, METAFN_IS_ABSTRACT_TYP\n is_final_type, METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,\n is_aggregate_type, METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,\n is_consteval_only_type, METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,\n+is_structural_type, METAFN_IS_STRUCTURAL_TYPE, METAFN_KIND_BOOL_TINFO,\n is_signed_type, METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,\n is_unsigned_type, METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,\n is_bounded_array_type, METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,\n--- gcc/cp/reflect.cc.jj\t2026-03-26 12:30:48.440143055 +0100\n+++ gcc/cp/reflect.cc\t2026-03-26 14:33:07.038568698 +0100\n@@ -4362,6 +4362,14 @@ eval_is_consteval_only_type (tree type)\n return boolean_false_node;\n }\n \n+/* Process std::meta::is_structural_type. */\n+\n+static tree\n+eval_is_structural_type (location_t loc, tree type)\n+{\n+ return eval_type_trait (loc, type, CPTK_IS_STRUCTURAL);\n+}\n+\n /* Process std::meta::is_signed_type. */\n \n static tree\n@@ -7917,6 +7925,8 @@ process_metafunction (const constexpr_ct\n return eval_is_aggregate_type (h);\n case METAFN_IS_CONSTEVAL_ONLY_TYPE:\n return eval_is_consteval_only_type (h);\n+ case METAFN_IS_STRUCTURAL_TYPE:\n+ return eval_is_structural_type (loc, h);\n case METAFN_IS_SIGNED_TYPE:\n return eval_is_signed_type (h);\n case METAFN_IS_UNSIGNED_TYPE:\n--- gcc/testsuite/g++.dg/reflect/type_trait14.C.jj\t2026-03-26 17:15:25.881997122 +0100\n+++ gcc/testsuite/g++.dg/reflect/type_trait14.C\t2026-03-26 17:36:55.509059740 +0100\n@@ -0,0 +1,61 @@\n+// { dg-do compile { target c++26 } }\n+// { dg-additional-options \"-freflection\" }\n+// Test reflection type traits [meta.reflection.traits], type properties.\n+\n+#include <meta>\n+using namespace std::meta;\n+\n+struct A { constexpr A () : a (42) {} mutable int a; };\n+struct B { constexpr B () {} A b; };\n+struct C : public A { constexpr C () {} };\n+struct D {};\n+struct E : protected D { constexpr E () {} };\n+struct F { constexpr F () : f (42) {} int f; };\n+struct G { F a; int b[2]; constexpr G () : b{0,1} {} };\n+enum EnumType { e0 };\n+class ClassType { };\n+struct NType { int i; int j; virtual ~NType (); };\n+struct TType { int i; private: int j; };\n+struct SLType { int i; int j; ~SLType (); };\n+struct PODType { int i; int j; };\n+struct LType { int _M_i; constexpr LType (int __i) : _M_i(__i) { } };\n+struct LTypeDerived : public LType { constexpr LTypeDerived (int __i) : LType(__i) { } };\n+struct NLType {\n+ int _M_i;\n+ NLType () : _M_i(0) { }\n+ constexpr NLType (int __i) : _M_i(__i) { }\n+ NLType (const NLType &__other) : _M_i(__other._M_i) { }\n+ ~NLType () { _M_i = 0; }\n+};\n+\n+static_assert (is_structural_type (^^int));\n+static_assert (is_structural_type (^^float));\n+static_assert (is_structural_type (^^const float));\n+static_assert (is_structural_type (^^EnumType));\n+static_assert (is_structural_type (^^int*));\n+static_assert (is_structural_type (^^int(*)(int)));\n+static_assert (is_structural_type (^^int (ClassType::*)));\n+static_assert (is_structural_type (^^int (ClassType::*) (int)));\n+static_assert (is_structural_type (^^std::nullptr_t));\n+static_assert (is_structural_type (^^info));\n+static_assert (is_structural_type (^^int&));\n+static_assert (is_structural_type (^^NLType&));\n+static_assert (is_structural_type (^^PODType));\n+static_assert (is_structural_type (^^const LType));\n+static_assert (is_structural_type (^^LTypeDerived));\n+static_assert (is_structural_type (^^D));\n+static_assert (is_structural_type (^^F));\n+static_assert (is_structural_type (^^G));\n+\n+static_assert (!is_structural_type (^^int&&));\n+static_assert (!is_structural_type (^^int[2]));\n+static_assert (!is_structural_type (^^TType));\n+static_assert (!is_structural_type (^^NType));\n+static_assert (!is_structural_type (^^SLType));\n+static_assert (!is_structural_type (^^LType[5]));\n+static_assert (!is_structural_type (^^NLType));\n+static_assert (!is_structural_type (^^NLType[5]));\n+static_assert (!is_structural_type (^^A));\n+static_assert (!is_structural_type (^^const B));\n+static_assert (!is_structural_type (^^C));\n+static_assert (!is_structural_type (^^E));\n--- gcc/testsuite/g++.dg/reflect/eh1.C.jj\t2026-01-15 16:33:47.007097959 +0100\n+++ gcc/testsuite/g++.dg/reflect/eh1.C\t2026-03-26 17:37:37.932338418 +0100\n@@ -257,6 +257,9 @@ eval (int n)\n case 84:\n unwrap_ref_decay (^^n);\n break;\n+ case 85:\n+ is_structural_type (^^n);\n+ break;\n default:\n break;\n }\n@@ -353,3 +356,4 @@ static_assert (test (81));\n static_assert (test (82));\n static_assert (test (83));\n static_assert (test (84));\n+static_assert (test (85));\n--- gcc/testsuite/g++.dg/reflect/eh2.C.jj\t2026-01-15 16:33:47.007097959 +0100\n+++ gcc/testsuite/g++.dg/reflect/eh2.C\t2026-03-26 17:37:59.760967264 +0100\n@@ -89,3 +89,4 @@ static_assert ((is_swappable_type (^^i),\n static_assert ((is_nothrow_swappable_type (^^i), true)); // { dg-error \"non-constant|uncaught exception\" }\n static_assert ((unwrap_reference (^^i), true)); // { dg-error \"non-constant|uncaught exception\" }\n static_assert ((unwrap_ref_decay (^^i), true)); // { dg-error \"non-constant|uncaught exception\" }\n+static_assert ((is_structural_type (^^i), true)); // { dg-error \"non-constant|uncaught exception\" }\n--- libstdc++-v3/include/bits/version.def.jj\t2026-03-23 11:26:48.919334705 +0100\n+++ libstdc++-v3/include/bits/version.def\t2026-03-26 17:00:53.572842375 +0100\n@@ -2346,6 +2346,15 @@ ftms = {\n };\n };\n \n+ftms = {\n+ name = is_structural;\n+ values = {\n+ v = 202603;\n+ cxxmin = 26;\n+ extra_cond = \"__has_builtin(__builtin_is_structural)\";\n+ };\n+};\n+\n // Standard test specifications.\n stds[97] = \">= 199711L\";\n stds[03] = \">= 199711L\";\n--- libstdc++-v3/include/bits/version.h.jj\t2026-03-23 11:26:48.920334688 +0100\n+++ libstdc++-v3/include/bits/version.h\t2026-03-26 17:01:26.364581790 +0100\n@@ -2625,4 +2625,14 @@\n #endif /* !defined(__cpp_lib_simd) */\n #undef __glibcxx_want_simd\n \n+#if !defined(__cpp_lib_is_structural)\n+# if (__cplusplus > 202302L) && (__has_builtin(__builtin_is_structural))\n+# define __glibcxx_is_structural 202603L\n+# if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_structural)\n+# define __cpp_lib_is_structural 202603L\n+# endif\n+# endif\n+#endif /* !defined(__cpp_lib_is_structural) */\n+#undef __glibcxx_want_is_structural\n+\n #undef __glibcxx_want_all\n--- libstdc++-v3/include/std/type_traits.jj\t2026-03-02 07:43:12.637783197 +0100\n+++ libstdc++-v3/include/std/type_traits\t2026-03-26 14:26:49.147242525 +0100\n@@ -55,6 +55,7 @@\n #define __glibcxx_want_is_null_pointer\n #define __glibcxx_want_is_pointer_interconvertible\n #define __glibcxx_want_is_scoped_enum\n+#define __glibcxx_want_is_structural\n #define __glibcxx_want_is_swappable\n #define __glibcxx_want_is_virtual_base_of\n #define __glibcxx_want_logical_traits\n@@ -3924,6 +3925,23 @@ template<typename _Ret, typename _Fn, ty\n = __builtin_is_consteval_only(_Tp);\n #endif\n \n+#if __cpp_lib_is_structural >= 202603L // C++ >= 26\n+ /// is_structural - true if the type is a structural type.\n+ /// @since C++26\n+ template<typename _Tp>\n+ struct is_structural\n+ : bool_constant<__builtin_is_structural(_Tp)>\n+ { };\n+\n+ /** is_structural_v - true if the type is a structural only type.\n+ * @ingroup variable_templates\n+ * @since C++26\n+ */\n+ template<typename _Tp>\n+ inline constexpr bool is_structural_v\n+ = __builtin_is_structural(_Tp);\n+#endif\n+\n /** * Remove references and cv-qualifiers.\n * @since C++20\n * @{\n--- libstdc++-v3/include/std/meta.jj\t2026-03-25 20:19:53.791992428 +0100\n+++ libstdc++-v3/include/std/meta\t2026-03-26 17:39:52.979042203 +0100\n@@ -466,6 +466,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n consteval bool is_final_type(info);\n consteval bool is_aggregate_type(info);\n consteval bool is_consteval_only_type(info);\n+ consteval bool is_structural_type(info);\n consteval bool is_signed_type(info);\n consteval bool is_unsigned_type(info);\n consteval bool is_bounded_array_type(info);\n--- libstdc++-v3/src/c++23/std.cc.in.jj\t2026-03-19 17:37:36.261809242 +0100\n+++ libstdc++-v3/src/c++23/std.cc.in\t2026-03-26 15:18:55.819857691 +0100\n@@ -2251,6 +2251,7 @@ export namespace std\n using std::meta::is_final_type;\n using std::meta::is_aggregate_type;\n using std::meta::is_consteval_only_type;\n+ using std::meta::is_structural_type;\n using std::meta::is_signed_type;\n using std::meta::is_unsigned_type;\n using std::meta::is_bounded_array_type;\n@@ -3574,6 +3575,10 @@ export namespace std\n using std::is_consteval_only_v;\n #endif\n #endif\n+#if __glibcxx_is_structural >= 202603L\n+ using std::is_structural;\n+ using std::is_structural_v;\n+#endif\n }\n \n // <typeindex>\n--- libstdc++-v3/testsuite/20_util/is_structural/requirements/explicit_instantiation.cc.jj\t2026-03-26 16:22:54.410627358 +0100\n+++ libstdc++-v3/testsuite/20_util/is_structural/requirements/explicit_instantiation.cc\t2026-03-26 16:23:11.321339614 +0100\n@@ -0,0 +1,12 @@\n+// { dg-do compile { target c++26 } }\n+// { dg-additional-options \"-freflection\" }\n+\n+// NB: This file is for testing type_traits with NO OTHER INCLUDES.\n+\n+#include <type_traits>\n+\n+namespace std\n+{\n+ typedef short test_type;\n+ template struct is_structural<test_type>;\n+}\n--- libstdc++-v3/testsuite/20_util/is_structural/requirements/typedefs.cc.jj\t2026-03-26 16:23:15.741264410 +0100\n+++ libstdc++-v3/testsuite/20_util/is_structural/requirements/typedefs.cc\t2026-03-26 16:23:45.465758638 +0100\n@@ -0,0 +1,16 @@\n+// { dg-do compile { target c++26 } }\n+// { dg-additional-options \"-freflection\" }\n+\n+// NB: This file is for testing type_traits with NO OTHER INCLUDES.\n+\n+#include <type_traits>\n+\n+void test01()\n+{\n+ // Check for required typedefs\n+ typedef std::is_structural<int> test_type;\n+ typedef test_type::value_type value_type;\n+ typedef test_type::type type;\n+ typedef test_type::type::value_type type_value_type;\n+ typedef test_type::type::type type_type;\n+}\n--- libstdc++-v3/testsuite/20_util/is_structural/value.cc.jj\t2026-03-26 16:22:22.921163159 +0100\n+++ libstdc++-v3/testsuite/20_util/is_structural/value.cc\t2026-03-26 17:13:23.316082968 +0100\n@@ -0,0 +1,51 @@\n+// { dg-do compile { target c++26 } }\n+\n+#include <type_traits>\n+#include <testsuite_tr1.h>\n+\n+void test01()\n+{\n+ using std::is_structural;\n+ using namespace __gnu_test;\n+ struct A { constexpr A () : a (42) {} mutable int a; };\n+ struct B { constexpr B () {} A b; };\n+ struct C : public A { constexpr C () {} };\n+ struct D {};\n+ struct E : protected D { constexpr E () {} };\n+ struct F { constexpr F () : f (42) {} int f; };\n+ struct G { F a; int b[2]; constexpr G () : b{0,1} {} };\n+\n+ static_assert(test_category<is_structural, int>(true), \"\");\n+ static_assert(test_category<is_structural, float>(true), \"\");\n+ static_assert(test_category<is_structural, const float>(true), \"\");\n+ static_assert(test_category<is_structural, EnumType>(true), \"\");\n+ static_assert(test_category<is_structural, int*>(true), \"\");\n+ static_assert(test_category<is_structural, int(*)(int)>(true), \"\");\n+ static_assert(test_category<is_structural, int (ClassType::*)>(true), \"\");\n+ static_assert(test_category<is_structural, int (ClassType::*) (int)>(true), \"\");\n+ static_assert(test_category<is_structural, std::nullptr_t>(true), \"\");\n+#if __cpp_impl_reflection >= 202506L\n+ static_assert(test_category<is_structural, decltype(^^::)>(true), \"\");\n+#endif\n+ static_assert(test_category<is_structural, int&>(true), \"\");\n+ static_assert(test_category<is_structural, NLType&>(true), \"\");\n+ static_assert(test_category<is_structural, PODType>(true), \"\");\n+ static_assert(test_category<is_structural, const LType>(true), \"\");\n+ static_assert(test_category<is_structural, LTypeDerived>(true), \"\");\n+ static_assert(test_category<is_structural, D>(true), \"\");\n+ static_assert(test_category<is_structural, F>(true), \"\");\n+ static_assert(test_category<is_structural, G>(true), \"\");\n+\n+ static_assert(test_category<is_structural, int&&>(false), \"\");\n+ static_assert(test_category<is_structural, int[2]>(false), \"\");\n+ static_assert(test_category<is_structural, TType>(false), \"\");\n+ static_assert(test_category<is_structural, NType>(false), \"\");\n+ static_assert(test_category<is_structural, SLType>(false), \"\");\n+ static_assert(test_category<is_structural, LType[5]>(false), \"\");\n+ static_assert(test_category<is_structural, NLType>(false), \"\");\n+ static_assert(test_category<is_structural, NLType[5]>(false), \"\");\n+ static_assert(test_category<is_structural, A>(false), \"\");\n+ static_assert(test_category<is_structural, const B>(false), \"\");\n+ static_assert(test_category<is_structural, C>(false), \"\");\n+ static_assert(test_category<is_structural, E>(false), \"\");\n+}\n--- libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc.jj\t2026-03-02 07:43:12.638783181 +0100\n+++ libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc\t2026-03-26 16:26:15.363208079 +0100\n@@ -340,6 +340,11 @@ static_assert(is_consteval_only_v<declty\n static_assert(!is_consteval_only_v<int> && !is_consteval_only<int>::value, \"\");\n #endif\n \n+#if __cpp_lib_is_structural >= 202603L\n+static_assert(is_structural_v<int> && is_structural<int>::value, \"\");\n+static_assert(!is_structural_v<int &&> && !is_structural<int &&>::value, \"\");\n+#endif\n+\n static_assert(negation_v<false_type>, \"\");\n static_assert(!negation_v<true_type>, \"\");\n static_assert(conjunction_v<>, \"\");\n--- gcc/cp/metafns.h.jj\t2026-03-25 20:19:10.715163161 +0100\n+++ gcc/cp/metafns.h\t2026-03-26 14:31:28.304836854 +0100\n@@ -200,6 +200,7 @@ enum metafn_code {\n METAFN_IS_FINAL_TYPE,\n METAFN_IS_AGGREGATE_TYPE,\n METAFN_IS_CONSTEVAL_ONLY_TYPE,\n+ METAFN_IS_STRUCTURAL_TYPE,\n METAFN_IS_SIGNED_TYPE,\n METAFN_IS_UNSIGNED_TYPE,\n METAFN_IS_BOUNDED_ARRAY_TYPE,\n@@ -472,7 +473,7 @@ enum metafn_kind {\n = (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)\n | METAFN_KIND_RET_U8STRING_VIEW\n };\n-#line 448 \"metafns.gperf\"\n+#line 449 \"metafns.gperf\"\n struct metafn_info\n {\n /* A name within \"std::meta::\" (or \"std::meta::access_context::\"). */\n@@ -484,7 +485,7 @@ struct metafn_info\n /* METAFN_KIND_ kind of arguments and return type. */\n metafn_kind kind;\n };\n-/* maximum key range = 879, duplicates = 0 */\n+/* maximum key range = 872, duplicates = 0 */\n \n class metafn_lookup\n {\n@@ -499,32 +500,32 @@ metafn_lookup::hash (const char *str, si\n {\n static const unsigned short asso_values[] =\n {\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 0, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 5, 100, 145, 10, 45,\n- 165, 5, 55, 50, 72, 20, 248, 0, 55, 105,\n- 0, 205, 0, 45, 35, 55, 25, 195, 5, 199,\n- 20, 311, 20, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n- 918, 918, 918, 918, 918, 918, 918\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 0, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 5, 55, 145, 10, 45,\n+ 165, 5, 55, 15, 3, 20, 386, 0, 55, 105,\n+ 0, 205, 0, 45, 35, 55, 25, 225, 5, 119,\n+ 10, 271, 20, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908, 908, 908, 908,\n+ 908, 908, 908, 908, 908, 908, 908\n };\n unsigned int hval = len;\n \n@@ -583,11 +584,11 @@ metafn_lookup::find (const char *str, si\n {\n enum\n {\n- TOTAL_KEYWORDS = 234,\n+ TOTAL_KEYWORDS = 235,\n MIN_WORD_LENGTH = 4,\n MAX_WORD_LENGTH = 40,\n- MIN_HASH_VALUE = 39,\n- MAX_HASH_VALUE = 917\n+ MIN_HASH_VALUE = 36,\n+ MAX_HASH_VALUE = 907\n };\n \n #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)\n@@ -596,473 +597,475 @@ metafn_lookup::find (const char *str, si\n #endif\n static const struct metafn_info wordlist[] =\n {\n-#line 648 \"metafns.gperf\"\n+#line 498 \"metafns.gperf\"\n+ {\"has_module_linkage\", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n+#line 650 \"metafns.gperf\"\n {\"rank\", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},\n-#line 578 \"metafns.gperf\"\n+#line 579 \"metafns.gperf\"\n {\"is_void_type\", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 583 \"metafns.gperf\"\n+#line 584 \"metafns.gperf\"\n {\"is_pointer_type\", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 489 \"metafns.gperf\"\n+#line 490 \"metafns.gperf\"\n {\"is_volatile\", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},\n-#line 535 \"metafns.gperf\"\n+#line 536 \"metafns.gperf\"\n {\"is_value\", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},\n-#line 542 \"metafns.gperf\"\n+#line 543 \"metafns.gperf\"\n {\"is_base\", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},\n-#line 503 \"metafns.gperf\"\n+#line 504 \"metafns.gperf\"\n {\"is_variable\", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},\n-#line 654 \"metafns.gperf\"\n+#line 656 \"metafns.gperf\"\n {\"is_nothrow_convertible_type\", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 633 \"metafns.gperf\"\n+#line 635 \"metafns.gperf\"\n {\"is_nothrow_constructible_type\", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 659 \"metafns.gperf\"\n+#line 661 \"metafns.gperf\"\n {\"is_nothrow_invocable_type\", METAFN_IS_NOTHROW_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 638 \"metafns.gperf\"\n+#line 640 \"metafns.gperf\"\n {\"is_nothrow_copy_assignable_type\", METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 660 \"metafns.gperf\"\n+#line 662 \"metafns.gperf\"\n {\"is_nothrow_invocable_r_type\", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n-#line 635 \"metafns.gperf\"\n+#line 637 \"metafns.gperf\"\n {\"is_nothrow_copy_constructible_type\", METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 651 \"metafns.gperf\"\n+#line 653 \"metafns.gperf\"\n {\"is_base_of_type\", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 639 \"metafns.gperf\"\n+#line 641 \"metafns.gperf\"\n {\"is_nothrow_move_assignable_type\", METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 636 \"metafns.gperf\"\n+#line 638 \"metafns.gperf\"\n {\"is_nothrow_move_constructible_type\", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 527 \"metafns.gperf\"\n+#line 528 \"metafns.gperf\"\n {\"is_variable_template\", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 686 \"metafns.gperf\"\n+#line 688 \"metafns.gperf\"\n {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 579 \"metafns.gperf\"\n+#line 580 \"metafns.gperf\"\n {\"is_null_pointer_type\", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 504 \"metafns.gperf\"\n+#line 505 \"metafns.gperf\"\n {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 472 \"metafns.gperf\"\n+#line 496 \"metafns.gperf\"\n+ {\"has_automatic_storage_duration\", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n+#line 473 \"metafns.gperf\"\n {\"is_public\", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},\n-#line 484 \"metafns.gperf\"\n+#line 485 \"metafns.gperf\"\n {\"is_noexcept\", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 567 \"metafns.gperf\"\n+#line 568 \"metafns.gperf\"\n {\"extract\", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},\n-#line 687 \"metafns.gperf\"\n+#line 689 \"metafns.gperf\"\n {\"variant_alternative\", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 605 \"metafns.gperf\"\n+#line 545 \"metafns.gperf\"\n+ {\"has_parent\", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},\n+#line 606 \"metafns.gperf\"\n {\"is_polymorphic_type\", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 474 \"metafns.gperf\"\n+#line 475 \"metafns.gperf\"\n {\"is_private\", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},\n-#line 508 \"metafns.gperf\"\n+#line 509 \"metafns.gperf\"\n {\"is_function\", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 505 \"metafns.gperf\"\n+#line 506 \"metafns.gperf\"\n {\"is_namespace\", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},\n-#line 656 \"metafns.gperf\"\n+#line 658 \"metafns.gperf\"\n {\"is_pointer_interconvertible_base_of_type\", METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 612 \"metafns.gperf\"\n+#line 614 \"metafns.gperf\"\n {\"is_bounded_array_type\", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 488 \"metafns.gperf\"\n+#line 489 \"metafns.gperf\"\n {\"is_const\", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},\n-#line 534 \"metafns.gperf\"\n+#line 535 \"metafns.gperf\"\n {\"is_concept\", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 650 \"metafns.gperf\"\n+#line 652 \"metafns.gperf\"\n {\"is_same_type\", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 558 \"metafns.gperf\"\n+#line 559 \"metafns.gperf\"\n {\"bases_of\", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 497 \"metafns.gperf\"\n- {\"has_module_linkage\", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 526 \"metafns.gperf\"\n+#line 544 \"metafns.gperf\"\n+ {\"has_default_member_initializer\", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},\n+#line 527 \"metafns.gperf\"\n {\"is_function_template\", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 637 \"metafns.gperf\"\n+#line 639 \"metafns.gperf\"\n {\"is_nothrow_assignable_type\", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 509 \"metafns.gperf\"\n+#line 510 \"metafns.gperf\"\n {\"is_conversion_function\", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 642 \"metafns.gperf\"\n+#line 644 \"metafns.gperf\"\n {\"is_nothrow_destructible_type\", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 653 \"metafns.gperf\"\n+#line 655 \"metafns.gperf\"\n {\"is_convertible_type\", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 643 \"metafns.gperf\"\n+#line 645 \"metafns.gperf\"\n {\"is_implicit_lifetime_type\", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 525 \"metafns.gperf\"\n+#line 524 \"metafns.gperf\"\n+ {\"has_default_argument\", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,},\n+#line 526 \"metafns.gperf\"\n {\"is_template\", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 634 \"metafns.gperf\"\n+#line 636 \"metafns.gperf\"\n {\"is_nothrow_default_constructible_type\", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 568 \"metafns.gperf\"\n+#line 569 \"metafns.gperf\"\n {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 530 \"metafns.gperf\"\n+#line 531 \"metafns.gperf\"\n {\"is_conversion_function_template\", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 461 \"metafns.gperf\"\n+#line 462 \"metafns.gperf\"\n {\"symbol_of\", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},\n-#line 617 \"metafns.gperf\"\n+#line 690 \"metafns.gperf\"\n+ {\"type_order\", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},\n+#line 619 \"metafns.gperf\"\n {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 615 \"metafns.gperf\"\n+#line 501 \"metafns.gperf\"\n+ {\"has_linkage\", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},\n+#line 525 \"metafns.gperf\"\n+ {\"has_ellipsis_parameter\", METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,},\n+#line 617 \"metafns.gperf\"\n {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 495 \"metafns.gperf\"\n- {\"has_automatic_storage_duration\", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 620 \"metafns.gperf\"\n+#line 470 \"metafns.gperf\"\n+ {\"type_of\", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n+#line 622 \"metafns.gperf\"\n {\"is_copy_assignable_type\", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 684 \"metafns.gperf\"\n+#line 686 \"metafns.gperf\"\n {\"tuple_size\", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 506 \"metafns.gperf\"\n+#line 507 \"metafns.gperf\"\n {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 515 \"metafns.gperf\"\n+#line 516 \"metafns.gperf\"\n {\"is_copy_constructor\", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 551 \"metafns.gperf\"\n+#line 552 \"metafns.gperf\"\n {\"variable_of\", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},\n-#line 544 \"metafns.gperf\"\n- {\"has_parent\", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},\n-#line 592 \"metafns.gperf\"\n+#line 593 \"metafns.gperf\"\n {\"is_reflection_type\", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 595 \"metafns.gperf\"\n+#line 596 \"metafns.gperf\"\n {\"is_fundamental_type\", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 655 \"metafns.gperf\"\n+#line 657 \"metafns.gperf\"\n {\"is_layout_compatible_type\", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 566 \"metafns.gperf\"\n+#line 567 \"metafns.gperf\"\n {\"bit_size_of\", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 518 \"metafns.gperf\"\n+#line 519 \"metafns.gperf\"\n {\"is_copy_assignment\", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 691 \"metafns.gperf\"\n+#line 693 \"metafns.gperf\"\n {\"current\", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,},\n-#line 678 \"metafns.gperf\"\n+#line 680 \"metafns.gperf\"\n {\"common_type\", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 533 \"metafns.gperf\"\n+#line 534 \"metafns.gperf\"\n {\"is_constructor_template\", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 688 \"metafns.gperf\"\n- {\"type_order\", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},\n-#line 679 \"metafns.gperf\"\n+#line 681 \"metafns.gperf\"\n {\"common_reference\", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 543 \"metafns.gperf\"\n- {\"has_default_member_initializer\", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},\n-#line 685 \"metafns.gperf\"\n+#line 565 \"metafns.gperf\"\n+ {\"size_of\", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n+#line 687 \"metafns.gperf\"\n {\"tuple_element\", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 572 \"metafns.gperf\"\n+#line 573 \"metafns.gperf\"\n {\"reflect_function\", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 523 \"metafns.gperf\"\n- {\"has_default_argument\", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,},\n-#line 618 \"metafns.gperf\"\n+#line 625 \"metafns.gperf\"\n+ {\"is_swappable_type\", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 620 \"metafns.gperf\"\n {\"is_move_constructible_type\", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 469 \"metafns.gperf\"\n- {\"type_of\", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 513 \"metafns.gperf\"\n+#line 514 \"metafns.gperf\"\n {\"is_constructor\", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 623 \"metafns.gperf\"\n- {\"is_swappable_type\", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 641 \"metafns.gperf\"\n+#line 643 \"metafns.gperf\"\n {\"is_nothrow_swappable_type\", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 593 \"metafns.gperf\"\n+#line 594 \"metafns.gperf\"\n {\"is_reference_type\", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 500 \"metafns.gperf\"\n- {\"has_linkage\", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 640 \"metafns.gperf\"\n+#line 642 \"metafns.gperf\"\n {\"is_nothrow_swappable_with_type\", METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 599 \"metafns.gperf\"\n+#line 600 \"metafns.gperf\"\n {\"is_member_pointer_type\", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 621 \"metafns.gperf\"\n+#line 623 \"metafns.gperf\"\n {\"is_move_assignable_type\", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 524 \"metafns.gperf\"\n- {\"has_ellipsis_parameter\", METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 516 \"metafns.gperf\"\n+#line 517 \"metafns.gperf\"\n {\"is_move_constructor\", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 550 \"metafns.gperf\"\n+#line 551 \"metafns.gperf\"\n {\"parameters_of\", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 564 \"metafns.gperf\"\n- {\"size_of\", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 519 \"metafns.gperf\"\n+#line 520 \"metafns.gperf\"\n {\"is_move_assignment\", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 619 \"metafns.gperf\"\n+#line 621 \"metafns.gperf\"\n {\"is_assignable_type\", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 538 \"metafns.gperf\"\n+#line 539 \"metafns.gperf\"\n {\"is_class_member\", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 602 \"metafns.gperf\"\n+#line 603 \"metafns.gperf\"\n {\"is_trivially_copyable_type\", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 517 \"metafns.gperf\"\n+#line 518 \"metafns.gperf\"\n {\"is_assignment\", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 539 \"metafns.gperf\"\n+#line 540 \"metafns.gperf\"\n {\"is_namespace_member\", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 557 \"metafns.gperf\"\n+#line 558 \"metafns.gperf\"\n {\"members_of\", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 625 \"metafns.gperf\"\n+#line 627 \"metafns.gperf\"\n {\"is_trivially_constructible_type\", METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 630 \"metafns.gperf\"\n+#line 632 \"metafns.gperf\"\n {\"is_trivially_copy_assignable_type\", METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 627 \"metafns.gperf\"\n+#line 609 \"metafns.gperf\"\n+ {\"is_aggregate_type\", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 629 \"metafns.gperf\"\n {\"is_trivially_copy_constructible_type\", METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 649 \"metafns.gperf\"\n+#line 586 \"metafns.gperf\"\n+ {\"is_rvalue_reference_type\", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 646 \"metafns.gperf\"\n+ {\"has_virtual_destructor\", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,},\n+#line 651 \"metafns.gperf\"\n {\"extent\", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},\n-#line 588 \"metafns.gperf\"\n+#line 589 \"metafns.gperf\"\n {\"is_enum_type\", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 548 \"metafns.gperf\"\n+#line 549 \"metafns.gperf\"\n {\"template_of\", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},\n-#line 528 \"metafns.gperf\"\n+#line 529 \"metafns.gperf\"\n {\"is_class_template\", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 512 \"metafns.gperf\"\n+#line 513 \"metafns.gperf\"\n {\"is_special_member_function\", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 473 \"metafns.gperf\"\n+#line 474 \"metafns.gperf\"\n {\"is_protected\", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},\n-#line 540 \"metafns.gperf\"\n+#line 585 \"metafns.gperf\"\n+ {\"is_lvalue_reference_type\", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 541 \"metafns.gperf\"\n {\"is_nonstatic_data_member\", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 682 \"metafns.gperf\"\n- {\"unwrap_reference\", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 502 \"metafns.gperf\"\n+#line 503 \"metafns.gperf\"\n {\"is_enumerable_type\", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 594 \"metafns.gperf\"\n+#line 494 \"metafns.gperf\"\n+ {\"has_static_storage_duration\", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n+#line 595 \"metafns.gperf\"\n {\"is_arithmetic_type\", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 545 \"metafns.gperf\"\n+#line 546 \"metafns.gperf\"\n {\"parent_of\", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},\n-#line 476 \"metafns.gperf\"\n+#line 477 \"metafns.gperf\"\n {\"is_pure_virtual\", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 675 \"metafns.gperf\"\n+#line 677 \"metafns.gperf\"\n {\"add_pointer\", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 616 \"metafns.gperf\"\n+#line 618 \"metafns.gperf\"\n {\"is_default_constructible_type\", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 680 \"metafns.gperf\"\n- {\"underlying_type\", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},\n-#line 521 \"metafns.gperf\"\n+#line 522 \"metafns.gperf\"\n {\"is_function_parameter\", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 464 \"metafns.gperf\"\n- {\"identifier_of\", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 597 \"metafns.gperf\"\n+#line 624 \"metafns.gperf\"\n+ {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n+#line 499 \"metafns.gperf\"\n+ {\"has_external_linkage\", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n+#line 598 \"metafns.gperf\"\n {\"is_scalar_type\", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 669 \"metafns.gperf\"\n+#line 671 \"metafns.gperf\"\n {\"add_rvalue_reference\", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 490 \"metafns.gperf\"\n+#line 491 \"metafns.gperf\"\n {\"is_mutable_member\", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 507 \"metafns.gperf\"\n+#line 508 \"metafns.gperf\"\n {\"is_namespace_alias\", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 631 \"metafns.gperf\"\n+#line 684 \"metafns.gperf\"\n+ {\"unwrap_reference\", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},\n+#line 633 \"metafns.gperf\"\n {\"is_trivially_move_assignable_type\", METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 628 \"metafns.gperf\"\n+#line 630 \"metafns.gperf\"\n {\"is_trivially_move_constructible_type\", METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 514 \"metafns.gperf\"\n+#line 515 \"metafns.gperf\"\n {\"is_default_constructor\", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 486 \"metafns.gperf\"\n+#line 487 \"metafns.gperf\"\n {\"is_enumerator\", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 536 \"metafns.gperf\"\n+#line 537 \"metafns.gperf\"\n {\"is_object\", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},\n-#line 608 \"metafns.gperf\"\n- {\"is_aggregate_type\", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 520 \"metafns.gperf\"\n+#line 682 \"metafns.gperf\"\n+ {\"underlying_type\", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},\n+#line 521 \"metafns.gperf\"\n {\"is_destructor\", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 587 \"metafns.gperf\"\n+#line 605 \"metafns.gperf\"\n+ {\"is_empty_type\", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 588 \"metafns.gperf\"\n {\"is_member_function_pointer_type\", METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 596 \"metafns.gperf\"\n+#line 465 \"metafns.gperf\"\n+ {\"identifier_of\", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},\n+#line 597 \"metafns.gperf\"\n {\"is_object_type\", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 569 \"metafns.gperf\"\n- {\"substitute\", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 585 \"metafns.gperf\"\n- {\"is_rvalue_reference_type\", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 666 \"metafns.gperf\"\n+#line 602 \"metafns.gperf\"\n+ {\"is_volatile_type\", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 668 \"metafns.gperf\"\n {\"add_cv\", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},\n-#line 570 \"metafns.gperf\"\n+#line 574 \"metafns.gperf\"\n+ {\"reflect_constant_string\", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,},\n+#line 571 \"metafns.gperf\"\n {\"reflect_constant\", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,},\n-#line 629 \"metafns.gperf\"\n+#line 631 \"metafns.gperf\"\n {\"is_trivially_assignable_type\", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 475 \"metafns.gperf\"\n- {\"is_virtual\", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 493 \"metafns.gperf\"\n- {\"has_static_storage_duration\", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 668 \"metafns.gperf\"\n+#line 670 \"metafns.gperf\"\n {\"add_lvalue_reference\", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 584 \"metafns.gperf\"\n- {\"is_lvalue_reference_type\", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 562 \"metafns.gperf\"\n+#line 667 \"metafns.gperf\"\n+ {\"add_volatile\", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},\n+#line 673 \"metafns.gperf\"\n+ {\"make_unsigned\", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},\n+#line 563 \"metafns.gperf\"\n {\"enumerators_of\", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 624 \"metafns.gperf\"\n+#line 626 \"metafns.gperf\"\n {\"is_destructible_type\", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 549 \"metafns.gperf\"\n+#line 550 \"metafns.gperf\"\n {\"template_arguments_of\", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 657 \"metafns.gperf\"\n+#line 659 \"metafns.gperf\"\n {\"is_invocable_type\", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 664 \"metafns.gperf\"\n+#line 666 \"metafns.gperf\"\n {\"add_const\", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 529 \"metafns.gperf\"\n+#line 570 \"metafns.gperf\"\n+ {\"substitute\", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n+#line 530 \"metafns.gperf\"\n {\"is_alias_template\", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 604 \"metafns.gperf\"\n- {\"is_empty_type\", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 632 \"metafns.gperf\"\n+#line 601 \"metafns.gperf\"\n+ {\"is_const_type\", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 634 \"metafns.gperf\"\n {\"is_trivially_destructible_type\", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 498 \"metafns.gperf\"\n- {\"has_external_linkage\", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 553 \"metafns.gperf\"\n+#line 484 \"metafns.gperf\"\n+ {\"is_explicit\", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},\n+#line 554 \"metafns.gperf\"\n {\"is_accessible\", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 658 \"metafns.gperf\"\n+#line 660 \"metafns.gperf\"\n {\"is_invocable_r_type\", METAFN_IS_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n-#line 652 \"metafns.gperf\"\n- {\"is_virtual_base_of_type\", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 601 \"metafns.gperf\"\n- {\"is_volatile_type\", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 573 \"metafns.gperf\"\n- {\"reflect_constant_string\", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 626 \"metafns.gperf\"\n+#line 502 \"metafns.gperf\"\n+ {\"is_complete_type\", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},\n+#line 611 \"metafns.gperf\"\n+ {\"is_structural_type\", METAFN_IS_STRUCTURAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 628 \"metafns.gperf\"\n {\"is_trivially_default_constructible_type\", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 532 \"metafns.gperf\"\n- {\"is_literal_operator_template\", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 460 \"metafns.gperf\"\n+#line 478 \"metafns.gperf\"\n+ {\"is_override\", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},\n+#line 461 \"metafns.gperf\"\n {\"operator_of\", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},\n-#line 610 \"metafns.gperf\"\n- {\"is_signed_type\", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 614 \"metafns.gperf\"\n+#line 592 \"metafns.gperf\"\n+ {\"is_function_type\", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 665 \"metafns.gperf\"\n+ {\"remove_cv\", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},\n+#line 616 \"metafns.gperf\"\n {\"is_scoped_enum_type\", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 622 \"metafns.gperf\"\n- {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 561 \"metafns.gperf\"\n+#line 538 \"metafns.gperf\"\n+ {\"is_structured_binding\", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,},\n+#line 562 \"metafns.gperf\"\n {\"subobjects_of\", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 563 \"metafns.gperf\"\n+#line 564 \"metafns.gperf\"\n {\"offset_of\", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},\n-#line 537 \"metafns.gperf\"\n- {\"is_structured_binding\", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,},\n-#line 478 \"metafns.gperf\"\n- {\"is_final\", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},\n-#line 511 \"metafns.gperf\"\n- {\"is_literal_operator\", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 671 \"metafns.gperf\"\n- {\"make_unsigned\", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},\n+#line 669 \"metafns.gperf\"\n+ {\"remove_reference\", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n #line 467 \"metafns.gperf\"\n- {\"u8display_string_of\", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 644 \"metafns.gperf\"\n- {\"has_virtual_destructor\", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,},\n-#line 600 \"metafns.gperf\"\n- {\"is_const_type\", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 483 \"metafns.gperf\"\n- {\"is_explicit\", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},\n-#line 576 \"metafns.gperf\"\n+ {\"display_string_of\", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,},\n+#line 523 \"metafns.gperf\"\n+ {\"is_explicit_object_parameter\", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,},\n+#line 577 \"metafns.gperf\"\n {\"is_data_member_spec\", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,},\n-#line 501 \"metafns.gperf\"\n- {\"is_complete_type\", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 487 \"metafns.gperf\"\n+#line 674 \"metafns.gperf\"\n+ {\"remove_extent\", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},\n+#line 488 \"metafns.gperf\"\n {\"is_annotation\", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},\n-#line 591 \"metafns.gperf\"\n- {\"is_function_type\", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 552 \"metafns.gperf\"\n- {\"return_type_of\", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 479 \"metafns.gperf\"\n- {\"is_deleted\", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},\n-#line 471 \"metafns.gperf\"\n- {\"constant_of\", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},\n-#line 665 \"metafns.gperf\"\n- {\"add_volatile\", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},\n+#line 493 \"metafns.gperf\"\n+ {\"is_rvalue_reference_qualified\", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n #line 480 \"metafns.gperf\"\n+ {\"is_deleted\", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},\n+#line 468 \"metafns.gperf\"\n+ {\"u8display_string_of\", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n+#line 481 \"metafns.gperf\"\n {\"is_defaulted\", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},\n-#line 645 \"metafns.gperf\"\n- {\"has_unique_object_representations\", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},\n-#line 586 \"metafns.gperf\"\n+#line 587 \"metafns.gperf\"\n {\"is_member_object_pointer_type\", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 466 \"metafns.gperf\"\n- {\"display_string_of\", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 522 \"metafns.gperf\"\n- {\"is_explicit_object_parameter\", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 541 \"metafns.gperf\"\n- {\"is_static_member\", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 470 \"metafns.gperf\"\n- {\"object_of\", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},\n-#line 609 \"metafns.gperf\"\n- {\"is_consteval_only_type\", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 477 \"metafns.gperf\"\n- {\"is_override\", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},\n-#line 663 \"metafns.gperf\"\n- {\"remove_cv\", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},\n-#line 571 \"metafns.gperf\"\n- {\"reflect_object\", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 581 \"metafns.gperf\"\n+#line 582 \"metafns.gperf\"\n {\"is_floating_point_type\", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 463 \"metafns.gperf\"\n- {\"has_identifier\", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},\n-#line 667 \"metafns.gperf\"\n- {\"remove_reference\", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 555 \"metafns.gperf\"\n- {\"has_inaccessible_bases\", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 499 \"metafns.gperf\"\n- {\"has_c_language_linkage\", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 556 \"metafns.gperf\"\n- {\"has_inaccessible_subobjects\", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 672 \"metafns.gperf\"\n- {\"remove_extent\", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},\n-#line 554 \"metafns.gperf\"\n- {\"has_inaccessible_nonstatic_data_members\", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n #line 492 \"metafns.gperf\"\n- {\"is_rvalue_reference_qualified\", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 647 \"metafns.gperf\"\n+ {\"is_lvalue_reference_qualified\", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n+#line 500 \"metafns.gperf\"\n+ {\"has_c_language_linkage\", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n+#line 678 \"metafns.gperf\"\n+ {\"remove_cvref\", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},\n+#line 471 \"metafns.gperf\"\n+ {\"object_of\", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},\n+#line 610 \"metafns.gperf\"\n+ {\"is_consteval_only_type\", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 676 \"metafns.gperf\"\n+ {\"remove_pointer\", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},\n+#line 553 \"metafns.gperf\"\n+ {\"return_type_of\", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n+#line 472 \"metafns.gperf\"\n+ {\"constant_of\", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},\n+#line 649 \"metafns.gperf\"\n {\"reference_converts_from_temporary\", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 590 \"metafns.gperf\"\n+#line 663 \"metafns.gperf\"\n+ {\"remove_const\", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},\n+#line 591 \"metafns.gperf\"\n {\"is_class_type\", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 482 \"metafns.gperf\"\n- {\"is_user_declared\", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},\n-#line 575 \"metafns.gperf\"\n+#line 576 \"metafns.gperf\"\n {\"data_member_spec\", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},\n-#line 491 \"metafns.gperf\"\n- {\"is_lvalue_reference_qualified\", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 494 \"metafns.gperf\"\n+#line 675 \"metafns.gperf\"\n+ {\"remove_all_extents\", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,},\n+#line 542 \"metafns.gperf\"\n+ {\"is_static_member\", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},\n+#line 495 \"metafns.gperf\"\n {\"has_thread_storage_duration\", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 485 \"metafns.gperf\"\n- {\"is_bit_field\", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},\n-#line 676 \"metafns.gperf\"\n- {\"remove_cvref\", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},\n-#line 681 \"metafns.gperf\"\n- {\"invoke_result\", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},\n-#line 547 \"metafns.gperf\"\n+#line 476 \"metafns.gperf\"\n+ {\"is_virtual\", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n+#line 548 \"metafns.gperf\"\n {\"has_template_arguments\", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,},\n-#line 510 \"metafns.gperf\"\n- {\"is_operator_function\", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 674 \"metafns.gperf\"\n- {\"remove_pointer\", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 546 \"metafns.gperf\"\n- {\"dealias\", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},\n-#line 661 \"metafns.gperf\"\n- {\"remove_const\", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 531 \"metafns.gperf\"\n- {\"is_operator_function_template\", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 646 \"metafns.gperf\"\n+#line 647 \"metafns.gperf\"\n+ {\"has_unique_object_representations\", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},\n+#line 654 \"metafns.gperf\"\n+ {\"is_virtual_base_of_type\", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n+#line 648 \"metafns.gperf\"\n {\"reference_constructs_from_temporary\", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 673 \"metafns.gperf\"\n- {\"remove_all_extents\", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,},\n-#line 582 \"metafns.gperf\"\n- {\"is_array_type\", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 496 \"metafns.gperf\"\n- {\"has_internal_linkage\", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 670 \"metafns.gperf\"\n+#line 533 \"metafns.gperf\"\n+ {\"is_literal_operator_template\", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n+#line 672 \"metafns.gperf\"\n {\"make_signed\", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 559 \"metafns.gperf\"\n- {\"static_data_members_of\", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 598 \"metafns.gperf\"\n+#line 583 \"metafns.gperf\"\n+ {\"is_array_type\", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 612 \"metafns.gperf\"\n+ {\"is_signed_type\", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 599 \"metafns.gperf\"\n {\"is_compound_type\", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 606 \"metafns.gperf\"\n+#line 479 \"metafns.gperf\"\n+ {\"is_final\", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},\n+#line 512 \"metafns.gperf\"\n+ {\"is_literal_operator\", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,},\n+#line 607 \"metafns.gperf\"\n {\"is_abstract_type\", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 577 \"metafns.gperf\"\n- {\"define_aggregate\", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 692 \"metafns.gperf\"\n+#line 483 \"metafns.gperf\"\n+ {\"is_user_declared\", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},\n+#line 464 \"metafns.gperf\"\n+ {\"has_identifier\", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},\n+#line 556 \"metafns.gperf\"\n+ {\"has_inaccessible_bases\", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n+#line 557 \"metafns.gperf\"\n+ {\"has_inaccessible_subobjects\", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n+#line 683 \"metafns.gperf\"\n+ {\"invoke_result\", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},\n+#line 511 \"metafns.gperf\"\n+ {\"is_operator_function\", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,},\n+#line 555 \"metafns.gperf\"\n+ {\"has_inaccessible_nonstatic_data_members\", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n+#line 694 \"metafns.gperf\"\n {\"_S_exception_cvt_to_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},\n-#line 693 \"metafns.gperf\"\n+#line 695 \"metafns.gperf\"\n {\"_S_exception_cvt_from_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, METAFN_KIND_STRING_VIEW_INPUT_RANGE,},\n-#line 613 \"metafns.gperf\"\n- {\"is_unbounded_array_type\", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 603 \"metafns.gperf\"\n- {\"is_standard_layout_type\", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 683 \"metafns.gperf\"\n- {\"unwrap_ref_decay\", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 574 \"metafns.gperf\"\n+#line 532 \"metafns.gperf\"\n+ {\"is_operator_function_template\", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n+#line 664 \"metafns.gperf\"\n+ {\"remove_volatile\", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},\n+#line 575 \"metafns.gperf\"\n {\"reflect_constant_array\", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 462 \"metafns.gperf\"\n- {\"u8symbol_of\", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,},\n-#line 580 \"metafns.gperf\"\n+#line 578 \"metafns.gperf\"\n+ {\"define_aggregate\", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n+#line 581 \"metafns.gperf\"\n {\"is_integral_type\", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 560 \"metafns.gperf\"\n- {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 677 \"metafns.gperf\"\n+#line 572 \"metafns.gperf\"\n+ {\"reflect_object\", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n+#line 679 \"metafns.gperf\"\n {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 607 \"metafns.gperf\"\n- {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 662 \"metafns.gperf\"\n- {\"remove_volatile\", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 565 \"metafns.gperf\"\n+#line 685 \"metafns.gperf\"\n+ {\"unwrap_ref_decay\", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},\n+#line 463 \"metafns.gperf\"\n+ {\"u8symbol_of\", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,},\n+#line 497 \"metafns.gperf\"\n+ {\"has_internal_linkage\", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n+#line 615 \"metafns.gperf\"\n+ {\"is_unbounded_array_type\", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 566 \"metafns.gperf\"\n {\"alignment_of\", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 468 \"metafns.gperf\"\n+#line 604 \"metafns.gperf\"\n+ {\"is_standard_layout_type\", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 486 \"metafns.gperf\"\n+ {\"is_bit_field\", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},\n+#line 547 \"metafns.gperf\"\n+ {\"dealias\", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},\n+#line 561 \"metafns.gperf\"\n+ {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n+#line 469 \"metafns.gperf\"\n {\"source_location_of\", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,},\n-#line 690 \"metafns.gperf\"\n+#line 560 \"metafns.gperf\"\n+ {\"static_data_members_of\", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n+#line 692 \"metafns.gperf\"\n {\"annotations_of_with_type\", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,},\n-#line 465 \"metafns.gperf\"\n+#line 466 \"metafns.gperf\"\n {\"u8identifier_of\", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 689 \"metafns.gperf\"\n- {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 589 \"metafns.gperf\"\n+#line 590 \"metafns.gperf\"\n {\"is_union_type\", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 481 \"metafns.gperf\"\n+#line 608 \"metafns.gperf\"\n+ {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 691 \"metafns.gperf\"\n+ {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n+#line 482 \"metafns.gperf\"\n {\"is_user_provided\", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,},\n-#line 611 \"metafns.gperf\"\n+#line 613 \"metafns.gperf\"\n {\"is_unsigned_type\", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,}\n };\n #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)\n@@ -1074,87 +1077,86 @@ metafn_lookup::find (const char *str, si\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,\n- -1, -1, 1, -1, -1, 2, 3, -1, 4, -1,\n- -1, -1, 5, -1, -1, -1, 6, 7, -1, 8,\n- 9, 10, 11, -1, 12, 13, 14, -1, -1, 15,\n- 16, -1, 17, -1, -1, 18, -1, 19, -1, 20,\n- -1, 21, 22, -1, 23, -1, -1, -1, -1, 24,\n- 25, 26, 27, -1, -1, 28, 29, -1, 30, -1,\n- 31, -1, 32, 33, -1, 34, -1, -1, -1, -1,\n- 35, 36, 37, 38, 39, 40, -1, -1, -1, -1,\n- -1, 41, 42, -1, 43, -1, 44, -1, -1, 45,\n- -1, 46, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, -1, 47, 48, 49, -1,\n- 50, -1, -1, 51, 52, -1, 53, 54, 55, 56,\n- 57, 58, -1, 59, -1, -1, -1, 60, -1, -1,\n- -1, 61, -1, 62, -1, 63, 64, 65, 66, -1,\n- -1, 67, -1, -1, -1, -1, -1, 68, -1, -1,\n- -1, 69, 70, -1, 71, -1, -1, 72, -1, -1,\n- 73, -1, 74, 75, -1, 76, -1, 77, 78, 79,\n- -1, -1, -1, -1, 80, -1, -1, -1, 81, -1,\n- -1, -1, 82, 83, -1, -1, -1, -1, 84, -1,\n+ -1, -1, -1, -1, -1, -1, 0, -1, -1, 1,\n+ -1, -1, 2, -1, -1, 3, 4, -1, 5, -1,\n+ -1, -1, 6, -1, -1, -1, 7, 8, -1, 9,\n+ 10, 11, 12, -1, 13, 14, 15, -1, -1, 16,\n+ 17, -1, 18, -1, -1, 19, -1, 20, 21, 22,\n+ -1, 23, 24, -1, 25, -1, -1, -1, 26, 27,\n+ 28, 29, 30, -1, -1, 31, 32, -1, 33, -1,\n+ 34, -1, 35, 36, -1, -1, -1, -1, 37, -1,\n+ 38, 39, 40, 41, 42, 43, -1, -1, 44, -1,\n+ -1, 45, 46, -1, 47, -1, 48, -1, -1, 49,\n+ 50, 51, -1, -1, 52, -1, -1, -1, -1, -1,\n+ 53, -1, -1, -1, -1, -1, 54, 55, 56, -1,\n+ 57, -1, -1, 58, 59, -1, 60, -1, 61, 62,\n+ 63, 64, -1, 65, -1, -1, -1, 66, -1, -1,\n+ -1, 67, -1, 68, -1, -1, 69, 70, 71, -1,\n+ -1, 72, -1, -1, -1, -1, -1, 73, -1, -1,\n+ -1, 74, -1, -1, 75, -1, -1, -1, -1, -1,\n+ 76, -1, 77, -1, -1, 78, -1, 79, 80, -1,\n+ -1, -1, -1, -1, 81, -1, -1, -1, 82, -1,\n+ -1, -1, -1, 83, -1, -1, -1, -1, 84, -1,\n 85, 86, -1, 87, 88, 89, 90, -1, 91, -1,\n- -1, 92, -1, -1, -1, -1, 93, 94, -1, -1,\n- -1, 95, 96, -1, -1, -1, 97, 98, -1, -1,\n- -1, -1, -1, -1, 99, -1, 100, -1, 101, -1,\n- -1, -1, -1, 102, 103, 104, 105, -1, -1, 106,\n- 107, 108, -1, -1, -1, -1, -1, -1, 109, 110,\n- 111, -1, 112, 113, -1, -1, -1, -1, 114, -1,\n- -1, 115, 116, 117, 118, -1, -1, -1, -1, 119,\n- -1, -1, -1, 120, -1, -1, 121, -1, -1, 122,\n- 123, -1, -1, 124, -1, -1, 125, -1, -1, -1,\n- -1, 126, -1, 127, -1, -1, -1, -1, 128, 129,\n- 130, -1, -1, 131, 132, 133, 134, 135, -1, 136,\n- -1, -1, 137, -1, 138, 139, -1, 140, 141, 142,\n- -1, 143, 144, 145, 146, -1, 147, -1, -1, -1,\n- -1, 148, 149, -1, 150, -1, 151, -1, 152, 153,\n- -1, 154, -1, -1, -1, -1, 155, 156, 157, 158,\n- -1, -1, -1, 159, 160, -1, -1, 161, -1, 162,\n- -1, -1, 163, 164, -1, -1, -1, -1, -1, -1,\n- -1, -1, 165, -1, 166, 167, 168, -1, -1, -1,\n- -1, 169, 170, 171, 172, -1, -1, 173, -1, -1,\n- -1, -1, -1, -1, 174, -1, 175, -1, -1, 176,\n- -1, -1, 177, -1, -1, 178, -1, -1, -1, -1,\n- -1, -1, -1, 179, -1, -1, -1, 180, -1, -1,\n- -1, -1, 181, -1, 182, 183, -1, 184, -1, 185,\n- -1, -1, 186, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, 187, -1, 188, -1, -1, -1, 189, 190,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, 191,\n- -1, 192, -1, -1, -1, -1, 193, -1, 194, 195,\n- 196, 197, -1, 198, -1, -1, -1, -1, -1, 199,\n- 200, -1, -1, 201, -1, -1, -1, -1, -1, -1,\n- 202, 203, -1, -1, 204, -1, -1, -1, -1, -1,\n- -1, 205, 206, -1, -1, -1, -1, -1, -1, 207,\n- 208, 209, -1, -1, -1, 210, -1, -1, -1, -1,\n- -1, -1, 211, -1, -1, -1, -1, 212, -1, -1,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, 213, -1, -1, -1, 214, -1, 215, 216, -1,\n- -1, -1, -1, -1, -1, -1, -1, -1, 217, -1,\n- -1, -1, -1, -1, -1, -1, -1, 218, -1, -1,\n- -1, -1, -1, 219, -1, -1, -1, 220, -1, -1,\n- -1, -1, 221, -1, -1, -1, -1, -1, -1, -1,\n- 222, -1, -1, -1, -1, -1, 223, -1, -1, -1,\n- -1, -1, 224, -1, -1, -1, -1, -1, -1, 225,\n+ 92, 93, -1, 94, 95, -1, 96, 97, -1, -1,\n+ -1, 98, 99, -1, -1, -1, 100, 101, -1, -1,\n+ -1, -1, -1, 102, 103, -1, -1, -1, 104, -1,\n+ 105, -1, -1, 106, 107, 108, 109, -1, -1, 110,\n+ -1, 111, -1, -1, -1, -1, 112, -1, 113, 114,\n+ 115, -1, 116, 117, -1, -1, 118, -1, 119, -1,\n+ -1, 120, 121, 122, 123, -1, -1, -1, -1, -1,\n+ 124, -1, -1, 125, 126, -1, 127, -1, 128, 129,\n+ -1, -1, 130, -1, -1, -1, 131, -1, 132, -1,\n+ -1, 133, -1, 134, -1, -1, -1, -1, -1, -1,\n+ 135, 136, -1, 137, 138, 139, 140, 141, -1, 142,\n+ 143, -1, 144, -1, 145, 146, -1, 147, 148, 149,\n+ -1, -1, 150, 151, 152, 153, -1, -1, -1, -1,\n+ -1, 154, 155, 156, 157, -1, 158, -1, 159, 160,\n+ -1, -1, -1, -1, -1, 161, -1, -1, -1, -1,\n+ -1, -1, 162, -1, 163, -1, -1, -1, -1, 164,\n+ -1, -1, 165, 166, -1, -1, -1, -1, 167, -1,\n+ -1, -1, -1, -1, -1, 168, -1, -1, -1, 169,\n+ -1, -1, 170, -1, 171, -1, -1, 172, 173, -1,\n+ 174, 175, -1, -1, -1, -1, -1, -1, -1, 176,\n+ -1, -1, 177, 178, 179, -1, 180, -1, -1, 181,\n+ -1, 182, -1, -1, -1, -1, -1, -1, -1, 183,\n+ -1, 184, 185, -1, -1, -1, 186, -1, -1, -1,\n+ 187, -1, -1, -1, -1, -1, 188, -1, -1, -1,\n+ 189, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n+ -1, -1, 190, -1, -1, -1, -1, -1, -1, 191,\n+ -1, 192, -1, -1, 193, -1, 194, -1, -1, 195,\n+ 196, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n+ -1, -1, 197, -1, 198, 199, -1, 200, -1, -1,\n+ -1, 201, -1, 202, -1, -1, 203, -1, -1, -1,\n+ -1, 204, -1, 205, -1, -1, -1, -1, -1, -1,\n+ 206, -1, -1, 207, -1, 208, -1, 209, -1, -1,\n+ -1, -1, -1, -1, 210, -1, -1, -1, -1, -1,\n+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 211,\n+ -1, -1, -1, 212, -1, -1, -1, -1, -1, -1,\n+ -1, 213, 214, -1, -1, 215, -1, -1, -1, -1,\n+ -1, -1, -1, -1, -1, -1, 216, 217, -1, -1,\n+ -1, -1, -1, -1, -1, -1, -1, 218, -1, 219,\n+ -1, -1, -1, -1, -1, -1, -1, -1, 220, -1,\n+ -1, -1, -1, -1, -1, -1, -1, 221, 222, -1,\n+ -1, -1, -1, -1, -1, -1, -1, -1, 223, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, 226, -1, -1, -1, -1, -1, 227, -1,\n- -1, -1, -1, -1, 228, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, 229, -1, -1, -1, -1,\n+ -1, -1, -1, -1, -1, -1, -1, -1, 224, -1,\n+ 225, -1, -1, -1, -1, -1, -1, -1, 226, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n+ -1, -1, -1, 227, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, 230, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, 231,\n- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n+ -1, -1, -1, -1, 228, -1, -1, -1, -1, -1,\n+ -1, -1, -1, -1, -1, 229, -1, -1, -1, -1,\n+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 230,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n+ 231, -1, -1, -1, 232, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, 232, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n+ -1, 233, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n@@ -1162,7 +1164,7 @@ metafn_lookup::find (const char *str, si\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n- -1, -1, -1, -1, -1, -1, -1, 233\n+ -1, -1, -1, -1, -1, -1, -1, 234\n };\n \n if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)\n", "prefixes": [] }