[{"id":3679959,"web_url":"http://patchwork.ozlabs.org/comment/3679959/","msgid":"<CACb0b4=Yo6Ggqs9bBfuvcn_U2RRXGtZNVWhVbO_Lar2to9DphA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-21T15:52:31","subject":"Re: [PATCH v2] c++/reflection: bogus -Wmissing-field-initializers\n with <meta> [PR124950]","submitter":{"id":48004,"url":"http://patchwork.ozlabs.org/api/people/48004/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"content":"On Tue, 21 Apr 2026 at 15:49, Marek Polacek <polacek@redhat.com> wrote:\n>\n> On Tue, Apr 21, 2026 at 07:19:13AM +0100, Jonathan Wakely wrote:\n> > On Tue, 21 Apr 2026, 02:43 Tim Song, <t.canens.cpp@gmail.com> wrote:\n> >\n> > > Might be better to leave out the initializer for name since not specifying\n> > > it is pretty unusual? That matches what Barry proposed in some version of\n> > > P3795 before it was removed in an LWG telecon (for lack of normative\n> > > effect).\n> > >\n> >\n> > Yes, I think that was what LWG agreed with, but couldn't say so in the\n> > standard wording.\n>\n> That means that we'll emit a warning with\n>\n>   data_member_spec (^^int, { .bit_width = 8 })\n\nYes, you can do .name = {} to make it explicit that you want an\nanonymous bitfield. I don't expect that to be common anyway.\n\n> which I don't like, but if that's what's been decided, here's an\n> updated patch.\n\nOK for trunk, thanks.\n\n>\n> > And would it be simpler to initialize alignment and bit_width with {}\n> > instead of nullopt? There's only one constructor that's viable for {} so no\n> > need to do resolution to find the best match for =nullopt.\n>\n> Done.\n>\n> Tested reflect/*, ok for trunk?\n>\n> -- >8 --\n> We emit -Wmissing-field-initializers warnings for code like\n>\n>   data_member_spec (^^int, { .name = \"dms\" })\n>\n> which seems undesirable.  We can initialize the members of\n> std::meta::data_member_options to suppress that warning (clang's <meta>\n> has these initializers too).\n>\n>         PR c++/124950\n>\n> libstdc++-v3/ChangeLog:\n>\n>         * include/std/meta (std::meta::data_member_options): Initialize\n>         alignment, bit_width, and annotations members.\n>\n> gcc/testsuite/ChangeLog:\n>\n>         * g++.dg/reflect/data_member_spec7.C: New test.\n> ---\n>  gcc/testsuite/g++.dg/reflect/data_member_spec7.C | 9 +++++++++\n>  libstdc++-v3/include/std/meta                    | 6 +++---\n>  2 files changed, 12 insertions(+), 3 deletions(-)\n>  create mode 100644 gcc/testsuite/g++.dg/reflect/data_member_spec7.C\n>\n> diff --git a/gcc/testsuite/g++.dg/reflect/data_member_spec7.C b/gcc/testsuite/g++.dg/reflect/data_member_spec7.C\n> new file mode 100644\n> index 00000000000..057db043bf8\n> --- /dev/null\n> +++ b/gcc/testsuite/g++.dg/reflect/data_member_spec7.C\n> @@ -0,0 +1,9 @@\n> +// PR c++/124950\n> +// { dg-do compile { target c++26 } }\n> +// { dg-additional-options \"-freflection -Wmissing-field-initializers\" }\n> +// Test that we don't emit bogus -Wmissing-field-initializers warnings.\n> +\n> +#include <meta>\n> +using namespace std::meta;\n> +constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n> +constexpr auto dms2 = data_member_spec (^^int, { .bit_width = 8 }); // { dg-warning \"missing initializer\" }\n> diff --git a/libstdc++-v3/include/std/meta b/libstdc++-v3/include/std/meta\n> index 22b4da44cdd..b12f49a2096 100644\n> --- a/libstdc++-v3/include/std/meta\n> +++ b/libstdc++-v3/include/std/meta\n> @@ -424,10 +424,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n>        };\n>\n>        optional<_Name> name;\n> -      optional<int> alignment;\n> -      optional<int> bit_width;\n> +      optional<int> alignment = {};\n> +      optional<int> bit_width = {};\n>        bool no_unique_address = false;\n> -      vector<info> annotations;\n> +      vector<info> annotations = {};\n>      };\n>      consteval info data_member_spec(info, data_member_options);\n>      consteval bool is_data_member_spec(info);\n>\n> base-commit: 6adc49fc08cb87b0e7c8ead3176b45dae2ff4e2a\n> --\n> 2.53.0\n>","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=bEfMX1rt;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=bEfMX1rt","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0Rj2430Qz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 01:53:25 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 2DC1B4B9DB57\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 15:53:23 +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 4DDDC4BA900D\n for <gcc-patches@gcc.gnu.org>; Tue, 21 Apr 2026 15:52:51 +0000 (GMT)","from mail-yx1-f70.google.com (mail-yx1-f70.google.com\n [74.125.224.70]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-257-NaXX2f5jNE2f76_ADfVOpQ-1; Tue, 21 Apr 2026 11:52:48 -0400","by mail-yx1-f70.google.com with SMTP id\n 956f58d0204a3-65426499058so3767144d50.0\n for <gcc-patches@gcc.gnu.org>; Tue, 21 Apr 2026 08:52:48 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 2DC1B4B9DB57","OpenDKIM Filter v2.11.0 sourceware.org 4DDDC4BA900D"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 4DDDC4BA900D","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 4DDDC4BA900D","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776786771; cv=none;\n b=Rg7F1DArc9g9TRpp7c171ZM4UjL8Zh7rpvCA7ACk8NkjJggpF+7D8asV9T6DOCWS051JRL2YoENHEeyLLG03hmcPzJXFOtFbSddJH8Dxdes8lztqp6vb0OGXhSEenUFMYO7oXSu6OhS9ZD+tUWEi7KYdfKnYAKNz9QcmL8oQxKo=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776786771; c=relaxed/simple;\n bh=EvNHIU8TkyyinfP6iVcSGTAvFAhF+gIX0HyDrl2Ud3w=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=ZRYEubbfgeOObahGrgupcGvJmloEyF62cY4TiZ6It0KhGbNWW3Q9guT0V1QQBS24vzjdN+EzxejszCskEiCtnxWMxY+wa+wU0OONO4blaFrfrOSB0K64OnIQV8t7ssvpUPhapvu3YY/5YLN1bYd9EECRZiLe8b4SZ8FYlkBSEiY=","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=1776786770;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=2673WW/cwuQvJ8sdpnrxuejn6Se3fcJ4XrwcBwAhcBE=;\n b=bEfMX1rtp7iOWojVjVAxBEvdYjCnj5srgzL5epbpElo/STajdZ5zZEnrpsT6QAdBvzqDsG\n 9HYLFCDgqQaekB+GICos2Oj3VeEgdLI5TCPJIvcKb+mUVXUbYGiVwQrYLA8YK5PVQFaVxU\n qXEpFiXoqew/LrogI7ePM5jhoc/gcQM=","X-MC-Unique":"NaXX2f5jNE2f76_ADfVOpQ-1","X-Mimecast-MFC-AGG-ID":"NaXX2f5jNE2f76_ADfVOpQ_1776786768","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776786768; x=1777391568;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=2673WW/cwuQvJ8sdpnrxuejn6Se3fcJ4XrwcBwAhcBE=;\n b=kMnC91qlPQ+pJ+05WFWn78TLZVC+RQvRW49KQv4xKzlJGD2ShqUAxAR3eZEp0/tgpX\n lwabNnyr4vw6wwoX3xKZKGyJlI0B1GPgR0XK2td4109plABvjzrBwg7OtJTeZNx5C356\n UHphFad7pf/VheIUTbem8l4kmjmh3rA5/nC5W46r8VGIc62GBb2z9a+YZEYk6U4y7Y+/\n c99Bn6wXVNeyKYN5qfY/P7moBcJukyuZ2e8A8WXJZu3eBe+eHZw8or74zszAi21MoJoY\n 7oSy3TaPKRdmWhbT3IE/Nzq1P/kj8lC31r6OW8QVIC9c4shsN5sJLCJ7/3kmY93x84NC\n GXvg==","X-Forwarded-Encrypted":"i=1;\n AFNElJ99UosliDmzjcXsjtSNDpvUh4NQNI/GrwGia3PWUO1SX4qgNXY/YrQp5Pdgm9PA8ToavfZDnpgyL1s/Gw==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YzHbKmnqFdA/2zi2UDXUvQhcNPYKDWns0K6tPY+DpO3WYJJrvLG\n B/fEtxMdUoeJOes1n6errBPbcE08SNfAoWLU3rPLo66ts+e09jaLlLJ5CpxPnuGSHUH295t33xT\n 6q135mDoClN7ULfG4+otNwz4+KWvCztVxt7SfarNpd4dEqhaOWEcHy9diesY34kp3AS/0XAR+48\n Cn4BF6ASj6gl4/zqigb2HLBembmYhsxz+1nA==","X-Gm-Gg":"AeBDiet1SBjjFz1UQkOG70Gcph/vfRNOLi9LMu+g12MckM8KTIjk17W58BnHwHu6nHT\n ZC/0/3y6LhA54z/oNzYXr8IIhK3dPGsVdoaiVrTrdTgdyEiif+z5aECxsvMId/8srVcruWi9qN3\n uBpDuZb65AzljNn/4scpalDnQCCFGhJRWFcikvlut8ZpaIVn+N9hgUGBquA+wqnYSh69sM+a+VN\n KYQR3KvlFOIDEv525luMJFk/P6oaVAgB4TCp/ua1IHx0wHdsjoKv6VJgUPTBZmLjLNiaW175Hx1\n oA==","X-Received":["by 2002:a05:690e:4319:b0:651:cf23:6612 with SMTP id\n 956f58d0204a3-65310a12bb9mr12851044d50.34.1776786767584;\n Tue, 21 Apr 2026 08:52:47 -0700 (PDT)","by 2002:a05:690e:4319:b0:651:cf23:6612 with SMTP id\n 956f58d0204a3-65310a12bb9mr12851010d50.34.1776786767135; Tue, 21 Apr 2026\n 08:52:47 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260420214446.565889-1-polacek@redhat.com>\n <CAPQZVxvQjkyMSiXc=eeyV=qXhLpsR_sY7kGPVnNBbYPBp9ZSjQ@mail.gmail.com>\n <CAH6eHdTx=KiL_k+i=_QOVOLfwEevvtenyFVV_kBb-OV08CAsSw@mail.gmail.com>\n <aeeOi00Sv-Bt873g@redhat.com>","In-Reply-To":"<aeeOi00Sv-Bt873g@redhat.com>","From":"Jonathan Wakely <jwakely@redhat.com>","Date":"Tue, 21 Apr 2026 16:52:31 +0100","X-Gm-Features":"AQROBzBYa8F1RJUMeupy-CwzxfsKBDDW2Ofla1eLuB-y5YNfz_qR5QSF0UY8Ifc","Message-ID":"\n <CACb0b4=Yo6Ggqs9bBfuvcn_U2RRXGtZNVWhVbO_Lar2to9DphA@mail.gmail.com>","Subject":"Re: [PATCH v2] c++/reflection: bogus -Wmissing-field-initializers\n with <meta> [PR124950]","To":"Marek Polacek <polacek@redhat.com>","Cc":"Jonathan Wakely <jwakely.gcc@gmail.com>,\n Tim Song <t.canens.cpp@gmail.com>,\n Jakub Jelinek <jakub@redhat.com>, Jason Merrill <jason@redhat.com>,\n GCC Patches <gcc-patches@gcc.gnu.org>, \"libstdc++\" <libstdc++@gcc.gnu.org>,\n Barry Revzin <barry.revzin@gmail.com>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"AFo1-xDOqg2CpyVgwLwV69CNcUcHZB1bvrEWa6EjkCY_1776786768","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=\"UTF-8\"","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]