get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2217384,
    "url": "http://patchwork.ozlabs.org/api/patches/2217384/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/ace9gxVOzrcF3xLS@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": "<ace9gxVOzrcF3xLS@tucnak>",
    "list_archive_url": null,
    "date": "2026-03-28T11:37:39",
    "name": "c++, libstdc++: Implement P4156R0 - Rename meta::has_ellipsis_parameter to meta::is_vararg_function",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "0627da1e9d65db781919d893b233c0956f4213c5",
    "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/ace9gxVOzrcF3xLS@tucnak/mbox/",
    "series": [
        {
            "id": 497863,
            "url": "http://patchwork.ozlabs.org/api/series/497863/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=497863",
            "date": "2026-03-28T11:37:39",
            "name": "c++, libstdc++: Implement P4156R0 - Rename meta::has_ellipsis_parameter to meta::is_vararg_function",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/497863/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217384/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217384/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=OvC9pX6z;\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=OvC9pX6z",
            "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 [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 4fjb9p3lMVz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 22:38:22 +1100 (AEDT)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A71DA4BA23E8\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Mar 2026 11:38:18 +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 386EB4BA23F9\n for <gcc-patches@gcc.gnu.org>; Sat, 28 Mar 2026 11:37:47 +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-423-gw-HqbO4MYi374i_s5Ik1A-1; Sat,\n 28 Mar 2026 07:37:45 -0400",
            "from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])\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 5AF9A180034E\n for <gcc-patches@gcc.gnu.org>; Sat, 28 Mar 2026 11:37:44 +0000 (UTC)",
            "from tucnak.zalov.cz (unknown [10.45.225.193])\n by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id 553B119560B1; Sat, 28 Mar 2026 11:37:43 +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 62SBbeaw2714478\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Sat, 28 Mar 2026 12:37:40 +0100",
            "(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 62SBbeXf2714477;\n Sat, 28 Mar 2026 12:37:40 +0100"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org A71DA4BA23E8",
            "OpenDKIM Filter v2.11.0 sourceware.org 386EB4BA23F9"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 386EB4BA23F9",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 386EB4BA23F9",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774697867; cv=none;\n b=R5oxqmkf0/E7cBFPRP6IpW/PAtjsFENVdUaZhOEFS+79muVTD0PbS38OhLlitppDaWyl924dVaXk+q1K91YsmJg3O4e0csjQC8mWEJQzWxC/wwePHWZUlod0+G9s133bzM+ujMFIEzJu1mCBmKosIYFJSsxP2HDiTBSXh6XATE0=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774697867; c=relaxed/simple;\n bh=rsGGqSmSdoMNlD8bgaHwFxNNGi53lhVGYi7V8GaHOOE=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=GoPo/W1yH2lHlNbgCzudPbjA8PRV4gnM/nBEf3V3O1ctJCUMPIrJeFqsSv2x5zy1f1xWzqvQIR02VCTUxm3WAvUXwhFSA5ox9Vz8qMcctr9TbKTYLkQBO5kRdDuw4GDuUuRlardjZWBQyzusap0SmkSNRrpg9MrRm18d1FNtMRU=",
        "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=1774697866;\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=ItqvRj/hrSUwLhWndR7osbE5lqFLPpaHHkskIZP5QSs=;\n b=OvC9pX6zRMw3yX9v9dPgIrKxbLHFjgliROGel9UXKbPMiq0RwKBSfDERAbPyLZJhMvlgcq\n 7BDrR7Mwe6146uorx03uZPGe7125gii0iKI096suvDqCUzyL2bLeMbeGuq7txXAZjE0ulE\n bTuy3xueve7EfBINwbPqfd0/h7Rcrrw=",
        "X-MC-Unique": "gw-HqbO4MYi374i_s5Ik1A-1",
        "X-Mimecast-MFC-AGG-ID": "gw-HqbO4MYi374i_s5Ik1A_1774697864",
        "Date": "Sat, 28 Mar 2026 12:37:39 +0100",
        "From": "Jakub Jelinek <jakub@redhat.com>",
        "To": "Jason Merrill <jason@redhat.com>, Marek Polacek <polacek@redhat.com>,\n Jonathan Wakely <jwakely@redhat.com>",
        "Cc": "gcc-patches@gcc.gnu.org",
        "Subject": "[PATCH] c++, libstdc++: Implement P4156R0 - Rename\n meta::has_ellipsis_parameter to meta::is_vararg_function",
        "Message-ID": "<ace9gxVOzrcF3xLS@tucnak>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.12",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "65aOLmUXYsMqeUOB2llHZx_Crdgx14S0xniwjwrpBC8_1774697864",
        "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\nUnhappy about the old and new names, as a function type is not a function,\nbut ces't la vie.\n\nTested on x86_64-linux.\n\n2026-03-28  Jakub Jelinek  <jakub@redhat.com>\n\ngcc/cp/\n\t* metafns.gperf (enum metafn_code): Remove\n\tMETAFN_HAS_ELLIPSIS_PARAMETER, add METAFN_IS_VARARG_FUNCTION.\n\t(has_ellipsis_parameter): Remove.\n\t(is_vararg_function): Add.\n\t* reflect.cc (eval_has_ellipsis_parameter): Rename to ...\n\t(eval_is_vararg_function): ... this.  Adjust function comment.\n\t(process_metafunction): Handle METAFN_IS_VARARG_FUNCTION\n\tinstead of METAFN_HAS_ELLIPSIS_PARAMETER.\n\t* metafns.h: Regenerate.\ngcc/testsuite/\n\t* g++.dg/reflect/has_ellipsis_parameter1.C: Rename to ...\n\t* g++.dg/reflect/is_vararg_function1.C: this.  New test.  Rename\n\thas_ellipsis_parameter to is_vararg_function everywhere.\nlibstdc++-v3/\n\t* include/std/meta (has_ellipsis_parameter): Rename to ...\n\t(is_vararg_function): ... this.  New declaration.\n\t* src/c++23/std.cc.in: Remove std::meta::has_ellipsis_parameter\n\texport, add std::meta::is_vararg_function export.\n\n\n\tJakub",
    "diff": "--- libstdc++-v3/include/std/meta.jj\t2026-03-27 18:34:12.497773682 +0100\n+++ libstdc++-v3/include/std/meta\t2026-03-27 18:35:27.617529247 +0100\n@@ -273,7 +273,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     consteval bool is_function_parameter(info);\n     consteval bool is_explicit_object_parameter(info);\n     consteval bool has_default_argument(info);\n-    consteval bool has_ellipsis_parameter(info);\n+    consteval bool is_vararg_function(info);\n \n     consteval bool is_template(info);\n     consteval bool is_function_template(info);\n--- libstdc++-v3/src/c++23/std.cc.in.jj\t2026-03-27 18:34:12.497773682 +0100\n+++ libstdc++-v3/src/c++23/std.cc.in\t2026-03-27 18:35:44.631247398 +0100\n@@ -2161,7 +2161,7 @@ export namespace std\n     using std::meta::is_function_parameter;\n     using std::meta::is_explicit_object_parameter;\n     using std::meta::has_default_argument;\n-    using std::meta::has_ellipsis_parameter;\n+    using std::meta::is_vararg_function;\n     using std::meta::is_template;\n     using std::meta::is_function_template;\n     using std::meta::is_variable_template;\n--- gcc/cp/metafns.gperf.jj\t2026-03-27 18:34:12.491773781 +0100\n+++ gcc/cp/metafns.gperf\t2026-03-27 18:36:38.861349024 +0100\n@@ -86,7 +86,7 @@ enum metafn_code {\n   METAFN_IS_FUNCTION_PARAMETER,\n   METAFN_IS_EXPLICIT_OBJECT_PARAMETER,\n   METAFN_HAS_DEFAULT_ARGUMENT,\n-  METAFN_HAS_ELLIPSIS_PARAMETER,\n+  METAFN_IS_VARARG_FUNCTION,\n   METAFN_IS_TEMPLATE,\n   METAFN_IS_FUNCTION_TEMPLATE,\n   METAFN_IS_VARIABLE_TEMPLATE,\n@@ -521,7 +521,7 @@ is_destructor, METAFN_IS_DESTRUCTOR, MET\n is_function_parameter, METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,\n is_explicit_object_parameter, METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,\n has_default_argument, METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,\n-has_ellipsis_parameter, METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,\n+is_vararg_function, METAFN_IS_VARARG_FUNCTION, METAFN_KIND_BOOL_INFO,\n is_template, METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,\n is_function_template, METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,\n is_variable_template, METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,\n--- gcc/cp/reflect.cc.jj\t2026-03-27 18:34:12.495773715 +0100\n+++ gcc/cp/reflect.cc\t2026-03-28 12:24:18.968719205 +0100\n@@ -1759,12 +1759,12 @@ eval_has_default_argument (tree r, refle\n     return boolean_false_node;\n }\n \n-/* Process std::meta::has_ellipsis_parameter.\n-   Returns: true if r represents a function or function type that has an\n-   ellipsis in its parameter-type-list.  Otherwise, false.  */\n+/* Process std::meta::is_vararg_function.\n+   Returns: true if r represents a function or function type that\n+   is a vararg function.  Otherwise, false.  */\n \n static tree\n-eval_has_ellipsis_parameter (tree r)\n+eval_is_vararg_function (tree r)\n {\n   r = MAYBE_BASELINK_FUNCTIONS (r);\n   if (TREE_CODE (r) == FUNCTION_DECL)\n@@ -7612,8 +7612,8 @@ process_metafunction (const constexpr_ct\n       return eval_is_explicit_object_parameter (h, kind);\n     case METAFN_HAS_DEFAULT_ARGUMENT:\n       return eval_has_default_argument (h, kind);\n-    case METAFN_HAS_ELLIPSIS_PARAMETER:\n-      return eval_has_ellipsis_parameter (h);\n+    case METAFN_IS_VARARG_FUNCTION:\n+      return eval_is_vararg_function (h);\n     case METAFN_IS_TEMPLATE:\n       return eval_is_template (h);\n     case METAFN_IS_FUNCTION_TEMPLATE:\n--- gcc/testsuite/g++.dg/reflect/has_ellipsis_parameter1.C.jj\t2026-03-27 10:17:16.125298250 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_ellipsis_parameter1.C\t2026-03-28 12:25:05.023941440 +0100\n@@ -1,148 +0,0 @@\n-// { dg-do compile { target c++26 } }\n-// { dg-additional-options \"-freflection\" }\n-// Test std::meta::has_ellipsis_parameter.\n-\n-#include <meta>\n-\n-using namespace std::meta;\n-\n-constexpr info null_reflection;\n-struct cls {\n-  int dm;\n-  static int static_dm;\n-  void mem_fun ();\n-  void mem_fun2 (int, ...);\n-  void mem_fun3 (...);\n-  void mem_fun4 (int);\n-  static void static_mem_fun ();\n-  static void static_mem_fun2 (int, long, ...);\n-  static void static_mem_fun3 (...);\n-  static void static_mem_fun4 (long);\n-  int &ref_dm = dm;\n-  using type = int;\n-} cls_var;\n-union onion { };\n-static union { int anon; };\n-using alias = cls;\n-void fun ();\n-void fun2 (int, ...);\n-void fun3 (...);\n-void fun4 (int, int);\n-int var;\n-int &ref = var;\n-int &&rref = 42;\n-int *ptr = &var;\n-namespace ns {}\n-namespace ns_alias = ns;\n-enum Enum { A };\n-enum class Enum_class { A };\n-using funt = int ();\n-using funt2 = int (int, ...);\n-using funt3 = int (...);\n-using funt4 = int (int, long);\n-\n-template<typename> struct incomplete_cls;\n-template<typename> struct cls_tmpl {};\n-template<typename> void fun_tmpl ();\n-template<typename> void fun_tmpl2 (int, ...);\n-template<typename> void fun_tmpl3 (...);\n-template<typename> void fun_tmpl4 (long, int);\n-template<typename> concept conc = requires { true; };\n-template<typename> int var_tmpl;\n-template<typename T> using cls_tmpl_alias = cls_tmpl<T>;\n-\n-int arr[] = { 42 };\n-using inc_arr = int[];\n-using com_arr = int[42];\n-auto [ decomp ] = arr;\n-auto &[ decomp_ref ] = arr;\n-\n-static_assert (!has_ellipsis_parameter (null_reflection));\n-static_assert (!has_ellipsis_parameter (^^::));\n-static_assert (!has_ellipsis_parameter (^^ns));\n-static_assert (!has_ellipsis_parameter (^^ns_alias));\n-static_assert (!has_ellipsis_parameter (reflect_constant (3)));\n-static_assert (!has_ellipsis_parameter (^^cls));\n-static_assert (!has_ellipsis_parameter (^^cls::dm));\n-static_assert (!has_ellipsis_parameter (^^cls::ref_dm));\n-static_assert (!has_ellipsis_parameter (^^cls::static_dm));\n-static_assert (!has_ellipsis_parameter (^^cls::mem_fun));\n-static_assert (has_ellipsis_parameter (^^cls::mem_fun2));\n-static_assert (has_ellipsis_parameter (^^cls::mem_fun3));\n-static_assert (!has_ellipsis_parameter (^^cls::mem_fun4));\n-static_assert (!has_ellipsis_parameter (^^cls::static_mem_fun));\n-static_assert (has_ellipsis_parameter (^^cls::static_mem_fun2));\n-static_assert (has_ellipsis_parameter (^^cls::static_mem_fun3));\n-static_assert (!has_ellipsis_parameter (^^cls::static_mem_fun4));\n-static_assert (!has_ellipsis_parameter (^^cls::type));\n-static_assert (!has_ellipsis_parameter (^^cls_var));\n-static_assert (!has_ellipsis_parameter (^^onion));\n-static_assert (!has_ellipsis_parameter (^^anon));\n-static_assert (!has_ellipsis_parameter (^^fun));\n-static_assert (has_ellipsis_parameter (^^fun2));\n-static_assert (has_ellipsis_parameter (^^fun3));\n-static_assert (!has_ellipsis_parameter (^^fun4));\n-static_assert (!has_ellipsis_parameter (type_of (^^fun)));\n-static_assert (has_ellipsis_parameter (type_of (^^fun2)));\n-static_assert (has_ellipsis_parameter (type_of (^^fun3)));\n-static_assert (!has_ellipsis_parameter (type_of (^^fun4)));\n-static_assert (!has_ellipsis_parameter (^^alias));\n-static_assert (!has_ellipsis_parameter (^^var));\n-static_assert (!has_ellipsis_parameter (^^ref));\n-static_assert (!has_ellipsis_parameter (^^rref));\n-static_assert (!has_ellipsis_parameter (^^ptr));\n-static_assert (!has_ellipsis_parameter (^^cls_tmpl));\n-static_assert (!has_ellipsis_parameter (^^cls_tmpl<int>));\n-static_assert (!has_ellipsis_parameter (^^incomplete_cls<int>));\n-static_assert (!has_ellipsis_parameter (^^fun_tmpl));\n-static_assert (!has_ellipsis_parameter (^^fun_tmpl<int>));\n-static_assert (!has_ellipsis_parameter (^^fun_tmpl2));\n-static_assert (has_ellipsis_parameter (^^fun_tmpl2<int>));\n-static_assert (!has_ellipsis_parameter (^^fun_tmpl3));\n-static_assert (has_ellipsis_parameter (^^fun_tmpl3<int>));\n-static_assert (!has_ellipsis_parameter (^^fun_tmpl4));\n-static_assert (!has_ellipsis_parameter (^^fun_tmpl4<int>));\n-static_assert (!has_ellipsis_parameter (^^conc));\n-static_assert (!has_ellipsis_parameter (substitute (^^conc, { ^^int })));\n-static_assert (!has_ellipsis_parameter (^^var_tmpl));\n-static_assert (!has_ellipsis_parameter (^^var_tmpl<int>));\n-static_assert (!has_ellipsis_parameter (^^cls_tmpl_alias));\n-static_assert (!has_ellipsis_parameter (^^cls_tmpl_alias<int>));\n-static_assert (!has_ellipsis_parameter (^^Enum));\n-static_assert (!has_ellipsis_parameter (^^Enum::A));\n-static_assert (!has_ellipsis_parameter (^^Enum_class));\n-static_assert (!has_ellipsis_parameter (^^Enum_class::A));\n-static_assert (!has_ellipsis_parameter (^^decomp));\n-static_assert (!has_ellipsis_parameter (^^decomp_ref));\n-static_assert (!has_ellipsis_parameter (^^arr));\n-static_assert (!has_ellipsis_parameter (^^inc_arr));\n-static_assert (!has_ellipsis_parameter (^^com_arr));\n-static_assert (!has_ellipsis_parameter (^^funt));\n-static_assert (has_ellipsis_parameter (^^funt2));\n-static_assert (has_ellipsis_parameter (^^funt3));\n-static_assert (!has_ellipsis_parameter (^^funt4));\n-\n-constexpr auto dms = data_member_spec (^^int, { .name = u8\"a\" });\n-static_assert (!has_ellipsis_parameter (dms));\n-\n-struct Base {};\n-struct Derived : Base {};\n-static_assert (!has_ellipsis_parameter (bases_of (^^Derived, access_context::unchecked ())[0]));\n-\n-template<typename T, info R, info R2, info R3>\n-void\n-f ()\n-{\n-  static_assert (!has_ellipsis_parameter (^^T));\n-  static_assert (!has_ellipsis_parameter (R));\n-  static_assert (!has_ellipsis_parameter (R2));\n-  static_assert (!has_ellipsis_parameter (R3));\n-}\n-\n-void\n-g (int p, cls c)\n-{\n-  f<int, ^^var, ^^ns, ^^cls>();\n-  static_assert (!has_ellipsis_parameter (^^p));\n-  static_assert (!has_ellipsis_parameter (^^c));\n-}\n--- gcc/testsuite/g++.dg/reflect/is_vararg_function1.C.jj\t2026-03-28 12:25:11.272835910 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_vararg_function1.C\t2026-03-28 12:25:25.749591435 +0100\n@@ -0,0 +1,148 @@\n+// { dg-do compile { target c++26 } }\n+// { dg-additional-options \"-freflection\" }\n+// Test std::meta::is_vararg_function.\n+\n+#include <meta>\n+\n+using namespace std::meta;\n+\n+constexpr info null_reflection;\n+struct cls {\n+  int dm;\n+  static int static_dm;\n+  void mem_fun ();\n+  void mem_fun2 (int, ...);\n+  void mem_fun3 (...);\n+  void mem_fun4 (int);\n+  static void static_mem_fun ();\n+  static void static_mem_fun2 (int, long, ...);\n+  static void static_mem_fun3 (...);\n+  static void static_mem_fun4 (long);\n+  int &ref_dm = dm;\n+  using type = int;\n+} cls_var;\n+union onion { };\n+static union { int anon; };\n+using alias = cls;\n+void fun ();\n+void fun2 (int, ...);\n+void fun3 (...);\n+void fun4 (int, int);\n+int var;\n+int &ref = var;\n+int &&rref = 42;\n+int *ptr = &var;\n+namespace ns {}\n+namespace ns_alias = ns;\n+enum Enum { A };\n+enum class Enum_class { A };\n+using funt = int ();\n+using funt2 = int (int, ...);\n+using funt3 = int (...);\n+using funt4 = int (int, long);\n+\n+template<typename> struct incomplete_cls;\n+template<typename> struct cls_tmpl {};\n+template<typename> void fun_tmpl ();\n+template<typename> void fun_tmpl2 (int, ...);\n+template<typename> void fun_tmpl3 (...);\n+template<typename> void fun_tmpl4 (long, int);\n+template<typename> concept conc = requires { true; };\n+template<typename> int var_tmpl;\n+template<typename T> using cls_tmpl_alias = cls_tmpl<T>;\n+\n+int arr[] = { 42 };\n+using inc_arr = int[];\n+using com_arr = int[42];\n+auto [ decomp ] = arr;\n+auto &[ decomp_ref ] = arr;\n+\n+static_assert (!is_vararg_function (null_reflection));\n+static_assert (!is_vararg_function (^^::));\n+static_assert (!is_vararg_function (^^ns));\n+static_assert (!is_vararg_function (^^ns_alias));\n+static_assert (!is_vararg_function (reflect_constant (3)));\n+static_assert (!is_vararg_function (^^cls));\n+static_assert (!is_vararg_function (^^cls::dm));\n+static_assert (!is_vararg_function (^^cls::ref_dm));\n+static_assert (!is_vararg_function (^^cls::static_dm));\n+static_assert (!is_vararg_function (^^cls::mem_fun));\n+static_assert (is_vararg_function (^^cls::mem_fun2));\n+static_assert (is_vararg_function (^^cls::mem_fun3));\n+static_assert (!is_vararg_function (^^cls::mem_fun4));\n+static_assert (!is_vararg_function (^^cls::static_mem_fun));\n+static_assert (is_vararg_function (^^cls::static_mem_fun2));\n+static_assert (is_vararg_function (^^cls::static_mem_fun3));\n+static_assert (!is_vararg_function (^^cls::static_mem_fun4));\n+static_assert (!is_vararg_function (^^cls::type));\n+static_assert (!is_vararg_function (^^cls_var));\n+static_assert (!is_vararg_function (^^onion));\n+static_assert (!is_vararg_function (^^anon));\n+static_assert (!is_vararg_function (^^fun));\n+static_assert (is_vararg_function (^^fun2));\n+static_assert (is_vararg_function (^^fun3));\n+static_assert (!is_vararg_function (^^fun4));\n+static_assert (!is_vararg_function (type_of (^^fun)));\n+static_assert (is_vararg_function (type_of (^^fun2)));\n+static_assert (is_vararg_function (type_of (^^fun3)));\n+static_assert (!is_vararg_function (type_of (^^fun4)));\n+static_assert (!is_vararg_function (^^alias));\n+static_assert (!is_vararg_function (^^var));\n+static_assert (!is_vararg_function (^^ref));\n+static_assert (!is_vararg_function (^^rref));\n+static_assert (!is_vararg_function (^^ptr));\n+static_assert (!is_vararg_function (^^cls_tmpl));\n+static_assert (!is_vararg_function (^^cls_tmpl<int>));\n+static_assert (!is_vararg_function (^^incomplete_cls<int>));\n+static_assert (!is_vararg_function (^^fun_tmpl));\n+static_assert (!is_vararg_function (^^fun_tmpl<int>));\n+static_assert (!is_vararg_function (^^fun_tmpl2));\n+static_assert (is_vararg_function (^^fun_tmpl2<int>));\n+static_assert (!is_vararg_function (^^fun_tmpl3));\n+static_assert (is_vararg_function (^^fun_tmpl3<int>));\n+static_assert (!is_vararg_function (^^fun_tmpl4));\n+static_assert (!is_vararg_function (^^fun_tmpl4<int>));\n+static_assert (!is_vararg_function (^^conc));\n+static_assert (!is_vararg_function (substitute (^^conc, { ^^int })));\n+static_assert (!is_vararg_function (^^var_tmpl));\n+static_assert (!is_vararg_function (^^var_tmpl<int>));\n+static_assert (!is_vararg_function (^^cls_tmpl_alias));\n+static_assert (!is_vararg_function (^^cls_tmpl_alias<int>));\n+static_assert (!is_vararg_function (^^Enum));\n+static_assert (!is_vararg_function (^^Enum::A));\n+static_assert (!is_vararg_function (^^Enum_class));\n+static_assert (!is_vararg_function (^^Enum_class::A));\n+static_assert (!is_vararg_function (^^decomp));\n+static_assert (!is_vararg_function (^^decomp_ref));\n+static_assert (!is_vararg_function (^^arr));\n+static_assert (!is_vararg_function (^^inc_arr));\n+static_assert (!is_vararg_function (^^com_arr));\n+static_assert (!is_vararg_function (^^funt));\n+static_assert (is_vararg_function (^^funt2));\n+static_assert (is_vararg_function (^^funt3));\n+static_assert (!is_vararg_function (^^funt4));\n+\n+constexpr auto dms = data_member_spec (^^int, { .name = u8\"a\" });\n+static_assert (!is_vararg_function (dms));\n+\n+struct Base {};\n+struct Derived : Base {};\n+static_assert (!is_vararg_function (bases_of (^^Derived, access_context::unchecked ())[0]));\n+\n+template<typename T, info R, info R2, info R3>\n+void\n+f ()\n+{\n+  static_assert (!is_vararg_function (^^T));\n+  static_assert (!is_vararg_function (R));\n+  static_assert (!is_vararg_function (R2));\n+  static_assert (!is_vararg_function (R3));\n+}\n+\n+void\n+g (int p, cls c)\n+{\n+  f<int, ^^var, ^^ns, ^^cls>();\n+  static_assert (!is_vararg_function (^^p));\n+  static_assert (!is_vararg_function (^^c));\n+}\n--- gcc/cp/metafns.h.jj\t2026-03-27 18:34:12.491773781 +0100\n+++ gcc/cp/metafns.h\t2026-03-27 18:36:49.234174196 +0100\n@@ -114,7 +114,7 @@ enum metafn_code {\n   METAFN_IS_FUNCTION_PARAMETER,\n   METAFN_IS_EXPLICIT_OBJECT_PARAMETER,\n   METAFN_HAS_DEFAULT_ARGUMENT,\n-  METAFN_HAS_ELLIPSIS_PARAMETER,\n+  METAFN_IS_VARARG_FUNCTION,\n   METAFN_IS_TEMPLATE,\n   METAFN_IS_FUNCTION_TEMPLATE,\n   METAFN_IS_VARIABLE_TEMPLATE,\n@@ -511,7 +511,7 @@ metafn_lookup::hash (const char *str, si\n       918, 918, 918, 918, 918,   5, 100, 145,  10,  45,\n       165,   5,  55,  50,  72,  20, 248,   0,  55, 105,\n         0, 205,   0,  45,  35,  55,  25, 195,   5, 199,\n-       20, 311,  20, 918, 918, 918, 918, 918, 918, 918,\n+       20, 311,  80, 918, 918, 918, 918, 918, 918, 918,\n       918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n       918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n       918, 918, 918, 918, 918, 918, 918, 918, 918, 918,\n@@ -630,12 +630,8 @@ metafn_lookup::find (const char *str, si\n       {\"is_nothrow_move_constructible_type\", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n #line 527 \"metafns.gperf\"\n       {\"is_variable_template\", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 686 \"metafns.gperf\"\n-      {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n #line 579 \"metafns.gperf\"\n       {\"is_null_pointer_type\", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 504 \"metafns.gperf\"\n-      {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n #line 472 \"metafns.gperf\"\n       {\"is_public\", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},\n #line 484 \"metafns.gperf\"\n@@ -690,6 +686,10 @@ metafn_lookup::find (const char *str, si\n       {\"symbol_of\", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},\n #line 617 \"metafns.gperf\"\n       {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 686 \"metafns.gperf\"\n+      {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n+#line 504 \"metafns.gperf\"\n+      {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n #line 615 \"metafns.gperf\"\n       {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n #line 495 \"metafns.gperf\"\n@@ -698,8 +698,8 @@ metafn_lookup::find (const char *str, si\n       {\"is_copy_assignable_type\", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n #line 684 \"metafns.gperf\"\n       {\"tuple_size\", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 506 \"metafns.gperf\"\n-      {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n+#line 524 \"metafns.gperf\"\n+      {\"is_vararg_function\", METAFN_IS_VARARG_FUNCTION, METAFN_KIND_BOOL_INFO,},\n #line 515 \"metafns.gperf\"\n       {\"is_copy_constructor\", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n #line 551 \"metafns.gperf\"\n@@ -754,8 +754,8 @@ metafn_lookup::find (const char *str, si\n       {\"is_member_pointer_type\", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n #line 621 \"metafns.gperf\"\n       {\"is_move_assignable_type\", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 524 \"metafns.gperf\"\n-      {\"has_ellipsis_parameter\", METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,},\n+#line 506 \"metafns.gperf\"\n+      {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n #line 516 \"metafns.gperf\"\n       {\"is_move_constructor\", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n #line 550 \"metafns.gperf\"\n@@ -1042,8 +1042,6 @@ metafn_lookup::find (const char *str, si\n       {\"is_integral_type\", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n #line 560 \"metafns.gperf\"\n       {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 677 \"metafns.gperf\"\n-      {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n #line 607 \"metafns.gperf\"\n       {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n #line 662 \"metafns.gperf\"\n@@ -1056,6 +1054,8 @@ metafn_lookup::find (const char *str, si\n       {\"annotations_of_with_type\", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,},\n #line 465 \"metafns.gperf\"\n       {\"u8identifier_of\", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n+#line 677 \"metafns.gperf\"\n+      {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n #line 689 \"metafns.gperf\"\n       {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n #line 589 \"metafns.gperf\"\n@@ -1078,21 +1078,21 @@ metafn_lookup::find (const char *str, si\n        -1,  -1,   1,  -1,  -1,   2,   3,  -1,   4,  -1,\n        -1,  -1,   5,  -1,  -1,  -1,   6,   7,  -1,   8,\n         9,  10,  11,  -1,  12,  13,  14,  -1,  -1,  15,\n-       16,  -1,  17,  -1,  -1,  18,  -1,  19,  -1,  20,\n-       -1,  21,  22,  -1,  23,  -1,  -1,  -1,  -1,  24,\n-       25,  26,  27,  -1,  -1,  28,  29,  -1,  30,  -1,\n-       31,  -1,  32,  33,  -1,  34,  -1,  -1,  -1,  -1,\n-       35,  36,  37,  38,  39,  40,  -1,  -1,  -1,  -1,\n-       -1,  41,  42,  -1,  43,  -1,  44,  -1,  -1,  45,\n-       -1,  46,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n+       16,  -1,  -1,  -1,  -1,  17,  -1,  -1,  -1,  18,\n+       -1,  19,  20,  -1,  21,  -1,  -1,  -1,  -1,  22,\n+       23,  24,  25,  -1,  -1,  26,  27,  -1,  28,  -1,\n+       29,  -1,  30,  31,  -1,  32,  -1,  -1,  -1,  -1,\n+       33,  34,  35,  36,  37,  38,  -1,  -1,  -1,  -1,\n+       -1,  39,  40,  -1,  41,  -1,  42,  -1,  -1,  43,\n+       -1,  44,  45,  -1,  -1,  -1,  -1,  46,  -1,  -1,\n        -1,  -1,  -1,  -1,  -1,  -1,  47,  48,  49,  -1,\n        50,  -1,  -1,  51,  52,  -1,  53,  54,  55,  56,\n        57,  58,  -1,  59,  -1,  -1,  -1,  60,  -1,  -1,\n        -1,  61,  -1,  62,  -1,  63,  64,  65,  66,  -1,\n        -1,  67,  -1,  -1,  -1,  -1,  -1,  68,  -1,  -1,\n        -1,  69,  70,  -1,  71,  -1,  -1,  72,  -1,  -1,\n-       73,  -1,  74,  75,  -1,  76,  -1,  77,  78,  79,\n-       -1,  -1,  -1,  -1,  80,  -1,  -1,  -1,  81,  -1,\n+       73,  -1,  74,  75,  -1,  76,  -1,  77,  78,  -1,\n+       -1,  -1,  -1,  79,  80,  -1,  -1,  -1,  81,  -1,\n        -1,  -1,  82,  83,  -1,  -1,  -1,  -1,  84,  -1,\n        85,  86,  -1,  87,  88,  89,  90,  -1,  91,  -1,\n        -1,  92,  -1,  -1,  -1,  -1,  93,  94,  -1,  -1,\n@@ -1135,13 +1135,13 @@ metafn_lookup::find (const char *str, si\n        -1,  -1,  -1,  -1,  -1,  -1,  -1, 218,  -1,  -1,\n        -1,  -1,  -1, 219,  -1,  -1,  -1, 220,  -1,  -1,\n        -1,  -1, 221,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n-      222,  -1,  -1,  -1,  -1,  -1, 223,  -1,  -1,  -1,\n-       -1,  -1, 224,  -1,  -1,  -1,  -1,  -1,  -1, 225,\n-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n-       -1,  -1, 226,  -1,  -1,  -1,  -1,  -1, 227,  -1,\n-       -1,  -1,  -1,  -1, 228,  -1,  -1,  -1,  -1,  -1,\n-       -1,  -1,  -1,  -1,  -1, 229,  -1,  -1,  -1,  -1,\n+      222,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n+       -1,  -1, 223,  -1,  -1,  -1,  -1,  -1,  -1, 224,\n        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n+       -1,  -1, 225,  -1,  -1,  -1,  -1,  -1, 226,  -1,\n+       -1,  -1,  -1,  -1, 227,  -1,  -1,  -1,  -1,  -1,\n+       -1,  -1,  -1,  -1,  -1, 228,  -1,  -1,  -1,  -1,\n+       -1,  -1,  -1,  -1,  -1,  -1, 229,  -1,  -1,  -1,\n        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n        -1,  -1,  -1,  -1, 230,  -1,  -1,  -1,  -1,  -1,\n        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\n",
    "prefixes": []
}