Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2219563/?format=api
{ "id": 2219563, "url": "http://patchwork.ozlabs.org/api/patches/2219563/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/ac-2fJliydDaFU4Z@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": "<ac-2fJliydDaFU4Z@tucnak>", "list_archive_url": null, "date": "2026-04-03T12:45:48", "name": "c++, v2: Error recovery for fuzzed <meta> [PR124689]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "7b5ffb0ef6ba8229583dd0db8d84472ad0cae7f8", "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/ac-2fJliydDaFU4Z@tucnak/mbox/", "series": [ { "id": 498625, "url": "http://patchwork.ozlabs.org/api/series/498625/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=498625", "date": "2026-04-03T12:45:48", "name": "c++, v2: Error recovery for fuzzed <meta> [PR124689]", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498625/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2219563/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2219563/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=Qpzx/k2y;\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=Qpzx/k2y", "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 4fnJPh70Znz1yDH\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 23:46:32 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 0129A4BA23C7\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 3 Apr 2026 12:46:31 +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 5F2A94BA2E2B\n for <gcc-patches@gcc.gnu.org>; Fri, 3 Apr 2026 12:45:55 +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-541-QH2T-VF6OWigp59c7sHjPA-1; Fri,\n 03 Apr 2026 08:45:53 -0400", "from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111])\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 AD9581800344\n for <gcc-patches@gcc.gnu.org>; Fri, 3 Apr 2026 12:45:52 +0000 (UTC)", "from tucnak.zalov.cz (unknown [10.44.32.9])\n by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id 97BD51800576; Fri, 3 Apr 2026 12:45:51 +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 633Cjm1U3718286\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Fri, 3 Apr 2026 14:45:48 +0200", "(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 633CjmJ43718285;\n Fri, 3 Apr 2026 14:45:48 +0200" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 0129A4BA23C7", "OpenDKIM Filter v2.11.0 sourceware.org 5F2A94BA2E2B" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 5F2A94BA2E2B", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 5F2A94BA2E2B", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775220355; cv=none;\n b=pDV6fFx4ymiC0mQN0L68Kje4Gt/bpEs4qG3eljKm7cWO1gSAE1rNqNEaZ7fFp67eie67VcZbKi0FW1Hk/k9/aEl77hGrOwEau4+PyjiV5WyE+FHNyLttKaJFO/sVDVrduSc/8HHvSd2rFHTzXqFxm1Nb7TCWywKkcU0CNS2FcKI=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775220355; c=relaxed/simple;\n bh=MydJOzhqqE+Zi4giRbVkqGub9AQa7AFP4zR3e9TzOP0=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=PGrDieG3QNXQnMq2tAb1iFMzC3GjrKFuJ3+45zPlakjC79Pg326cY4u3jEZFSwwPKS44nXRRy1SmkOvZcFZ060kzjD8V1rWyUPg1X1kpzv/ScgsB+YPoQAkIKlTKwUg8t2qPVfJeOpfTUiDgv6T7Xi1hh7JjrUu1Fqig0ARve0Q=", "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=1775220355;\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:in-reply-to:in-reply-to: references:references;\n bh=iIpZIvbBbKi6euF1G5VhFh3U5DlguEeqHs8CNJV89Pk=;\n b=Qpzx/k2yURLisWteVBpiYdb5WIyEUqmvD0WjubQk1I4FVhQRDW3mAWRIdWtdz7WTI8ICs9\n dD8OKDeJ0YVQlBPq6b6VxQPNVjr5zDFoJ4l1icGB9WOblL3SMK3qWpwwiX1BDhtbgQsWtL\n a5YFn2AfL37hLWkuqI6Ltqg2KxPTCWo=", "X-MC-Unique": "QH2T-VF6OWigp59c7sHjPA-1", "X-Mimecast-MFC-AGG-ID": "QH2T-VF6OWigp59c7sHjPA_1775220352", "Date": "Fri, 3 Apr 2026 14:45:48 +0200", "From": "Jakub Jelinek <jakub@redhat.com>", "To": "Jason Merrill <jason@redhat.com>, Marek Polacek <polacek@redhat.com>", "Cc": "gcc-patches@gcc.gnu.org", "Subject": "[PATCH] c++, v2: Error recovery for fuzzed <meta> [PR124689]", "Message-ID": "<ac-2fJliydDaFU4Z@tucnak>", "References": "<acuFl3n5cTclKXUE@tucnak>\n <ca34180a-ffb4-447c-8c0c-daa87e6cf27e@redhat.com>", "MIME-Version": "1.0", "In-Reply-To": "<ca34180a-ffb4-447c-8c0c-daa87e6cf27e@redhat.com>", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.111", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "Zg_pc-0YI70sWKenuyddirXfHz-3VadHMb1o_omgh5c_1775220352", "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 Fri, Apr 03, 2026 at 12:26:04AM -0400, Jason Merrill wrote:\n> > + case METAFN_KIND_ARG_SIZE_T:\n> > + if (TREE_CODE (type) != INTEGER_TYPE\n> > +\t || TYPE_PRECISION (type) != TYPE_PRECISION (size_type_node)\n> > +\t || !TYPE_UNSIGNED (type))\n> \n> Why not same_type_ignoring...?\n\nChanged.\n> > +\ttype = TREE_TYPE (type);\n> > + if (TREE_CODE (type) != RECORD_TYPE\n> > +\t || TYPE_NAME (type) == NULL_TREE\n> > +\t || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL\n> > +\t || DECL_NAME (TYPE_NAME (type)) == NULL_TREE\n> > +\t || !id_equal (DECL_NAME (TYPE_NAME (type)), \"access_context\")\n> > +\t || TYPE_CONTEXT (type) != std_meta_node)\n> \n> Seems like we want an is_std_meta_class to go with is_std_class, or a more\n> generic version that takes the namespace as an argument.\n\nAdded is_std_meta_class.\n\n> > + tree expected_ret = NULL_TREE;\n> > + const char *expected_ret_str = NULL;\n> > + tree rettype;\n> > + if (TREE_CODE (call) == AGGR_INIT_EXPR)\n> > + rettype = TREE_TYPE (AGGR_INIT_EXPR_SLOT (call));\n> > + else\n> > + rettype = TREE_TYPE (call);\n> > + switch (METAFN_KIND_RET)\n> \n> Please factor the return checking out of process_metafunction as well.\n\nDone.\n\nTested on x86_64-linux, ok for trunk?\n\n2026-04-03 Jakub Jelinek <jakub@redhat.com>\n\n\tPR c++/124689\n\t* metafns.gperf (enum metafn_kind): Add\n\tMETAFN_KIND_BOOL_INFO_REFLECTION_RANGE.\n\t(can_substitute): Use METAFN_KIND_BOOL_INFO_REFLECTION_RANGE\n\tinstead of METAFN_KIND_INFO_INFO_REFLECTION_RANGE.\n\t(METAFN_KIND_ARG): Add MINFO argument.\n\t(METAFN_KIND_RET): Define.\n\t* reflect.cc (is_std_meta_class): New function.\n\t(get_info): Add LOC argument, diagnose invalid argument type instead\n\tof failing assertion.\n\t(check_metafn_arg_type): New function.\n\t(check_metafn_return_type): New function.\n\t(process_metafunction): Diagnose clearly invalid return\n\tor argument types. Use rettype variable instead of TREE_TYPE (call).\n\t* metafns.h: Regenerate.\n\n\t* g++.dg/reflect/pr124689.C: New test.\n\n\n\n\tJakub", "diff": "--- gcc/cp/metafns.gperf.jj\t2026-03-31 23:42:05.560331889 +0200\n+++ gcc/cp/metafns.gperf\t2026-04-03 11:20:21.836980025 +0200\n@@ -267,10 +267,6 @@ enum {\n METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1\n };\n \n-/* Get the metafn_kind_arg for argument ARGNO. */\n-#define METAFN_KIND_ARG(ARGNO) \\\n- ((minfo->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) & METAFN_KIND_MASK)\n-\n /* Possible return types of metafunctions. */\n enum metafn_kind_ret {\n METAFN_KIND_RET_BOOL,\n@@ -288,6 +284,10 @@ enum metafn_kind_ret {\n };\n static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK, \"\");\n \n+/* Get the metafn_kind_ret. */\n+#define METAFN_KIND_RET(MINFO) \\\n+ ((metafn_kind_ret) (((int) (MINFO)->kind) & METAFN_KIND_MASK))\n+\n /* Possible argument types of metafunctions. */\n enum metafn_kind_arg {\n METAFN_KIND_ARG_VOID = 0,\n@@ -308,6 +308,11 @@ enum metafn_kind_arg {\n static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK,\n \t \"\");\n \n+/* Get the metafn_kind_arg for argument ARGNO. */\n+#define METAFN_KIND_ARG(MINFO, ARGNO) \\\n+ ((metafn_kind_arg) (((MINFO)->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) \\\n+\t\t & METAFN_KIND_MASK))\n+\n /* Possible sets of 0-3 arguments of metafunctions. */\n enum metafn_kind_args {\n METAFN_KIND_ARGS_VOID = METAFN_KIND_ARG_VOID,\n@@ -381,6 +386,9 @@ enum metafn_kind {\n METAFN_KIND_INFO_REFLECTION_RANGET\n = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n | METAFN_KIND_RET_INFO,\n+ METAFN_KIND_BOOL_INFO_REFLECTION_RANGE\n+ = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n+ | METAFN_KIND_RET_BOOL,\n METAFN_KIND_INFO_INFO_REFLECTION_RANGE\n = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n | METAFN_KIND_RET_INFO,\n@@ -573,7 +581,7 @@ size_of, METAFN_SIZE_OF, METAFN_KIND_SIZ\n alignment_of, METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,\n bit_size_of, METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,\n extract, METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,\n-can_substitute, METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,\n+can_substitute, METAFN_CAN_SUBSTITUTE, METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,\n substitute, METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,\n reflect_constant, METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,\n reflect_object, METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,\n--- gcc/cp/reflect.cc.jj\t2026-04-03 10:29:43.263184609 +0200\n+++ gcc/cp/reflect.cc\t2026-04-03 11:31:03.702171089 +0200\n@@ -308,6 +308,22 @@ decl_in_std_meta_p (tree decl)\n return decl_namespace_context (decl) == std_meta_node;\n }\n \n+/* True if CTX is an instance of std::meta::NAME class. */\n+\n+static bool\n+is_std_meta_class (tree ctx, const char *name)\n+{\n+ if (ctx == NULL_TREE || !CLASS_TYPE_P (ctx) || !TYPE_MAIN_DECL (ctx))\n+ return false;\n+\n+ tree decl = TYPE_MAIN_DECL (ctx);\n+ tree dname = DECL_NAME (decl);\n+ if (dname == NULL_TREE || !id_equal (dname, name))\n+ return false;\n+\n+ return decl_in_std_meta_p (decl);\n+}\n+\n /* Returns true if FNDECL, a FUNCTION_DECL, is a call to a metafunction\n declared in namespace std::meta. */\n \n@@ -340,12 +356,18 @@ metafunction_p (tree fndecl)\n /* Extract the N-th reflection argument from a metafunction call CALL. */\n \n static tree\n-get_info (const constexpr_ctx *ctx, tree call, int n, bool *non_constant_p,\n-\t bool *overflow_p, tree *jump_target)\n+get_info (location_t loc, const constexpr_ctx *ctx, tree call, int n,\n+\t bool *non_constant_p, bool *overflow_p, tree *jump_target)\n {\n gcc_checking_assert (call_expr_nargs (call) > n);\n tree info = get_nth_callarg (call, n);\n- gcc_checking_assert (REFLECTION_TYPE_P (TREE_TYPE (info)));\n+ if (!REFLECTION_TYPE_P (TREE_TYPE (info)))\n+ {\n+ error_at (loc, \"incorrect %qT type of argument %d, expected %qT\",\n+\t\tTREE_TYPE (info), n + 1, meta_info_type_node);\n+ *non_constant_p = true;\n+ return NULL_TREE;\n+ }\n info = cxx_eval_constant_expression (ctx, info, vc_prvalue,\n \t\t\t\t non_constant_p, overflow_p,\n \t\t\t\t jump_target);\n@@ -7538,6 +7560,146 @@ eval_extract (location_t loc, const cons\n }\n }\n \n+/* Diagnose incorrect type of metafn argument and return true in that\n+ case. */\n+\n+static bool\n+check_metafn_arg_type (location_t loc, metafn_kind_arg kind, int n, tree type,\n+\t\t bool *non_constant_p)\n+{\n+ tree expected = NULL_TREE;\n+ const char *expected_str = NULL;\n+ switch ((metafn_kind_arg) kind)\n+ {\n+ case METAFN_KIND_ARG_VOID:\n+ break;\n+ case METAFN_KIND_ARG_INFO:\n+ case METAFN_KIND_ARG_TINFO:\n+ if (!REFLECTION_TYPE_P (type))\n+\texpected = meta_info_type_node;\n+ break;\n+ case METAFN_KIND_ARG_REFLECTION_RANGE:\n+ case METAFN_KIND_ARG_REFLECTION_RANGET:\n+ case METAFN_KIND_ARG_INPUT_RANGE:\n+ break;\n+ case METAFN_KIND_ARG_SIZE_T:\n+ if (!same_type_ignoring_top_level_qualifiers_p (type, size_type_node))\n+\texpected_str = \"std::size_t\";\n+ break;\n+ case METAFN_KIND_ARG_UNSIGNED:\n+ if (!same_type_ignoring_top_level_qualifiers_p (type,\n+\t\t\t\t\t\t unsigned_type_node))\n+\texpected = unsigned_type_node;\n+ break;\n+ case METAFN_KIND_ARG_OPERATORS:\n+ if (TREE_CODE (type) != ENUMERAL_TYPE\n+\t || TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)\n+\t || TYPE_CONTEXT (type) != std_meta_node)\n+\texpected_str = \"std::meta::operators\";\n+ break;\n+ case METAFN_KIND_ARG_ACCESS_CONTEXT:\n+ if (TYPE_REF_P (type))\n+\ttype = TREE_TYPE (type);\n+ if (!is_std_meta_class (type, \"access_context\"))\n+\texpected_str = \"std::meta::access_context\";\n+ break;\n+ case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:\n+ if (TYPE_REF_P (type))\n+\ttype = TREE_TYPE (type);\n+ if (!is_std_meta_class (type, \"data_member_options\"))\n+\texpected_str = \"std::meta::data_member_options\";\n+ break;\n+ case METAFN_KIND_ARG_TEMPLATE_PARM:\n+ case METAFN_KIND_ARG_TEMPLATE_PARM_REF:\n+ break;\n+ }\n+ if (expected || expected_str)\n+ {\n+ if (expected_str)\n+\terror_at (loc, \"incorrect %qT type of argument %d, expected %qs\",\n+\t\t type, n + 1, expected_str);\n+ else\n+\terror_at (loc, \"incorrect %qT type of argument %d, expected %qT\",\n+\t\t type, n + 1, expected);\n+ *non_constant_p = true;\n+ return true;\n+ }\n+ return false;\n+}\n+\n+/* Diagnose incorrect return type of metafn and return true in that case. */\n+\n+static bool\n+check_metafn_return_type (location_t loc, metafn_kind_ret kind, tree type,\n+\t\t\t bool *non_constant_p)\n+{\n+ tree expected = NULL_TREE;\n+ const char *expected_str = NULL;\n+ switch (kind)\n+ {\n+ case METAFN_KIND_RET_BOOL:\n+ if (TREE_CODE (type) != BOOLEAN_TYPE)\n+\texpected = boolean_type_node;\n+ break;\n+ case METAFN_KIND_RET_INFO:\n+ if (!REFLECTION_TYPE_P (type))\n+\texpected = meta_info_type_node;\n+ break;\n+ case METAFN_KIND_RET_SIZE_T:\n+ if (!same_type_ignoring_top_level_qualifiers_p (type, size_type_node))\n+\texpected_str = \"std::size_t\";\n+ break;\n+ case METAFN_KIND_RET_MEMBER_OFFSET:\n+ if (!is_std_meta_class (type, \"member_offset\"))\n+\texpected_str = \"std::meta::member_offset\";\n+ break;\n+ case METAFN_KIND_RET_OPERATORS:\n+ if (TREE_CODE (type) != ENUMERAL_TYPE\n+\t || TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node)\n+\t || TYPE_CONTEXT (type) != std_meta_node)\n+\texpected_str = \"std::meta::operators\";\n+ break;\n+ case METAFN_KIND_RET_SOURCE_LOCATION:\n+ if (!is_std_class (type, \"source_location\"))\n+\texpected_str = \"std::source_location\";\n+ break;\n+ case METAFN_KIND_RET_STRING_VIEW:\n+ if (!CLASS_TYPE_P (type))\n+\texpected_str = \"std::string_view\";\n+ break;\n+ case METAFN_KIND_RET_U8STRING_VIEW:\n+ if (!CLASS_TYPE_P (type))\n+\texpected_str = \"std::u8string_view\";\n+ break;\n+ case METAFN_KIND_RET_STRONG_ORDERING:\n+ if (!is_std_class (type, \"strong_ordering\"))\n+\texpected_str = \"std::strong_ordering\";\n+ break;\n+ case METAFN_KIND_RET_VECTOR_INFO:\n+ if (!CLASS_TYPE_P (type))\n+\texpected_str = \"std::vector<std::meta::info>\";\n+ break;\n+ case METAFN_KIND_RET_ACCESS_CONTEXT:\n+ if (!is_std_meta_class (type, \"access_context\"))\n+\texpected_str = \"std::meta::access_context\";\n+ break;\n+ case METAFN_KIND_RET_TEMPLATE_PARM:\n+ break;\n+ }\n+ if (expected || expected_str)\n+ {\n+ if (expected_str)\n+\terror_at (loc, \"incorrect %qT return type, expected %qs\",\n+\t\t type, expected_str);\n+ else\n+\terror_at (loc, \"incorrect %qT return type, expected %qT\",\n+\t\t type, expected);\n+ *non_constant_p = true;\n+ return true;\n+ }\n+ return false;\n+}\n+\n /* Expand a call to a metafunction FUN. CALL is the CALL_EXPR.\n JUMP_TARGET is set if we are throwing std::meta::exception. */\n \n@@ -7561,20 +7723,28 @@ process_metafunction (const constexpr_ct\n tree h = NULL_TREE, h1 = NULL_TREE, hvec = NULL_TREE, expr = NULL_TREE;\n tree type = NULL_TREE, ht, info;\n reflect_kind kind = REFLECT_UNDEF;\n+ tree rettype;\n+ if (TREE_CODE (call) == AGGR_INIT_EXPR)\n+ rettype = TREE_TYPE (AGGR_INIT_EXPR_SLOT (call));\n+ else\n+ rettype = TREE_TYPE (call);\n+ if (check_metafn_return_type (loc, METAFN_KIND_RET (minfo), rettype,\n+\t\t\t\tnon_constant_p))\n+ return NULL_TREE;\n for (int argno = 0; argno < 3; ++argno)\n- switch (METAFN_KIND_ARG (argno))\n+ switch (METAFN_KIND_ARG (minfo, argno))\n {\n case METAFN_KIND_ARG_VOID:\n \tbreak;\n case METAFN_KIND_ARG_INFO:\n case METAFN_KIND_ARG_TINFO:\n \tgcc_assert (argno < 2);\n-\tinfo = get_info (ctx, call, argno, non_constant_p, overflow_p,\n+\tinfo = get_info (loc, ctx, call, argno, non_constant_p, overflow_p,\n \t\t\t jump_target);\n \tif (*jump_target || *non_constant_p)\n \t return NULL_TREE;\n \tht = REFLECT_EXPR_HANDLE (info);\n-\tif (METAFN_KIND_ARG (argno) == METAFN_KIND_ARG_TINFO\n+\tif (METAFN_KIND_ARG (minfo, argno) == METAFN_KIND_ARG_TINFO\n \t && eval_is_type (ht) != boolean_true_node)\n \t return throw_exception_nontype (loc, ctx, fun, non_constant_p,\n \t\t\t\t\t jump_target);\n@@ -7611,6 +7781,9 @@ process_metafunction (const constexpr_ct\n case METAFN_KIND_ARG_OPERATORS:\n \tgcc_assert (argno == 0);\n \texpr = get_nth_callarg (call, 0);\n+\tif (check_metafn_arg_type (loc, METAFN_KIND_ARG (minfo, argno), 0,\n+\t\t\t\t TREE_TYPE (expr), non_constant_p))\n+\t return NULL_TREE;\n \texpr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,\n \t\t\t\t\t non_constant_p, overflow_p,\n \t\t\t\t\t jump_target);\n@@ -7622,6 +7795,9 @@ process_metafunction (const constexpr_ct\n case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:\n \tgcc_assert (argno == 1);\n \texpr = get_nth_callarg (call, argno);\n+\tif (check_metafn_arg_type (loc, METAFN_KIND_ARG (minfo, argno), 1,\n+\t\t\t\t TREE_TYPE (expr), non_constant_p))\n+\t return NULL_TREE;\n \texpr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,\n \t\t\t\t\t non_constant_p, overflow_p,\n \t\t\t\t\t jump_target);\n@@ -7636,31 +7812,31 @@ process_metafunction (const constexpr_ct\n {\n case METAFN_OPERATOR_OF:\n return eval_operator_of (loc, ctx, h, non_constant_p, jump_target,\n-\t\t\t TREE_TYPE (call), fun);\n+\t\t\t rettype, fun);\n case METAFN_SYMBOL_OF:\n return eval_symbol_of (loc, ctx, expr, non_constant_p, jump_target,\n-\t\t\t char_type_node, TREE_TYPE (call), fun);\n+\t\t\t char_type_node, rettype, fun);\n case METAFN_U8SYMBOL_OF:\n return eval_symbol_of (loc, ctx, expr, non_constant_p, jump_target,\n-\t\t\t char8_type_node, TREE_TYPE (call), fun);\n+\t\t\t char8_type_node, rettype, fun);\n case METAFN_HAS_IDENTIFIER:\n return eval_has_identifier (h, kind);\n case METAFN_IDENTIFIER_OF:\n return eval_identifier_of (loc, ctx, h, kind, non_constant_p, jump_target,\n-\t\t\t\t char_type_node, TREE_TYPE (call), fun);\n+\t\t\t\t char_type_node, rettype, fun);\n case METAFN_U8IDENTIFIER_OF:\n return eval_identifier_of (loc, ctx, h, kind, non_constant_p, jump_target,\n-\t\t\t\t char8_type_node, TREE_TYPE (call), fun);\n+\t\t\t\t char8_type_node, rettype, fun);\n case METAFN_DISPLAY_STRING_OF:\n return eval_display_string_of (loc, ctx, h, kind, non_constant_p,\n \t\t\t\t jump_target, char_type_node,\n-\t\t\t\t TREE_TYPE (call), fun);\n+\t\t\t\t rettype, fun);\n case METAFN_U8DISPLAY_STRING_OF:\n return eval_display_string_of (loc, ctx, h, kind, non_constant_p,\n \t\t\t\t jump_target, char8_type_node,\n-\t\t\t\t TREE_TYPE (call), fun);\n+\t\t\t\t rettype, fun);\n case METAFN_SOURCE_LOCATION_OF:\n- return eval_source_location_of (loc, h, kind, TREE_TYPE (call));\n+ return eval_source_location_of (loc, h, kind, rettype);\n case METAFN_TYPE_OF:\n return eval_type_of (loc, ctx, h, kind, non_constant_p, jump_target, fun);\n case METAFN_OBJECT_OF:\n@@ -7880,16 +8056,16 @@ process_metafunction (const constexpr_ct\n return eval_enumerators_of (loc, ctx, h, non_constant_p, jump_target,\n \t\t\t\t fun);\n case METAFN_OFFSET_OF:\n- return eval_offset_of (loc, ctx, h, kind, TREE_TYPE (call),\n+ return eval_offset_of (loc, ctx, h, kind, rettype,\n \t\t\t non_constant_p, jump_target, fun);\n case METAFN_SIZE_OF:\n- return eval_size_of (loc, ctx, h, kind, TREE_TYPE (call), non_constant_p,\n+ return eval_size_of (loc, ctx, h, kind, rettype, non_constant_p,\n \t\t\t jump_target, fun);\n case METAFN_ALIGNMENT_OF:\n- return eval_alignment_of (loc, ctx, h, kind, TREE_TYPE (call),\n+ return eval_alignment_of (loc, ctx, h, kind, rettype,\n \t\t\t\tnon_constant_p, jump_target, fun);\n case METAFN_BIT_SIZE_OF:\n- return eval_bit_size_of (loc, ctx, h, kind, TREE_TYPE (call),\n+ return eval_bit_size_of (loc, ctx, h, kind, rettype,\n \t\t\t non_constant_p, jump_target, fun);\n case METAFN_EXTRACT:\n {\n--- gcc/testsuite/g++.dg/reflect/pr124689.C.jj\t2026-04-03 10:58:40.557430658 +0200\n+++ gcc/testsuite/g++.dg/reflect/pr124689.C\t2026-04-03 10:58:40.557430658 +0200\n@@ -0,0 +1,58 @@\n+// PR c++/124689\n+// { dg-do compile { target c++26 } }\n+// { dg-additional-options \"-freflection\" }\n+// Test error recovery from bogus <meta> replacement.\n+\n+namespace std {\n+ using size_t = decltype (sizeof 0);\n+ struct string_view {};\n+ namespace meta {\n+ using info = decltype(^^::);\n+ consteval int is_enumerator (info);\n+ consteval void type_of (info);\n+ consteval char size_of (info);\n+ consteval int offset_of (info);\n+ consteval float operator_of (info);\n+ consteval int *source_location_of (info);\n+ consteval bool identifier_of (info);\n+ consteval void u8identifier_of (info);\n+ consteval int type_order (info, info);\n+ consteval double enumerators_of (info);\n+ struct access_context {\n+ static consteval short current ();\n+ };\n+ consteval bool is_bit_field (int);\n+ consteval bool is_void_type (double);\n+ consteval info tuple_element (long int, info);\n+ consteval size_t extent (info, info);\n+ consteval string_view symbol_of (int);\n+ consteval info members_of (info, int);\n+ consteval info data_member_spec (info, float);\n+ }\n+}\n+\n+int a;\n+constexpr auto b = is_enumerator (^^::);\t\t// { dg-error \"incorrect 'int' return type, expected 'bool'\" }\n+consteval {\n+ type_of (^^a);\t\t\t\t\t// { dg-error \"incorrect 'void' return type, expected 'std::meta::info'\" }\n+}\n+struct S { int a; S &operator [] (const S &); };\n+constexpr auto c = size_of (^^a);\t\t\t// { dg-error \"incorrect 'char' return type, expected 'std::size_t'\" }\n+constexpr auto d = offset_of (^^S::a);\t\t\t// { dg-error \"incorrect 'int' return type, expected 'std::meta::member_offset'\" }\n+constexpr auto e = operator_of (^^S::operator []);\t// { dg-error \"incorrect 'float' return type, expected 'std::meta::operators'\" }\n+constexpr auto f = source_location_of (^^a);\t\t// { dg-error \"incorrect 'int\\\\\\*' return type, expected 'std::source_location'\" }\n+constexpr auto g = identifier_of (^^a);\t\t\t// { dg-error \"incorrect 'bool' return type, expected 'std::string_view'\" }\n+consteval {\n+ u8identifier_of (^^a);\t\t\t\t// { dg-error \"incorrect 'void' return type, expected 'std::u8string_view'\" }\n+}\n+constexpr auto i = type_order (^^int, ^^int);\t\t// { dg-error \"incorrect 'int' return type, expected 'std::strong_ordering'\" }\n+enum E { E1 };\n+constexpr auto j = enumerators_of (^^E);\t\t// { dg-error \"incorrect 'double' return type, expected 'std::vector<std::meta::info>'\" }\n+constexpr auto k = std::meta::access_context::current (); // { dg-error \"incorrect 'short int' return type, expected 'std::meta::access_context'\" }\n+constexpr auto l = std::meta::is_bit_field (0);\t\t// { dg-error \"incorrect 'int' type of argument 1, expected 'std::meta::info'\" }\n+constexpr auto m = std::meta::is_void_type (0.0);\t// { dg-error \"incorrect 'double' type of argument 1, expected 'std::meta::info'\" }\n+constexpr auto n = std::meta::tuple_element (0, ^^::);\t// { dg-error \"incorrect 'long int' type of argument 1, expected 'std::size_t'\" }\n+constexpr auto o = extent (^^int, ^^int);\t\t// { dg-error \"incorrect 'std::meta::info' type of argument 2, expected 'unsigned int'\" }\n+constexpr auto p = std::meta::symbol_of (0);\t\t// { dg-error \"incorrect 'int' type of argument 1, expected 'std::meta::operators'\" }\n+constexpr auto q = members_of (^^S, 0);\t\t\t// { dg-error \"incorrect 'std::meta::info' return type, expected 'std::vector<std::meta::info>'\" }\n+constexpr auto r = data_member_spec (^^S, 0.0f);\t// { dg-error \"incorrect 'float' type of argument 2, expected 'std::meta::data_member_options'\" }\n--- gcc/cp/metafns.h.jj\t2026-03-31 23:42:30.250203938 +0200\n+++ gcc/cp/metafns.h\t2026-04-03 11:20:29.156856730 +0200\n@@ -295,10 +295,6 @@ enum {\n METAFN_KIND_MASK = (1 << METAFN_KIND_SHIFT) - 1\n };\n \n-/* Get the metafn_kind_arg for argument ARGNO. */\n-#define METAFN_KIND_ARG(ARGNO) \\\n- ((minfo->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) & METAFN_KIND_MASK)\n-\n /* Possible return types of metafunctions. */\n enum metafn_kind_ret {\n METAFN_KIND_RET_BOOL,\n@@ -316,6 +312,10 @@ enum metafn_kind_ret {\n };\n static_assert (METAFN_KIND_RET_TEMPLATE_PARM <= (int) METAFN_KIND_MASK, \"\");\n \n+/* Get the metafn_kind_ret. */\n+#define METAFN_KIND_RET(MINFO) \\\n+ ((metafn_kind_ret) (((int) (MINFO)->kind) & METAFN_KIND_MASK))\n+\n /* Possible argument types of metafunctions. */\n enum metafn_kind_arg {\n METAFN_KIND_ARG_VOID = 0,\n@@ -336,6 +336,11 @@ enum metafn_kind_arg {\n static_assert (METAFN_KIND_ARG_TEMPLATE_PARM_REF <= (int) METAFN_KIND_MASK,\n \t \"\");\n \n+/* Get the metafn_kind_arg for argument ARGNO. */\n+#define METAFN_KIND_ARG(MINFO, ARGNO) \\\n+ ((metafn_kind_arg) (((MINFO)->kind >> ((ARGNO + 1) * METAFN_KIND_SHIFT)) \\\n+\t\t & METAFN_KIND_MASK))\n+\n /* Possible sets of 0-3 arguments of metafunctions. */\n enum metafn_kind_args {\n METAFN_KIND_ARGS_VOID = METAFN_KIND_ARG_VOID,\n@@ -409,6 +414,9 @@ enum metafn_kind {\n METAFN_KIND_INFO_REFLECTION_RANGET\n = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n | METAFN_KIND_RET_INFO,\n+ METAFN_KIND_BOOL_INFO_REFLECTION_RANGE\n+ = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n+ | METAFN_KIND_RET_BOOL,\n METAFN_KIND_INFO_INFO_REFLECTION_RANGE\n = (METAFN_KIND_ARGS_INFO_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n | METAFN_KIND_RET_INFO,\n@@ -477,7 +485,7 @@ enum metafn_kind {\n = (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)\n | METAFN_KIND_RET_U8STRING_VIEW\n };\n-#line 453 \"metafns.gperf\"\n+#line 461 \"metafns.gperf\"\n struct metafn_info\n {\n /* A name within \"std::meta::\" (or \"std::meta::access_context::\"). */\n@@ -601,479 +609,479 @@ metafn_lookup::find (const char *str, si\n #endif\n static const struct metafn_info wordlist[] =\n {\n-#line 656 \"metafns.gperf\"\n+#line 664 \"metafns.gperf\"\n {\"rank\", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},\n-#line 586 \"metafns.gperf\"\n+#line 594 \"metafns.gperf\"\n {\"is_void_type\", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 591 \"metafns.gperf\"\n+#line 599 \"metafns.gperf\"\n {\"is_pointer_type\", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 494 \"metafns.gperf\"\n+#line 502 \"metafns.gperf\"\n {\"is_volatile\", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},\n-#line 540 \"metafns.gperf\"\n+#line 548 \"metafns.gperf\"\n {\"is_value\", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},\n-#line 547 \"metafns.gperf\"\n+#line 555 \"metafns.gperf\"\n {\"is_base\", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},\n-#line 479 \"metafns.gperf\"\n+#line 487 \"metafns.gperf\"\n {\"is_private\", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},\n-#line 508 \"metafns.gperf\"\n+#line 516 \"metafns.gperf\"\n {\"is_variable\", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},\n-#line 662 \"metafns.gperf\"\n+#line 670 \"metafns.gperf\"\n {\"is_nothrow_convertible_type\", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 641 \"metafns.gperf\"\n+#line 649 \"metafns.gperf\"\n {\"is_nothrow_constructible_type\", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 667 \"metafns.gperf\"\n+#line 675 \"metafns.gperf\"\n {\"is_nothrow_invocable_type\", METAFN_IS_NOTHROW_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 646 \"metafns.gperf\"\n+#line 654 \"metafns.gperf\"\n {\"is_nothrow_copy_assignable_type\", METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 668 \"metafns.gperf\"\n+#line 676 \"metafns.gperf\"\n {\"is_nothrow_invocable_r_type\", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n-#line 643 \"metafns.gperf\"\n+#line 651 \"metafns.gperf\"\n {\"is_nothrow_copy_constructible_type\", METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 659 \"metafns.gperf\"\n+#line 667 \"metafns.gperf\"\n {\"is_base_of_type\", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 647 \"metafns.gperf\"\n+#line 655 \"metafns.gperf\"\n {\"is_nothrow_move_assignable_type\", METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 658 \"metafns.gperf\"\n+#line 666 \"metafns.gperf\"\n {\"is_same_type\", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 644 \"metafns.gperf\"\n+#line 652 \"metafns.gperf\"\n {\"is_nothrow_move_constructible_type\", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 532 \"metafns.gperf\"\n+#line 540 \"metafns.gperf\"\n {\"is_variable_template\", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 587 \"metafns.gperf\"\n+#line 595 \"metafns.gperf\"\n {\"is_null_pointer_type\", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 645 \"metafns.gperf\"\n+#line 653 \"metafns.gperf\"\n {\"is_nothrow_assignable_type\", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 650 \"metafns.gperf\"\n+#line 658 \"metafns.gperf\"\n {\"is_nothrow_destructible_type\", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 477 \"metafns.gperf\"\n+#line 485 \"metafns.gperf\"\n {\"is_public\", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},\n-#line 489 \"metafns.gperf\"\n+#line 497 \"metafns.gperf\"\n {\"is_noexcept\", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 575 \"metafns.gperf\"\n+#line 583 \"metafns.gperf\"\n {\"extract\", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},\n-#line 695 \"metafns.gperf\"\n+#line 703 \"metafns.gperf\"\n {\"variant_alternative\", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 613 \"metafns.gperf\"\n+#line 621 \"metafns.gperf\"\n {\"is_polymorphic_type\", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 513 \"metafns.gperf\"\n+#line 521 \"metafns.gperf\"\n {\"is_function\", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 510 \"metafns.gperf\"\n+#line 518 \"metafns.gperf\"\n {\"is_namespace\", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},\n-#line 466 \"metafns.gperf\"\n+#line 474 \"metafns.gperf\"\n {\"symbol_of\", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},\n-#line 664 \"metafns.gperf\"\n+#line 672 \"metafns.gperf\"\n {\"is_pointer_interconvertible_base_of_type\", METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 620 \"metafns.gperf\"\n+#line 628 \"metafns.gperf\"\n {\"is_bounded_array_type\", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 694 \"metafns.gperf\"\n+#line 702 \"metafns.gperf\"\n {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 493 \"metafns.gperf\"\n+#line 501 \"metafns.gperf\"\n {\"is_const\", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},\n-#line 539 \"metafns.gperf\"\n+#line 547 \"metafns.gperf\"\n {\"is_concept\", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 509 \"metafns.gperf\"\n+#line 517 \"metafns.gperf\"\n {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 566 \"metafns.gperf\"\n+#line 574 \"metafns.gperf\"\n {\"bases_of\", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 531 \"metafns.gperf\"\n+#line 539 \"metafns.gperf\"\n {\"is_function_template\", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 514 \"metafns.gperf\"\n+#line 522 \"metafns.gperf\"\n {\"is_conversion_function\", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 628 \"metafns.gperf\"\n+#line 636 \"metafns.gperf\"\n {\"is_copy_assignable_type\", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 661 \"metafns.gperf\"\n+#line 669 \"metafns.gperf\"\n {\"is_convertible_type\", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 651 \"metafns.gperf\"\n+#line 659 \"metafns.gperf\"\n {\"is_implicit_lifetime_type\", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 696 \"metafns.gperf\"\n+#line 704 \"metafns.gperf\"\n {\"type_order\", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},\n-#line 530 \"metafns.gperf\"\n+#line 538 \"metafns.gperf\"\n {\"is_template\", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 642 \"metafns.gperf\"\n+#line 650 \"metafns.gperf\"\n {\"is_nothrow_default_constructible_type\", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 576 \"metafns.gperf\"\n- {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 535 \"metafns.gperf\"\n+#line 584 \"metafns.gperf\"\n+ {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,},\n+#line 543 \"metafns.gperf\"\n {\"is_conversion_function_template\", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 523 \"metafns.gperf\"\n+#line 531 \"metafns.gperf\"\n {\"is_copy_assignment\", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 625 \"metafns.gperf\"\n+#line 633 \"metafns.gperf\"\n {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 572 \"metafns.gperf\"\n+#line 580 \"metafns.gperf\"\n {\"size_of\", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 474 \"metafns.gperf\"\n+#line 482 \"metafns.gperf\"\n {\"type_of\", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 511 \"metafns.gperf\"\n+#line 519 \"metafns.gperf\"\n {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 623 \"metafns.gperf\"\n- {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n #line 631 \"metafns.gperf\"\n+ {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n+#line 639 \"metafns.gperf\"\n {\"is_swappable_type\", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 502 \"metafns.gperf\"\n+#line 510 \"metafns.gperf\"\n {\"has_module_linkage\", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 529 \"metafns.gperf\"\n+#line 537 \"metafns.gperf\"\n {\"is_vararg_function\", METAFN_IS_VARARG_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 520 \"metafns.gperf\"\n+#line 528 \"metafns.gperf\"\n {\"is_copy_constructor\", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 692 \"metafns.gperf\"\n+#line 700 \"metafns.gperf\"\n {\"tuple_size\", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 556 \"metafns.gperf\"\n+#line 564 \"metafns.gperf\"\n {\"variable_of\", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},\n-#line 600 \"metafns.gperf\"\n+#line 608 \"metafns.gperf\"\n {\"is_reflection_type\", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 574 \"metafns.gperf\"\n+#line 582 \"metafns.gperf\"\n {\"bit_size_of\", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 603 \"metafns.gperf\"\n+#line 611 \"metafns.gperf\"\n {\"is_fundamental_type\", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 663 \"metafns.gperf\"\n+#line 671 \"metafns.gperf\"\n {\"is_layout_compatible_type\", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 699 \"metafns.gperf\"\n+#line 707 \"metafns.gperf\"\n {\"current\", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,},\n-#line 562 \"metafns.gperf\"\n+#line 570 \"metafns.gperf\"\n {\"current_function\", METAFN_CURRENT_FUNCTION, METAFN_KIND_INFO_VOID,},\n-#line 538 \"metafns.gperf\"\n+#line 546 \"metafns.gperf\"\n {\"is_constructor_template\", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 686 \"metafns.gperf\"\n+#line 694 \"metafns.gperf\"\n {\"common_type\", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 629 \"metafns.gperf\"\n+#line 637 \"metafns.gperf\"\n {\"is_move_assignable_type\", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 687 \"metafns.gperf\"\n+#line 695 \"metafns.gperf\"\n {\"common_reference\", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 693 \"metafns.gperf\"\n+#line 701 \"metafns.gperf\"\n {\"tuple_element\", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 580 \"metafns.gperf\"\n+#line 588 \"metafns.gperf\"\n {\"reflect_function\", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 500 \"metafns.gperf\"\n+#line 508 \"metafns.gperf\"\n {\"has_automatic_storage_duration\", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 524 \"metafns.gperf\"\n+#line 532 \"metafns.gperf\"\n {\"is_move_assignment\", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 518 \"metafns.gperf\"\n+#line 526 \"metafns.gperf\"\n {\"is_constructor\", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 549 \"metafns.gperf\"\n+#line 557 \"metafns.gperf\"\n {\"has_parent\", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},\n-#line 626 \"metafns.gperf\"\n+#line 634 \"metafns.gperf\"\n {\"is_move_constructible_type\", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 649 \"metafns.gperf\"\n+#line 657 \"metafns.gperf\"\n {\"is_nothrow_swappable_type\", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 610 \"metafns.gperf\"\n+#line 618 \"metafns.gperf\"\n {\"is_trivially_copyable_type\", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 601 \"metafns.gperf\"\n+#line 609 \"metafns.gperf\"\n {\"is_reference_type\", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 593 \"metafns.gperf\"\n+#line 601 \"metafns.gperf\"\n {\"is_rvalue_reference_type\", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 648 \"metafns.gperf\"\n+#line 656 \"metafns.gperf\"\n {\"is_nothrow_swappable_with_type\", METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 633 \"metafns.gperf\"\n+#line 641 \"metafns.gperf\"\n {\"is_trivially_constructible_type\", METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 630 \"metafns.gperf\"\n- {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n #line 638 \"metafns.gperf\"\n+ {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n+#line 646 \"metafns.gperf\"\n {\"is_trivially_copy_assignable_type\", METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 688 \"metafns.gperf\"\n+#line 696 \"metafns.gperf\"\n {\"underlying_type\", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},\n-#line 635 \"metafns.gperf\"\n+#line 643 \"metafns.gperf\"\n {\"is_trivially_copy_constructible_type\", METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 607 \"metafns.gperf\"\n+#line 615 \"metafns.gperf\"\n {\"is_member_pointer_type\", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 577 \"metafns.gperf\"\n+#line 585 \"metafns.gperf\"\n {\"substitute\", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 555 \"metafns.gperf\"\n+#line 563 \"metafns.gperf\"\n {\"parameters_of\", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 521 \"metafns.gperf\"\n+#line 529 \"metafns.gperf\"\n {\"is_move_constructor\", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 548 \"metafns.gperf\"\n+#line 556 \"metafns.gperf\"\n {\"has_default_member_initializer\", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},\n-#line 517 \"metafns.gperf\"\n+#line 525 \"metafns.gperf\"\n {\"is_special_member_function\", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 612 \"metafns.gperf\"\n+#line 620 \"metafns.gperf\"\n {\"is_empty_type\", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 627 \"metafns.gperf\"\n+#line 635 \"metafns.gperf\"\n {\"is_assignable_type\", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 592 \"metafns.gperf\"\n+#line 600 \"metafns.gperf\"\n {\"is_lvalue_reference_type\", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 528 \"metafns.gperf\"\n+#line 536 \"metafns.gperf\"\n {\"has_default_argument\", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,},\n-#line 690 \"metafns.gperf\"\n+#line 698 \"metafns.gperf\"\n {\"unwrap_reference\", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 522 \"metafns.gperf\"\n+#line 530 \"metafns.gperf\"\n {\"is_assignment\", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 609 \"metafns.gperf\"\n+#line 617 \"metafns.gperf\"\n {\"is_volatile_type\", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 543 \"metafns.gperf\"\n+#line 551 \"metafns.gperf\"\n {\"is_class_member\", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 602 \"metafns.gperf\"\n+#line 610 \"metafns.gperf\"\n {\"is_arithmetic_type\", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 544 \"metafns.gperf\"\n+#line 552 \"metafns.gperf\"\n {\"is_namespace_member\", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 565 \"metafns.gperf\"\n+#line 573 \"metafns.gperf\"\n {\"members_of\", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 478 \"metafns.gperf\"\n+#line 486 \"metafns.gperf\"\n {\"is_protected\", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},\n-#line 505 \"metafns.gperf\"\n+#line 513 \"metafns.gperf\"\n {\"has_linkage\", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 469 \"metafns.gperf\"\n+#line 477 \"metafns.gperf\"\n {\"identifier_of\", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 677 \"metafns.gperf\"\n+#line 685 \"metafns.gperf\"\n {\"add_rvalue_reference\", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 553 \"metafns.gperf\"\n+#line 561 \"metafns.gperf\"\n {\"template_of\", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},\n-#line 512 \"metafns.gperf\"\n+#line 520 \"metafns.gperf\"\n {\"is_namespace_alias\", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 657 \"metafns.gperf\"\n+#line 665 \"metafns.gperf\"\n {\"extent\", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},\n-#line 596 \"metafns.gperf\"\n+#line 604 \"metafns.gperf\"\n {\"is_enum_type\", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 533 \"metafns.gperf\"\n+#line 541 \"metafns.gperf\"\n {\"is_class_template\", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 608 \"metafns.gperf\"\n+#line 616 \"metafns.gperf\"\n {\"is_const_type\", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 564 \"metafns.gperf\"\n+#line 572 \"metafns.gperf\"\n {\"current_namespace\", METAFN_CURRENT_NAMESPACE, METAFN_KIND_INFO_VOID,},\n-#line 488 \"metafns.gperf\"\n+#line 496 \"metafns.gperf\"\n {\"is_explicit\", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},\n-#line 683 \"metafns.gperf\"\n+#line 691 \"metafns.gperf\"\n {\"add_pointer\", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 639 \"metafns.gperf\"\n+#line 647 \"metafns.gperf\"\n {\"is_trivially_move_assignable_type\", METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 506 \"metafns.gperf\"\n+#line 514 \"metafns.gperf\"\n {\"is_complete_type\", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 636 \"metafns.gperf\"\n+#line 644 \"metafns.gperf\"\n {\"is_trivially_move_constructible_type\", METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 605 \"metafns.gperf\"\n+#line 613 \"metafns.gperf\"\n {\"is_scalar_type\", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 481 \"metafns.gperf\"\n+#line 489 \"metafns.gperf\"\n {\"is_pure_virtual\", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 526 \"metafns.gperf\"\n+#line 534 \"metafns.gperf\"\n {\"is_function_parameter\", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 507 \"metafns.gperf\"\n+#line 515 \"metafns.gperf\"\n {\"is_enumerable_type\", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 599 \"metafns.gperf\"\n+#line 607 \"metafns.gperf\"\n {\"is_function_type\", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 550 \"metafns.gperf\"\n+#line 558 \"metafns.gperf\"\n {\"parent_of\", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},\n-#line 545 \"metafns.gperf\"\n+#line 553 \"metafns.gperf\"\n {\"is_nonstatic_data_member\", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 542 \"metafns.gperf\"\n+#line 550 \"metafns.gperf\"\n {\"is_structured_binding\", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,},\n-#line 495 \"metafns.gperf\"\n+#line 503 \"metafns.gperf\"\n {\"is_mutable_member\", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 637 \"metafns.gperf\"\n+#line 645 \"metafns.gperf\"\n {\"is_trivially_assignable_type\", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 624 \"metafns.gperf\"\n+#line 632 \"metafns.gperf\"\n {\"is_default_constructible_type\", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 527 \"metafns.gperf\"\n+#line 535 \"metafns.gperf\"\n {\"is_explicit_object_parameter\", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 673 \"metafns.gperf\"\n+#line 681 \"metafns.gperf\"\n {\"add_volatile\", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 563 \"metafns.gperf\"\n+#line 571 \"metafns.gperf\"\n {\"current_class\", METAFN_CURRENT_CLASS, METAFN_KIND_INFO_VOID,},\n-#line 570 \"metafns.gperf\"\n+#line 578 \"metafns.gperf\"\n {\"enumerators_of\", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 491 \"metafns.gperf\"\n+#line 499 \"metafns.gperf\"\n {\"is_enumerator\", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 541 \"metafns.gperf\"\n+#line 549 \"metafns.gperf\"\n {\"is_object\", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},\n-#line 472 \"metafns.gperf\"\n+#line 480 \"metafns.gperf\"\n {\"u8display_string_of\", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 595 \"metafns.gperf\"\n+#line 603 \"metafns.gperf\"\n {\"is_member_function_pointer_type\", METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 652 \"metafns.gperf\"\n+#line 660 \"metafns.gperf\"\n {\"has_virtual_destructor\", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,},\n-#line 655 \"metafns.gperf\"\n+#line 663 \"metafns.gperf\"\n {\"reference_converts_from_temporary\", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 519 \"metafns.gperf\"\n+#line 527 \"metafns.gperf\"\n {\"is_default_constructor\", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 604 \"metafns.gperf\"\n+#line 612 \"metafns.gperf\"\n {\"is_object_type\", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 578 \"metafns.gperf\"\n+#line 586 \"metafns.gperf\"\n {\"reflect_constant\", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,},\n-#line 525 \"metafns.gperf\"\n+#line 533 \"metafns.gperf\"\n {\"is_destructor\", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 482 \"metafns.gperf\"\n+#line 490 \"metafns.gperf\"\n {\"is_override\", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},\n-#line 654 \"metafns.gperf\"\n+#line 662 \"metafns.gperf\"\n {\"reference_constructs_from_temporary\", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 557 \"metafns.gperf\"\n+#line 565 \"metafns.gperf\"\n {\"return_type_of\", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 676 \"metafns.gperf\"\n+#line 684 \"metafns.gperf\"\n {\"add_lvalue_reference\", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 476 \"metafns.gperf\"\n+#line 484 \"metafns.gperf\"\n {\"constant_of\", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},\n-#line 671 \"metafns.gperf\"\n+#line 679 \"metafns.gperf\"\n {\"remove_cv\", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},\n-#line 640 \"metafns.gperf\"\n+#line 648 \"metafns.gperf\"\n {\"is_trivially_destructible_type\", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 674 \"metafns.gperf\"\n+#line 682 \"metafns.gperf\"\n {\"add_cv\", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},\n-#line 616 \"metafns.gperf\"\n+#line 624 \"metafns.gperf\"\n {\"is_aggregate_type\", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 581 \"metafns.gperf\"\n+#line 589 \"metafns.gperf\"\n {\"reflect_constant_string\", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 554 \"metafns.gperf\"\n+#line 562 \"metafns.gperf\"\n {\"template_arguments_of\", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 569 \"metafns.gperf\"\n+#line 577 \"metafns.gperf\"\n {\"subobjects_of\", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 571 \"metafns.gperf\"\n+#line 579 \"metafns.gperf\"\n {\"offset_of\", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},\n-#line 634 \"metafns.gperf\"\n+#line 642 \"metafns.gperf\"\n {\"is_trivially_default_constructible_type\", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 675 \"metafns.gperf\"\n+#line 683 \"metafns.gperf\"\n {\"remove_reference\", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 534 \"metafns.gperf\"\n+#line 542 \"metafns.gperf\"\n {\"is_alias_template\", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 679 \"metafns.gperf\"\n+#line 687 \"metafns.gperf\"\n {\"make_unsigned\", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 665 \"metafns.gperf\"\n+#line 673 \"metafns.gperf\"\n {\"is_invocable_type\", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 622 \"metafns.gperf\"\n+#line 630 \"metafns.gperf\"\n {\"is_scoped_enum_type\", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 546 \"metafns.gperf\"\n+#line 554 \"metafns.gperf\"\n {\"is_static_member\", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 672 \"metafns.gperf\"\n+#line 680 \"metafns.gperf\"\n {\"add_const\", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 632 \"metafns.gperf\"\n+#line 640 \"metafns.gperf\"\n {\"is_destructible_type\", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 598 \"metafns.gperf\"\n+#line 606 \"metafns.gperf\"\n {\"is_class_type\", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 680 \"metafns.gperf\"\n+#line 688 \"metafns.gperf\"\n {\"remove_extent\", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},\n-#line 666 \"metafns.gperf\"\n+#line 674 \"metafns.gperf\"\n {\"is_invocable_r_type\", METAFN_IS_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n-#line 558 \"metafns.gperf\"\n+#line 566 \"metafns.gperf\"\n {\"is_accessible\", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 465 \"metafns.gperf\"\n+#line 473 \"metafns.gperf\"\n {\"operator_of\", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},\n-#line 590 \"metafns.gperf\"\n+#line 598 \"metafns.gperf\"\n {\"is_array_type\", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 669 \"metafns.gperf\"\n+#line 677 \"metafns.gperf\"\n {\"remove_const\", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 497 \"metafns.gperf\"\n+#line 505 \"metafns.gperf\"\n {\"is_rvalue_reference_qualified\", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 498 \"metafns.gperf\"\n+#line 506 \"metafns.gperf\"\n {\"has_static_storage_duration\", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 681 \"metafns.gperf\"\n+#line 689 \"metafns.gperf\"\n {\"remove_all_extents\", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,},\n-#line 503 \"metafns.gperf\"\n+#line 511 \"metafns.gperf\"\n {\"has_external_linkage\", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 684 \"metafns.gperf\"\n+#line 692 \"metafns.gperf\"\n {\"remove_cvref\", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},\n-#line 492 \"metafns.gperf\"\n+#line 500 \"metafns.gperf\"\n {\"is_annotation\", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},\n-#line 682 \"metafns.gperf\"\n+#line 690 \"metafns.gperf\"\n {\"remove_pointer\", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 496 \"metafns.gperf\"\n+#line 504 \"metafns.gperf\"\n {\"is_lvalue_reference_qualified\", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 660 \"metafns.gperf\"\n+#line 668 \"metafns.gperf\"\n {\"is_virtual_base_of_type\", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 584 \"metafns.gperf\"\n+#line 592 \"metafns.gperf\"\n {\"is_data_member_spec\", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,},\n-#line 618 \"metafns.gperf\"\n+#line 626 \"metafns.gperf\"\n {\"is_signed_type\", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 614 \"metafns.gperf\"\n+#line 622 \"metafns.gperf\"\n {\"is_abstract_type\", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 480 \"metafns.gperf\"\n+#line 488 \"metafns.gperf\"\n {\"is_virtual\", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 471 \"metafns.gperf\"\n+#line 479 \"metafns.gperf\"\n {\"display_string_of\", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 594 \"metafns.gperf\"\n+#line 602 \"metafns.gperf\"\n {\"is_member_object_pointer_type\", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 691 \"metafns.gperf\"\n+#line 699 \"metafns.gperf\"\n {\"unwrap_ref_decay\", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 617 \"metafns.gperf\"\n+#line 625 \"metafns.gperf\"\n {\"is_consteval_only_type\", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 606 \"metafns.gperf\"\n+#line 614 \"metafns.gperf\"\n {\"is_compound_type\", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 467 \"metafns.gperf\"\n+#line 475 \"metafns.gperf\"\n {\"u8symbol_of\", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,},\n-#line 484 \"metafns.gperf\"\n+#line 492 \"metafns.gperf\"\n {\"is_deleted\", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},\n-#line 589 \"metafns.gperf\"\n+#line 597 \"metafns.gperf\"\n {\"is_floating_point_type\", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 537 \"metafns.gperf\"\n+#line 545 \"metafns.gperf\"\n {\"is_literal_operator_template\", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 485 \"metafns.gperf\"\n+#line 493 \"metafns.gperf\"\n {\"is_defaulted\", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},\n-#line 583 \"metafns.gperf\"\n+#line 591 \"metafns.gperf\"\n {\"data_member_spec\", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},\n-#line 475 \"metafns.gperf\"\n+#line 483 \"metafns.gperf\"\n {\"object_of\", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},\n-#line 700 \"metafns.gperf\"\n+#line 708 \"metafns.gperf\"\n {\"_S_exception_cvt_to_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},\n-#line 701 \"metafns.gperf\"\n+#line 709 \"metafns.gperf\"\n {\"_S_exception_cvt_from_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, METAFN_KIND_STRING_VIEW_INPUT_RANGE,},\n-#line 483 \"metafns.gperf\"\n+#line 491 \"metafns.gperf\"\n {\"is_final\", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},\n-#line 516 \"metafns.gperf\"\n+#line 524 \"metafns.gperf\"\n {\"is_literal_operator\", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 487 \"metafns.gperf\"\n+#line 495 \"metafns.gperf\"\n {\"is_user_declared\", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},\n-#line 552 \"metafns.gperf\"\n+#line 560 \"metafns.gperf\"\n {\"has_template_arguments\", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,},\n-#line 515 \"metafns.gperf\"\n+#line 523 \"metafns.gperf\"\n {\"is_operator_function\", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 689 \"metafns.gperf\"\n+#line 697 \"metafns.gperf\"\n {\"invoke_result\", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},\n-#line 582 \"metafns.gperf\"\n+#line 590 \"metafns.gperf\"\n {\"reflect_constant_array\", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 504 \"metafns.gperf\"\n+#line 512 \"metafns.gperf\"\n {\"has_c_language_linkage\", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 536 \"metafns.gperf\"\n+#line 544 \"metafns.gperf\"\n {\"is_operator_function_template\", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 588 \"metafns.gperf\"\n+#line 596 \"metafns.gperf\"\n {\"is_integral_type\", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 653 \"metafns.gperf\"\n+#line 661 \"metafns.gperf\"\n {\"has_unique_object_representations\", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},\n-#line 499 \"metafns.gperf\"\n+#line 507 \"metafns.gperf\"\n {\"has_thread_storage_duration\", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 560 \"metafns.gperf\"\n+#line 568 \"metafns.gperf\"\n {\"has_inaccessible_bases\", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 561 \"metafns.gperf\"\n+#line 569 \"metafns.gperf\"\n {\"has_inaccessible_subobjects\", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 678 \"metafns.gperf\"\n+#line 686 \"metafns.gperf\"\n {\"make_signed\", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 559 \"metafns.gperf\"\n+#line 567 \"metafns.gperf\"\n {\"has_inaccessible_nonstatic_data_members\", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 670 \"metafns.gperf\"\n+#line 678 \"metafns.gperf\"\n {\"remove_volatile\", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 579 \"metafns.gperf\"\n+#line 587 \"metafns.gperf\"\n {\"reflect_object\", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 611 \"metafns.gperf\"\n+#line 619 \"metafns.gperf\"\n {\"is_standard_layout_type\", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 685 \"metafns.gperf\"\n+#line 693 \"metafns.gperf\"\n {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 621 \"metafns.gperf\"\n+#line 629 \"metafns.gperf\"\n {\"is_unbounded_array_type\", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 568 \"metafns.gperf\"\n+#line 576 \"metafns.gperf\"\n {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 597 \"metafns.gperf\"\n+#line 605 \"metafns.gperf\"\n {\"is_union_type\", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 468 \"metafns.gperf\"\n+#line 476 \"metafns.gperf\"\n {\"has_identifier\", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},\n-#line 567 \"metafns.gperf\"\n+#line 575 \"metafns.gperf\"\n {\"static_data_members_of\", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 615 \"metafns.gperf\"\n+#line 623 \"metafns.gperf\"\n {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 551 \"metafns.gperf\"\n+#line 559 \"metafns.gperf\"\n {\"dealias\", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},\n-#line 698 \"metafns.gperf\"\n+#line 706 \"metafns.gperf\"\n {\"annotations_of_with_type\", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,},\n-#line 585 \"metafns.gperf\"\n+#line 593 \"metafns.gperf\"\n {\"define_aggregate\", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 490 \"metafns.gperf\"\n+#line 498 \"metafns.gperf\"\n {\"is_bit_field\", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},\n-#line 697 \"metafns.gperf\"\n+#line 705 \"metafns.gperf\"\n {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 473 \"metafns.gperf\"\n+#line 481 \"metafns.gperf\"\n {\"source_location_of\", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,},\n-#line 573 \"metafns.gperf\"\n+#line 581 \"metafns.gperf\"\n {\"alignment_of\", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 501 \"metafns.gperf\"\n+#line 509 \"metafns.gperf\"\n {\"has_internal_linkage\", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 470 \"metafns.gperf\"\n+#line 478 \"metafns.gperf\"\n {\"u8identifier_of\", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 619 \"metafns.gperf\"\n+#line 627 \"metafns.gperf\"\n {\"is_unsigned_type\", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 486 \"metafns.gperf\"\n+#line 494 \"metafns.gperf\"\n {\"is_user_provided\", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,}\n };\n #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)\n", "prefixes": [] }