get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2217997/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2217997,
    "url": "http://patchwork.ozlabs.org/api/patches/2217997/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/acuFl3n5cTclKXUE@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": "<acuFl3n5cTclKXUE@tucnak>",
    "list_archive_url": null,
    "date": "2026-03-31T08:28:07",
    "name": "c++: Error recovery for fuzzed <meta> [PR124689]",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "155535a1a567e41ea5984a0db71f4dec576bf503",
    "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/acuFl3n5cTclKXUE@tucnak/mbox/",
    "series": [
        {
            "id": 498144,
            "url": "http://patchwork.ozlabs.org/api/series/498144/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=498144",
            "date": "2026-03-31T08:28:07",
            "name": "c++: Error recovery for fuzzed <meta> [PR124689]",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/498144/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217997/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217997/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=eGPLxR5n;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.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=eGPLxR5n",
            "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.133.124"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 4flLqm6l0tz1yGH\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 31 Mar 2026 19:28:52 +1100 (AEDT)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 158534BB58EF\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 31 Mar 2026 08:28:51 +0000 (GMT)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTP id 09AC54BA2E0A\n for <gcc-patches@gcc.gnu.org>; Tue, 31 Mar 2026 08:28:15 +0000 (GMT)",
            "from mx-prod-mc-06.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-214-5LTmAny4MNKOFmzMh99e5Q-1; Tue,\n 31 Mar 2026 04:28:12 -0400",
            "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93])\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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 794C518005B4\n for <gcc-patches@gcc.gnu.org>; Tue, 31 Mar 2026 08:28:11 +0000 (UTC)",
            "from tucnak.zalov.cz (unknown [10.44.32.9])\n by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id 86A351800764; Tue, 31 Mar 2026 08:28:10 +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 62V8S7Z94076038\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Tue, 31 Mar 2026 10:28:07 +0200",
            "(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 62V8S75d4076037;\n Tue, 31 Mar 2026 10:28:07 +0200"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 158534BB58EF",
            "OpenDKIM Filter v2.11.0 sourceware.org 09AC54BA2E0A"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 09AC54BA2E0A",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 09AC54BA2E0A",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774945695; cv=none;\n b=Rn8uxh3E6+f90CJ5aRbuJR84ViQPXfm4aiV079saUYRfJCox/HxUkosbrct63f5m+mHodswfK3amjEZsQpgrPmWjR1rXyfgMvTbT9/A2NsHQk9+ezFTrSqjCoHPVpM/IWrD/5aKbyK9PR9glmFqfvMAb4d9DTqFxKMaT7BWx3bw=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774945695; c=relaxed/simple;\n bh=QF2Ze8vVyTvodskGRcMgRmA8ax0pL8lkT1SMms50K8Y=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=SmCOfoHBXnNBgIEaJVoevjKTMzACWzrP4ecK618V+gwmKG0p5uK6ERZqZhLAaF7bj/CSacnuVj71a1MrMT4Ds80nBeuDz1TnGoNwOxXGiyrL0lqhcSdJefLI62qTYoF1YgwITjO4cxBt1YOpOgxys0yRnemC3nu6OGPiK0m/FLw=",
        "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=1774945694;\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; bh=r4GJcyYWItBeUiDQKYpX5nAYMR2kcX1xAJLYDIMk+wM=;\n b=eGPLxR5npQjpRoKK0s+GGNRSvyoHRxHwo0LEn58U0rj1slN10JpHKtZT1Y3eXFPIKpU0ZR\n mBRvODe64bD7bH/KIDyD478+RjR6YVATm1dY4pgUo8OsmCNfCsye5e/Fuu+GDNf4dblbRq\n OV/OeHaVEWSugfqwWTYftm9ROdGd4S0=",
        "X-MC-Unique": "5LTmAny4MNKOFmzMh99e5Q-1",
        "X-Mimecast-MFC-AGG-ID": "5LTmAny4MNKOFmzMh99e5Q_1774945691",
        "Date": "Tue, 31 Mar 2026 10:28:07 +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++: Error recovery for fuzzed <meta> [PR124689]",
        "Message-ID": "<acuFl3n5cTclKXUE@tucnak>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "QRV2t1pD3aMU7FfsKV2c_ocTqUcBAF6rnIAUsjjoGys_1774945691",
        "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": "Hi!\n\nI knew this was coming, but hoped it would come later ;)\nBasically, when one preprocesses <meta> + some reflection code and\nattempts to fuzz it, we can ICE in various ways as we expect a sane\n<meta>.  In various places we've already tried to be defensive, error\nout e.g. when we don't find the members we are looking for in <meta>\nclasses etc., plus when adding metafns.gperf I've added to the details\nabout each metafn the types of arguments and return type (which was\nonly partially used to evaluate e.g. the arguments in different ways\nand prepare for the eval_* handlers, but checking of the types\nwasn't actually done.\n\nThis patch introduces some limited checking of the return type and\nargument types to make sure they are sane.  Plus I've noticed the\ncan_substitute marking said incorrectly it returns info when it returns\nbool.\n\nThe reflection_range/input_range arguments aren't checked, because they\ncan be all kinds of things and get_range_elts already does a lot of\nchecking.  Similarly METAFN_KIND_ARG_TEMPLATE_PARM*, those aren't even\nargument types, just a hack to tell the code that it needs to supply\nthe template parameter to the eval_* handlers.\n\nBootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n\n2026-03-31  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* reflect.cc (get_info): Add LOC argument, diagnose invalid\n\targument type instead of failing assertion.\n\t(check_metafn_arg_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\tJakub",
    "diff": "--- gcc/cp/metafns.gperf.jj\t2026-03-31 10:06:05.707005147 +0200\n+++ gcc/cp/metafns.gperf\t2026-03-31 10:06:57.024658128 +0200\n@@ -285,6 +285,9 @@ 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 (((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@@ -376,6 +379,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@@ -565,7 +571,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-03-31 10:06:05.721004917 +0200\n+++ gcc/cp/reflect.cc\t2026-03-31 10:06:57.025697537 +0200\n@@ -340,12 +340,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@@ -7377,6 +7383,86 @@ 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, int 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 (TREE_CODE (type) != INTEGER_TYPE\n+\t  || TYPE_PRECISION (type) != TYPE_PRECISION (size_type_node)\n+\t  || !TYPE_UNSIGNED (type))\n+\texpected_str = \"std::size_t\";\n+      break;\n+    case METAFN_KIND_ARG_UNSIGNED:\n+      if (TREE_CODE (type) != INTEGER_TYPE\n+\t  || TYPE_PRECISION (type) != TYPE_PRECISION (unsigned_type_node)\n+\t  || !TYPE_UNSIGNED (type))\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 (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+\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 (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)), \"data_member_options\")\n+\t  || TYPE_CONTEXT (type) != std_meta_node)\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 /* 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@@ -7400,6 +7486,92 @@ 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+  /* Check return type.  */\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+    case METAFN_KIND_RET_BOOL:\n+      if (TREE_CODE (rettype) != BOOLEAN_TYPE)\n+\texpected_ret = boolean_type_node;\n+      break;\n+    case METAFN_KIND_RET_INFO:\n+      if (!REFLECTION_TYPE_P (rettype))\n+\texpected_ret = meta_info_type_node;\n+      break;\n+    case METAFN_KIND_RET_SIZE_T:\n+      if (TREE_CODE (rettype) != INTEGER_TYPE\n+\t  || TYPE_PRECISION (rettype) != TYPE_PRECISION (size_type_node)\n+\t  || !TYPE_UNSIGNED (rettype))\n+\texpected_ret_str = \"std::size_t\";\n+      break;\n+    case METAFN_KIND_RET_MEMBER_OFFSET:\n+      if (TREE_CODE (rettype) != RECORD_TYPE\n+\t  || TYPE_NAME (rettype) == NULL_TREE\n+\t  || TREE_CODE (TYPE_NAME (rettype)) != TYPE_DECL\n+\t  || DECL_NAME (TYPE_NAME (rettype)) == NULL_TREE\n+\t  || !id_equal (DECL_NAME (TYPE_NAME (rettype)), \"member_offset\")\n+\t  || TYPE_CONTEXT (rettype) != std_meta_node)\n+\texpected_ret_str = \"std::meta::member_offset\";\n+      break;\n+    case METAFN_KIND_RET_OPERATORS:\n+      if (TREE_CODE (rettype) != ENUMERAL_TYPE\n+\t  || TYPE_PRECISION (rettype) != TYPE_PRECISION (integer_type_node)\n+\t  || TYPE_CONTEXT (rettype) != std_meta_node)\n+\texpected_ret_str = \"std::meta::operators\";\n+      break;\n+    case METAFN_KIND_RET_SOURCE_LOCATION:\n+      if (TREE_CODE (rettype) != RECORD_TYPE\n+\t  || TYPE_NAME (rettype) == NULL_TREE\n+\t  || TREE_CODE (TYPE_NAME (rettype)) != TYPE_DECL\n+\t  || DECL_NAME (TYPE_NAME (rettype)) == NULL_TREE\n+\t  || !id_equal (DECL_NAME (TYPE_NAME (rettype)), \"source_location\"))\n+\texpected_ret_str = \"std::source_location\";\n+      break;\n+    case METAFN_KIND_RET_STRING_VIEW:\n+      if (TREE_CODE (rettype) != RECORD_TYPE)\n+\texpected_ret_str = \"std::string_view\";\n+      break;\n+    case METAFN_KIND_RET_U8STRING_VIEW:\n+      if (TREE_CODE (rettype) != RECORD_TYPE)\n+\texpected_ret_str = \"std::u8string_view\";\n+      break;\n+    case METAFN_KIND_RET_STRONG_ORDERING:\n+      if (TREE_CODE (rettype) != RECORD_TYPE)\n+\texpected_ret_str = \"std::strong_ordering\";\n+      break;\n+    case METAFN_KIND_RET_VECTOR_INFO:\n+      if (TREE_CODE (rettype) != RECORD_TYPE)\n+\texpected_ret_str = \"std::vector<std::meta::info>\";\n+      break;\n+    case METAFN_KIND_RET_ACCESS_CONTEXT:\n+      if (TREE_CODE (rettype) != RECORD_TYPE\n+\t  || TYPE_NAME (rettype) == NULL_TREE\n+\t  || TREE_CODE (TYPE_NAME (rettype)) != TYPE_DECL\n+\t  || DECL_NAME (TYPE_NAME (rettype)) == NULL_TREE\n+\t  || !id_equal (DECL_NAME (TYPE_NAME (rettype)), \"access_context\")\n+\t  || TYPE_CONTEXT (rettype) != std_meta_node)\n+\texpected_ret_str = \"std::meta::access_context\";\n+      break;\n+    case METAFN_KIND_RET_TEMPLATE_PARM:\n+      break;\n+    }\n+  if (expected_ret || expected_ret_str)\n+    {\n+      if (expected_ret_str)\n+\terror_at (loc, \"incorrect %qT return type, expected %qs\",\n+\t\t  rettype, expected_ret_str);\n+      else\n+\terror_at (loc, \"incorrect %qT return type, expected %qT\",\n+\t\t  rettype, expected_ret);\n+      *non_constant_p = true;\n+      return NULL_TREE;\n+    }\n   for (int argno = 0; argno < 3; ++argno)\n     switch (METAFN_KIND_ARG (argno))\n       {\n@@ -7408,7 +7580,7 @@ process_metafunction (const constexpr_ct\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@@ -7450,6 +7622,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 (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@@ -7461,6 +7636,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 (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@@ -7475,31 +7653,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@@ -7711,16 +7889,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-03-31 10:06:57.026338885 +0200\n+++ gcc/testsuite/g++.dg/reflect/pr124689.C\t2026-03-31 10:06:57.026338885 +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 10:06:05.710005098 +0200\n+++ gcc/cp/metafns.h\t2026-03-31 10:07:09.788963355 +0200\n@@ -313,6 +313,9 @@ 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 (((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@@ -404,6 +407,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@@ -472,7 +478,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 454 \"metafns.gperf\"\n struct metafn_info\n {\n   /* A name within \"std::meta::\" (or \"std::meta::access_context::\").  */\n@@ -596,473 +602,473 @@ metafn_lookup::find (const char *str, si\n #endif\n   static const struct metafn_info wordlist[] =\n     {\n-#line 648 \"metafns.gperf\"\n+#line 654 \"metafns.gperf\"\n       {\"rank\", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},\n-#line 578 \"metafns.gperf\"\n+#line 584 \"metafns.gperf\"\n       {\"is_void_type\", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 583 \"metafns.gperf\"\n+#line 589 \"metafns.gperf\"\n       {\"is_pointer_type\", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 489 \"metafns.gperf\"\n+#line 495 \"metafns.gperf\"\n       {\"is_volatile\", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},\n-#line 535 \"metafns.gperf\"\n+#line 541 \"metafns.gperf\"\n       {\"is_value\", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},\n-#line 542 \"metafns.gperf\"\n+#line 548 \"metafns.gperf\"\n       {\"is_base\", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},\n-#line 503 \"metafns.gperf\"\n+#line 509 \"metafns.gperf\"\n       {\"is_variable\", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},\n-#line 654 \"metafns.gperf\"\n+#line 660 \"metafns.gperf\"\n       {\"is_nothrow_convertible_type\", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 633 \"metafns.gperf\"\n+#line 639 \"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 665 \"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 644 \"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 666 \"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 641 \"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 657 \"metafns.gperf\"\n       {\"is_base_of_type\", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 639 \"metafns.gperf\"\n+#line 645 \"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 642 \"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 533 \"metafns.gperf\"\n       {\"is_variable_template\", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 579 \"metafns.gperf\"\n+#line 585 \"metafns.gperf\"\n       {\"is_null_pointer_type\", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 472 \"metafns.gperf\"\n+#line 478 \"metafns.gperf\"\n       {\"is_public\", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},\n-#line 484 \"metafns.gperf\"\n+#line 490 \"metafns.gperf\"\n       {\"is_noexcept\", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 567 \"metafns.gperf\"\n+#line 573 \"metafns.gperf\"\n       {\"extract\", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},\n-#line 687 \"metafns.gperf\"\n+#line 693 \"metafns.gperf\"\n       {\"variant_alternative\", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 605 \"metafns.gperf\"\n+#line 611 \"metafns.gperf\"\n       {\"is_polymorphic_type\", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 474 \"metafns.gperf\"\n+#line 480 \"metafns.gperf\"\n       {\"is_private\", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},\n-#line 508 \"metafns.gperf\"\n+#line 514 \"metafns.gperf\"\n       {\"is_function\", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 505 \"metafns.gperf\"\n+#line 511 \"metafns.gperf\"\n       {\"is_namespace\", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},\n-#line 656 \"metafns.gperf\"\n+#line 662 \"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 618 \"metafns.gperf\"\n       {\"is_bounded_array_type\", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 488 \"metafns.gperf\"\n+#line 494 \"metafns.gperf\"\n       {\"is_const\", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},\n-#line 534 \"metafns.gperf\"\n+#line 540 \"metafns.gperf\"\n       {\"is_concept\", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 650 \"metafns.gperf\"\n+#line 656 \"metafns.gperf\"\n       {\"is_same_type\", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 558 \"metafns.gperf\"\n+#line 564 \"metafns.gperf\"\n       {\"bases_of\", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 497 \"metafns.gperf\"\n+#line 503 \"metafns.gperf\"\n       {\"has_module_linkage\", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 526 \"metafns.gperf\"\n+#line 532 \"metafns.gperf\"\n       {\"is_function_template\", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 637 \"metafns.gperf\"\n+#line 643 \"metafns.gperf\"\n       {\"is_nothrow_assignable_type\", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 509 \"metafns.gperf\"\n+#line 515 \"metafns.gperf\"\n       {\"is_conversion_function\", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 642 \"metafns.gperf\"\n+#line 648 \"metafns.gperf\"\n       {\"is_nothrow_destructible_type\", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 653 \"metafns.gperf\"\n+#line 659 \"metafns.gperf\"\n       {\"is_convertible_type\", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 643 \"metafns.gperf\"\n+#line 649 \"metafns.gperf\"\n       {\"is_implicit_lifetime_type\", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 525 \"metafns.gperf\"\n+#line 531 \"metafns.gperf\"\n       {\"is_template\", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 634 \"metafns.gperf\"\n+#line 640 \"metafns.gperf\"\n       {\"is_nothrow_default_constructible_type\", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 568 \"metafns.gperf\"\n-      {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 530 \"metafns.gperf\"\n+#line 574 \"metafns.gperf\"\n+      {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_BOOL_INFO_REFLECTION_RANGE,},\n+#line 536 \"metafns.gperf\"\n       {\"is_conversion_function_template\", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 461 \"metafns.gperf\"\n+#line 467 \"metafns.gperf\"\n       {\"symbol_of\", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},\n-#line 617 \"metafns.gperf\"\n+#line 623 \"metafns.gperf\"\n       {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 686 \"metafns.gperf\"\n+#line 692 \"metafns.gperf\"\n       {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 504 \"metafns.gperf\"\n+#line 510 \"metafns.gperf\"\n       {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 615 \"metafns.gperf\"\n+#line 621 \"metafns.gperf\"\n       {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 495 \"metafns.gperf\"\n+#line 501 \"metafns.gperf\"\n       {\"has_automatic_storage_duration\", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 620 \"metafns.gperf\"\n+#line 626 \"metafns.gperf\"\n       {\"is_copy_assignable_type\", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 684 \"metafns.gperf\"\n+#line 690 \"metafns.gperf\"\n       {\"tuple_size\", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 524 \"metafns.gperf\"\n+#line 530 \"metafns.gperf\"\n       {\"is_vararg_function\", METAFN_IS_VARARG_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 515 \"metafns.gperf\"\n+#line 521 \"metafns.gperf\"\n       {\"is_copy_constructor\", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 551 \"metafns.gperf\"\n+#line 557 \"metafns.gperf\"\n       {\"variable_of\", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},\n-#line 544 \"metafns.gperf\"\n+#line 550 \"metafns.gperf\"\n       {\"has_parent\", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},\n-#line 592 \"metafns.gperf\"\n+#line 598 \"metafns.gperf\"\n       {\"is_reflection_type\", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 595 \"metafns.gperf\"\n+#line 601 \"metafns.gperf\"\n       {\"is_fundamental_type\", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 655 \"metafns.gperf\"\n+#line 661 \"metafns.gperf\"\n       {\"is_layout_compatible_type\", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 566 \"metafns.gperf\"\n+#line 572 \"metafns.gperf\"\n       {\"bit_size_of\", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 518 \"metafns.gperf\"\n+#line 524 \"metafns.gperf\"\n       {\"is_copy_assignment\", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 691 \"metafns.gperf\"\n+#line 697 \"metafns.gperf\"\n       {\"current\", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,},\n-#line 678 \"metafns.gperf\"\n+#line 684 \"metafns.gperf\"\n       {\"common_type\", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 533 \"metafns.gperf\"\n+#line 539 \"metafns.gperf\"\n       {\"is_constructor_template\", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 688 \"metafns.gperf\"\n+#line 694 \"metafns.gperf\"\n       {\"type_order\", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},\n-#line 679 \"metafns.gperf\"\n+#line 685 \"metafns.gperf\"\n       {\"common_reference\", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 543 \"metafns.gperf\"\n+#line 549 \"metafns.gperf\"\n       {\"has_default_member_initializer\", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},\n-#line 685 \"metafns.gperf\"\n+#line 691 \"metafns.gperf\"\n       {\"tuple_element\", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 572 \"metafns.gperf\"\n+#line 578 \"metafns.gperf\"\n       {\"reflect_function\", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 523 \"metafns.gperf\"\n+#line 529 \"metafns.gperf\"\n       {\"has_default_argument\", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,},\n-#line 618 \"metafns.gperf\"\n+#line 624 \"metafns.gperf\"\n       {\"is_move_constructible_type\", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 469 \"metafns.gperf\"\n+#line 475 \"metafns.gperf\"\n       {\"type_of\", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 513 \"metafns.gperf\"\n+#line 519 \"metafns.gperf\"\n       {\"is_constructor\", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 623 \"metafns.gperf\"\n+#line 629 \"metafns.gperf\"\n       {\"is_swappable_type\", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 641 \"metafns.gperf\"\n+#line 647 \"metafns.gperf\"\n       {\"is_nothrow_swappable_type\", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 593 \"metafns.gperf\"\n+#line 599 \"metafns.gperf\"\n       {\"is_reference_type\", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 500 \"metafns.gperf\"\n+#line 506 \"metafns.gperf\"\n       {\"has_linkage\", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 640 \"metafns.gperf\"\n+#line 646 \"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 605 \"metafns.gperf\"\n       {\"is_member_pointer_type\", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 621 \"metafns.gperf\"\n+#line 627 \"metafns.gperf\"\n       {\"is_move_assignable_type\", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 506 \"metafns.gperf\"\n+#line 512 \"metafns.gperf\"\n       {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 516 \"metafns.gperf\"\n+#line 522 \"metafns.gperf\"\n       {\"is_move_constructor\", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 550 \"metafns.gperf\"\n+#line 556 \"metafns.gperf\"\n       {\"parameters_of\", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 564 \"metafns.gperf\"\n+#line 570 \"metafns.gperf\"\n       {\"size_of\", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 519 \"metafns.gperf\"\n+#line 525 \"metafns.gperf\"\n       {\"is_move_assignment\", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 619 \"metafns.gperf\"\n+#line 625 \"metafns.gperf\"\n       {\"is_assignable_type\", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 538 \"metafns.gperf\"\n+#line 544 \"metafns.gperf\"\n       {\"is_class_member\", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 602 \"metafns.gperf\"\n+#line 608 \"metafns.gperf\"\n       {\"is_trivially_copyable_type\", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 517 \"metafns.gperf\"\n+#line 523 \"metafns.gperf\"\n       {\"is_assignment\", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 539 \"metafns.gperf\"\n+#line 545 \"metafns.gperf\"\n       {\"is_namespace_member\", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 557 \"metafns.gperf\"\n+#line 563 \"metafns.gperf\"\n       {\"members_of\", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 625 \"metafns.gperf\"\n+#line 631 \"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 636 \"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 633 \"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 655 \"metafns.gperf\"\n       {\"extent\", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},\n-#line 588 \"metafns.gperf\"\n+#line 594 \"metafns.gperf\"\n       {\"is_enum_type\", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 548 \"metafns.gperf\"\n+#line 554 \"metafns.gperf\"\n       {\"template_of\", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},\n-#line 528 \"metafns.gperf\"\n+#line 534 \"metafns.gperf\"\n       {\"is_class_template\", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 512 \"metafns.gperf\"\n+#line 518 \"metafns.gperf\"\n       {\"is_special_member_function\", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 473 \"metafns.gperf\"\n+#line 479 \"metafns.gperf\"\n       {\"is_protected\", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},\n-#line 540 \"metafns.gperf\"\n+#line 546 \"metafns.gperf\"\n       {\"is_nonstatic_data_member\", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 682 \"metafns.gperf\"\n+#line 688 \"metafns.gperf\"\n       {\"unwrap_reference\", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 502 \"metafns.gperf\"\n+#line 508 \"metafns.gperf\"\n       {\"is_enumerable_type\", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 594 \"metafns.gperf\"\n+#line 600 \"metafns.gperf\"\n       {\"is_arithmetic_type\", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 545 \"metafns.gperf\"\n+#line 551 \"metafns.gperf\"\n       {\"parent_of\", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},\n-#line 476 \"metafns.gperf\"\n+#line 482 \"metafns.gperf\"\n       {\"is_pure_virtual\", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 675 \"metafns.gperf\"\n+#line 681 \"metafns.gperf\"\n       {\"add_pointer\", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 616 \"metafns.gperf\"\n+#line 622 \"metafns.gperf\"\n       {\"is_default_constructible_type\", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 680 \"metafns.gperf\"\n+#line 686 \"metafns.gperf\"\n       {\"underlying_type\", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},\n-#line 521 \"metafns.gperf\"\n+#line 527 \"metafns.gperf\"\n       {\"is_function_parameter\", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 464 \"metafns.gperf\"\n+#line 470 \"metafns.gperf\"\n       {\"identifier_of\", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 597 \"metafns.gperf\"\n+#line 603 \"metafns.gperf\"\n       {\"is_scalar_type\", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 669 \"metafns.gperf\"\n+#line 675 \"metafns.gperf\"\n       {\"add_rvalue_reference\", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 490 \"metafns.gperf\"\n+#line 496 \"metafns.gperf\"\n       {\"is_mutable_member\", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 507 \"metafns.gperf\"\n+#line 513 \"metafns.gperf\"\n       {\"is_namespace_alias\", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 631 \"metafns.gperf\"\n+#line 637 \"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 634 \"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 520 \"metafns.gperf\"\n       {\"is_default_constructor\", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 486 \"metafns.gperf\"\n+#line 492 \"metafns.gperf\"\n       {\"is_enumerator\", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 536 \"metafns.gperf\"\n+#line 542 \"metafns.gperf\"\n       {\"is_object\", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},\n-#line 608 \"metafns.gperf\"\n+#line 614 \"metafns.gperf\"\n       {\"is_aggregate_type\", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 520 \"metafns.gperf\"\n+#line 526 \"metafns.gperf\"\n       {\"is_destructor\", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 587 \"metafns.gperf\"\n+#line 593 \"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 602 \"metafns.gperf\"\n       {\"is_object_type\", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 569 \"metafns.gperf\"\n+#line 575 \"metafns.gperf\"\n       {\"substitute\", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 585 \"metafns.gperf\"\n+#line 591 \"metafns.gperf\"\n       {\"is_rvalue_reference_type\", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 666 \"metafns.gperf\"\n+#line 672 \"metafns.gperf\"\n       {\"add_cv\", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},\n-#line 570 \"metafns.gperf\"\n+#line 576 \"metafns.gperf\"\n       {\"reflect_constant\", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,},\n-#line 629 \"metafns.gperf\"\n+#line 635 \"metafns.gperf\"\n       {\"is_trivially_assignable_type\", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 475 \"metafns.gperf\"\n+#line 481 \"metafns.gperf\"\n       {\"is_virtual\", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 493 \"metafns.gperf\"\n+#line 499 \"metafns.gperf\"\n       {\"has_static_storage_duration\", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 668 \"metafns.gperf\"\n+#line 674 \"metafns.gperf\"\n       {\"add_lvalue_reference\", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 584 \"metafns.gperf\"\n+#line 590 \"metafns.gperf\"\n       {\"is_lvalue_reference_type\", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 562 \"metafns.gperf\"\n+#line 568 \"metafns.gperf\"\n       {\"enumerators_of\", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 624 \"metafns.gperf\"\n+#line 630 \"metafns.gperf\"\n       {\"is_destructible_type\", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 549 \"metafns.gperf\"\n+#line 555 \"metafns.gperf\"\n       {\"template_arguments_of\", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 657 \"metafns.gperf\"\n+#line 663 \"metafns.gperf\"\n       {\"is_invocable_type\", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 664 \"metafns.gperf\"\n+#line 670 \"metafns.gperf\"\n       {\"add_const\", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 529 \"metafns.gperf\"\n+#line 535 \"metafns.gperf\"\n       {\"is_alias_template\", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 604 \"metafns.gperf\"\n+#line 610 \"metafns.gperf\"\n       {\"is_empty_type\", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 632 \"metafns.gperf\"\n+#line 638 \"metafns.gperf\"\n       {\"is_trivially_destructible_type\", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 498 \"metafns.gperf\"\n+#line 504 \"metafns.gperf\"\n       {\"has_external_linkage\", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 553 \"metafns.gperf\"\n+#line 559 \"metafns.gperf\"\n       {\"is_accessible\", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 658 \"metafns.gperf\"\n+#line 664 \"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+#line 658 \"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+#line 607 \"metafns.gperf\"\n       {\"is_volatile_type\", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 573 \"metafns.gperf\"\n+#line 579 \"metafns.gperf\"\n       {\"reflect_constant_string\", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 626 \"metafns.gperf\"\n+#line 632 \"metafns.gperf\"\n       {\"is_trivially_default_constructible_type\", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 532 \"metafns.gperf\"\n+#line 538 \"metafns.gperf\"\n       {\"is_literal_operator_template\", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 460 \"metafns.gperf\"\n+#line 466 \"metafns.gperf\"\n       {\"operator_of\", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},\n-#line 610 \"metafns.gperf\"\n+#line 616 \"metafns.gperf\"\n       {\"is_signed_type\", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 614 \"metafns.gperf\"\n+#line 620 \"metafns.gperf\"\n       {\"is_scoped_enum_type\", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 622 \"metafns.gperf\"\n+#line 628 \"metafns.gperf\"\n       {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 561 \"metafns.gperf\"\n+#line 567 \"metafns.gperf\"\n       {\"subobjects_of\", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 563 \"metafns.gperf\"\n+#line 569 \"metafns.gperf\"\n       {\"offset_of\", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},\n-#line 537 \"metafns.gperf\"\n+#line 543 \"metafns.gperf\"\n       {\"is_structured_binding\", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,},\n-#line 478 \"metafns.gperf\"\n+#line 484 \"metafns.gperf\"\n       {\"is_final\", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},\n-#line 511 \"metafns.gperf\"\n+#line 517 \"metafns.gperf\"\n       {\"is_literal_operator\", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 671 \"metafns.gperf\"\n+#line 677 \"metafns.gperf\"\n       {\"make_unsigned\", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 467 \"metafns.gperf\"\n+#line 473 \"metafns.gperf\"\n       {\"u8display_string_of\", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 644 \"metafns.gperf\"\n+#line 650 \"metafns.gperf\"\n       {\"has_virtual_destructor\", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,},\n-#line 600 \"metafns.gperf\"\n+#line 606 \"metafns.gperf\"\n       {\"is_const_type\", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 483 \"metafns.gperf\"\n+#line 489 \"metafns.gperf\"\n       {\"is_explicit\", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},\n-#line 576 \"metafns.gperf\"\n+#line 582 \"metafns.gperf\"\n       {\"is_data_member_spec\", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,},\n-#line 501 \"metafns.gperf\"\n+#line 507 \"metafns.gperf\"\n       {\"is_complete_type\", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 487 \"metafns.gperf\"\n+#line 493 \"metafns.gperf\"\n       {\"is_annotation\", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},\n-#line 591 \"metafns.gperf\"\n+#line 597 \"metafns.gperf\"\n       {\"is_function_type\", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 552 \"metafns.gperf\"\n+#line 558 \"metafns.gperf\"\n       {\"return_type_of\", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 479 \"metafns.gperf\"\n+#line 485 \"metafns.gperf\"\n       {\"is_deleted\", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},\n-#line 471 \"metafns.gperf\"\n+#line 477 \"metafns.gperf\"\n       {\"constant_of\", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},\n-#line 665 \"metafns.gperf\"\n+#line 671 \"metafns.gperf\"\n       {\"add_volatile\", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 480 \"metafns.gperf\"\n+#line 486 \"metafns.gperf\"\n       {\"is_defaulted\", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},\n-#line 645 \"metafns.gperf\"\n+#line 651 \"metafns.gperf\"\n       {\"has_unique_object_representations\", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},\n-#line 586 \"metafns.gperf\"\n+#line 592 \"metafns.gperf\"\n       {\"is_member_object_pointer_type\", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 466 \"metafns.gperf\"\n+#line 472 \"metafns.gperf\"\n       {\"display_string_of\", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 522 \"metafns.gperf\"\n+#line 528 \"metafns.gperf\"\n       {\"is_explicit_object_parameter\", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 541 \"metafns.gperf\"\n+#line 547 \"metafns.gperf\"\n       {\"is_static_member\", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 470 \"metafns.gperf\"\n+#line 476 \"metafns.gperf\"\n       {\"object_of\", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},\n-#line 609 \"metafns.gperf\"\n+#line 615 \"metafns.gperf\"\n       {\"is_consteval_only_type\", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 477 \"metafns.gperf\"\n+#line 483 \"metafns.gperf\"\n       {\"is_override\", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},\n-#line 663 \"metafns.gperf\"\n+#line 669 \"metafns.gperf\"\n       {\"remove_cv\", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},\n-#line 571 \"metafns.gperf\"\n+#line 577 \"metafns.gperf\"\n       {\"reflect_object\", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 581 \"metafns.gperf\"\n+#line 587 \"metafns.gperf\"\n       {\"is_floating_point_type\", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 463 \"metafns.gperf\"\n+#line 469 \"metafns.gperf\"\n       {\"has_identifier\", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},\n-#line 667 \"metafns.gperf\"\n+#line 673 \"metafns.gperf\"\n       {\"remove_reference\", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 555 \"metafns.gperf\"\n+#line 561 \"metafns.gperf\"\n       {\"has_inaccessible_bases\", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 499 \"metafns.gperf\"\n+#line 505 \"metafns.gperf\"\n       {\"has_c_language_linkage\", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 556 \"metafns.gperf\"\n+#line 562 \"metafns.gperf\"\n       {\"has_inaccessible_subobjects\", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 672 \"metafns.gperf\"\n+#line 678 \"metafns.gperf\"\n       {\"remove_extent\", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},\n-#line 554 \"metafns.gperf\"\n+#line 560 \"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+#line 498 \"metafns.gperf\"\n       {\"is_rvalue_reference_qualified\", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 647 \"metafns.gperf\"\n+#line 653 \"metafns.gperf\"\n       {\"reference_converts_from_temporary\", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 590 \"metafns.gperf\"\n+#line 596 \"metafns.gperf\"\n       {\"is_class_type\", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 482 \"metafns.gperf\"\n+#line 488 \"metafns.gperf\"\n       {\"is_user_declared\", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},\n-#line 575 \"metafns.gperf\"\n+#line 581 \"metafns.gperf\"\n       {\"data_member_spec\", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},\n-#line 491 \"metafns.gperf\"\n+#line 497 \"metafns.gperf\"\n       {\"is_lvalue_reference_qualified\", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 494 \"metafns.gperf\"\n+#line 500 \"metafns.gperf\"\n       {\"has_thread_storage_duration\", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 485 \"metafns.gperf\"\n+#line 491 \"metafns.gperf\"\n       {\"is_bit_field\", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},\n-#line 676 \"metafns.gperf\"\n+#line 682 \"metafns.gperf\"\n       {\"remove_cvref\", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},\n-#line 681 \"metafns.gperf\"\n+#line 687 \"metafns.gperf\"\n       {\"invoke_result\", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},\n-#line 547 \"metafns.gperf\"\n+#line 553 \"metafns.gperf\"\n       {\"has_template_arguments\", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,},\n-#line 510 \"metafns.gperf\"\n+#line 516 \"metafns.gperf\"\n       {\"is_operator_function\", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 674 \"metafns.gperf\"\n+#line 680 \"metafns.gperf\"\n       {\"remove_pointer\", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 546 \"metafns.gperf\"\n+#line 552 \"metafns.gperf\"\n       {\"dealias\", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},\n-#line 661 \"metafns.gperf\"\n+#line 667 \"metafns.gperf\"\n       {\"remove_const\", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 531 \"metafns.gperf\"\n+#line 537 \"metafns.gperf\"\n       {\"is_operator_function_template\", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 646 \"metafns.gperf\"\n+#line 652 \"metafns.gperf\"\n       {\"reference_constructs_from_temporary\", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 673 \"metafns.gperf\"\n+#line 679 \"metafns.gperf\"\n       {\"remove_all_extents\", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,},\n-#line 582 \"metafns.gperf\"\n+#line 588 \"metafns.gperf\"\n       {\"is_array_type\", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 496 \"metafns.gperf\"\n+#line 502 \"metafns.gperf\"\n       {\"has_internal_linkage\", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 670 \"metafns.gperf\"\n+#line 676 \"metafns.gperf\"\n       {\"make_signed\", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 559 \"metafns.gperf\"\n+#line 565 \"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 604 \"metafns.gperf\"\n       {\"is_compound_type\", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 606 \"metafns.gperf\"\n+#line 612 \"metafns.gperf\"\n       {\"is_abstract_type\", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 577 \"metafns.gperf\"\n+#line 583 \"metafns.gperf\"\n       {\"define_aggregate\", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 692 \"metafns.gperf\"\n+#line 698 \"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 699 \"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+#line 619 \"metafns.gperf\"\n       {\"is_unbounded_array_type\", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 603 \"metafns.gperf\"\n+#line 609 \"metafns.gperf\"\n       {\"is_standard_layout_type\", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 683 \"metafns.gperf\"\n+#line 689 \"metafns.gperf\"\n       {\"unwrap_ref_decay\", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 574 \"metafns.gperf\"\n+#line 580 \"metafns.gperf\"\n       {\"reflect_constant_array\", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 462 \"metafns.gperf\"\n+#line 468 \"metafns.gperf\"\n       {\"u8symbol_of\", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,},\n-#line 580 \"metafns.gperf\"\n+#line 586 \"metafns.gperf\"\n       {\"is_integral_type\", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 560 \"metafns.gperf\"\n+#line 566 \"metafns.gperf\"\n       {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 607 \"metafns.gperf\"\n+#line 613 \"metafns.gperf\"\n       {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 662 \"metafns.gperf\"\n+#line 668 \"metafns.gperf\"\n       {\"remove_volatile\", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 565 \"metafns.gperf\"\n+#line 571 \"metafns.gperf\"\n       {\"alignment_of\", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 468 \"metafns.gperf\"\n+#line 474 \"metafns.gperf\"\n       {\"source_location_of\", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,},\n-#line 690 \"metafns.gperf\"\n+#line 696 \"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 471 \"metafns.gperf\"\n       {\"u8identifier_of\", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 677 \"metafns.gperf\"\n+#line 683 \"metafns.gperf\"\n       {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 689 \"metafns.gperf\"\n+#line 695 \"metafns.gperf\"\n       {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 589 \"metafns.gperf\"\n+#line 595 \"metafns.gperf\"\n       {\"is_union_type\", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 481 \"metafns.gperf\"\n+#line 487 \"metafns.gperf\"\n       {\"is_user_provided\", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,},\n-#line 611 \"metafns.gperf\"\n+#line 617 \"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",
    "prefixes": []
}