[{"id":3684132,"web_url":"http://patchwork.ozlabs.org/comment/3684132/","msgid":"<e6788033-df03-4502-ba5b-3636ecd5b098@redhat.com>","list_archive_url":null,"date":"2026-04-29T15:28:12","subject":"Re: [PATCH] c++: Delete default ctor for unions with all const\n members","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/29/26 5:43 AM, Jakub Jelinek wrote:\n> Hi!\n> \n> I've started looking at P3074R7/P3726R2 papers.\n> The former removes two bullets which describe when default ctor should be\n> deleted:\n> - X is a union and all of its variant members are of const-qualified type (or\n>    possibly multi-dimensional array thereof),\n> - X is a non-union class and all members of any anonymous union member are of\n>    const-qualified type (or possibly multi-dimensional array thereof).\n> These have been in [class.default.ctor] (or earlier in [class.ctor]) since\n> C++11 till C++23, but we apparently ignore these and accept it, while\n> clang++ deletes them.\n\nI'm inclined to treat dropping these bullets as a DR back to C++20, to \ngo along with the changes in P1330, P1331, and (particularly) CWG2424.\n\n> The following patch implements it for C++11 (I can't find similar wording\n> in C++98, but in C++98 one couldn't use NSDMIs and so gets other diagnostics\n> in such cases) through C++23 inclusive, not for C++26 because P3074R7 drops\n> those.\n> \n> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?\n> \n> 2026-04-28  Jakub Jelinek  <jakub@redhat.com>\n> \n> \t* method.cc (walk_field_subobs): Add ALL_CONST_P argument.  Determine\n> \tif all variant members are const qualified.  Diagnose and make deleted\n> \tfor C++11 to C++23 if all anonymous union members are const qualified.\n> \t(synthesized_method_walk): Diagnose and make deleted for C++11 to\n> \tC++23 if all variant members of a union are const qualified.\n> \n> \t* g++.dg/cpp0x/defaulted70.C: New test.\n> \t* g++.dg/init/pr25811.C: Expect another error for C++11 to C++23.\n> \t* g++.dg/init/pr43719.C: Likewise.\n> \n> --- gcc/cp/method.cc.jj\t2026-03-27 10:17:14.024332534 +0100\n> +++ gcc/cp/method.cc\t2026-04-28 19:12:37.903067733 +0200\n> @@ -2680,7 +2680,7 @@ walk_field_subobs (tree fields, special_\n>   \t\t   int quals, tree *spec_p, bool *trivial_p,\n>   \t\t   bool *deleted_p, bool *constexpr_p,\n>   \t\t   bool diag, int flags, tsubst_flags_t complain,\n> -\t\t   bool dtor_from_ctor)\n> +\t\t   bool dtor_from_ctor, int *all_const_p)\n>   {\n>     if (!fields)\n>       return;\n> @@ -2712,6 +2712,16 @@ walk_field_subobs (tree fields, special_\n>   \t  && TREE_CODE (ctx) == UNION_TYPE)\n>   \tbreak;\n>   \n> +      mem_type = strip_array_types (TREE_TYPE (field));\n> +\n> +      if (all_const_p && !ANON_AGGR_TYPE_P (mem_type))\n> +\t{\n> +\t  if (*all_const_p == -1 && CP_TYPE_CONST_P (mem_type))\n> +\t    *all_const_p = 1;\n> +\t  else if (!CP_TYPE_CONST_P (mem_type))\n> +\t    *all_const_p = 0;\n> +\t}\n> +\n>         if (only_dmi_mem != no)\n>   \t{\n>   \t  if (DECL_INITIAL (field))\n> @@ -2721,7 +2731,6 @@ walk_field_subobs (tree fields, special_\n>   \t    continue;\n>   \t}\n>   \n> -      mem_type = strip_array_types (TREE_TYPE (field));\n>         if (SFK_ASSIGN_P (sfk))\n>   \t{\n>   \t  bool bad = true;\n> @@ -2831,9 +2840,28 @@ walk_field_subobs (tree fields, special_\n>   \n>         if (ANON_AGGR_TYPE_P (mem_type))\n>   \t{\n> +\t  int *this_all_const_p = all_const_p, all_const = -1;\n> +\t  if (!all_const_p\n> +\t      && ANON_UNION_TYPE_P (mem_type)\n> +\t      && (sfk == sfk_constructor || sfk == sfk_inheriting_constructor)\n> +\t      && (cxx_dialect >= cxx11 && cxx_dialect <= cxx23))\n> +\t    this_all_const_p = &all_const;\n>   \t  walk_field_subobs (TYPE_FIELDS (mem_type), sfk, fnname, quals,\n>   \t\t\t     spec_p, trivial_p, deleted_p, constexpr_p,\n> -\t\t\t     diag, flags, complain, dtor_from_ctor);\n> +\t\t\t     diag, flags, complain, dtor_from_ctor,\n> +\t\t\t     this_all_const_p);\n> +\t  if (all_const == 1)\n> +\t    {\n> +\t      /* [class.default.ctor]/(2.6)\n> +\t\t X is a non-union class and all members of any anonymous union\n> +\t\t member are of const-qualified type (or array thereof).  */\n> +\t      if (diag)\n> +\t\terror_at (DECL_SOURCE_LOCATION (field),\n> +\t\t\t  \"all members of anonymous union member are \"\n> +\t\t\t  \"%<const%>-qualified\");\n> +\t      if (deleted_p)\n> +\t\t*deleted_p = true;\n> +\t    }\n>   \t  continue;\n>   \t}\n>   \n> @@ -3130,14 +3158,31 @@ synthesized_method_walk (tree ctype, spe\n>       }\n>   \n>     /* Now handle the non-static data members.  */\n> +  int *all_const_p = NULL, all_const = -1;\n> +  if ((sfk == sfk_constructor || sfk == sfk_inheriting_constructor)\n> +      && (cxx_dialect >= cxx11 && cxx_dialect <= cxx23)\n> +      && TREE_CODE (ctype) == UNION_TYPE)\n> +    all_const_p = &all_const;\n>     walk_field_subobs (TYPE_FIELDS (ctype), sfk, fnname, quals,\n>   \t\t     spec_p, trivial_p, deleted_p, constexpr_p,\n> -\t\t     diag, flags, complain, /*dtor_from_ctor*/false);\n> +\t\t     diag, flags, complain, /*dtor_from_ctor*/false,\n> +\t\t     all_const_p);\n> +  if (all_const == 1)\n> +    {\n> +      /* [class.default.ctor]/(2.5)\n> +\t X is a union and all of its variant members are of const-qualified\n> +\t type (or array thereof).  */\n> +      if (diag)\n> +\terror_at (DECL_SOURCE_LOCATION (TYPE_NAME (ctype)),\n> +\t\t  \"all variant members are %<const%>-qualified\");\n> +      if (deleted_p)\n> +\t*deleted_p = true;\n> +    }\n>     if (SFK_CTOR_P (sfk))\n>       walk_field_subobs (TYPE_FIELDS (ctype), sfk_destructor,\n>   \t\t       complete_dtor_identifier, TYPE_UNQUALIFIED,\n>   \t\t       NULL, NULL, deleted_p, NULL,\n> -\t\t       false, flags, complain, /*dtor_from_ctor*/true);\n> +\t\t       false, flags, complain, /*dtor_from_ctor*/true, NULL);\n>   \n>     pop_scope (scope);\n>   \n> --- gcc/testsuite/g++.dg/cpp0x/defaulted70.C.jj\t2026-04-28 19:17:37.949029070 +0200\n> +++ gcc/testsuite/g++.dg/cpp0x/defaulted70.C\t2026-04-28 19:18:27.894190340 +0200\n> @@ -0,0 +1,16 @@\n> +// { dg-do compile { target c++11 } }\n> +\n> +union A { const int a = 42; const long b; } a;\n> +// { dg-error \"use of deleted function 'A::A\\\\\\(\\\\\\)'\" \"\" { target c++23_down } .-1 }\n> +// { dg-message \"note: 'A::A\\\\\\(\\\\\\)' is implicitly deleted because the default definition would be ill-formed:\" \"\" { target c++23_down } .-2 }\n> +// { dg-error \"all variant members are 'const'-qualified\" \"\" { target c++23_down } .-3 }\n> +struct B { union { const int a = 42; const long b; }; } b;\n> +// { dg-error \"use of deleted function 'B::B\\\\\\(\\\\\\)'\" \"\" { target c++23_down } .-1 }\n> +// { dg-message \"note: 'B::B\\\\\\(\\\\\\)' is implicitly deleted because the default definition would be ill-formed:\" \"\" { target c++23_down } .-2 }\n> +// { dg-error \"all members of anonymous union member are 'const'-qualified\" \"\" { target c++23_down } .-3 }\n> +union C { const int a = 42; const long b; int c; } c;\n> +struct D { union { const int a = 42; const long b; int c; }; union { const int d = 42; const short e; }; } d;\n> +// { dg-error \"use of deleted function 'D::D\\\\\\(\\\\\\)'\" \"\" { target c++23_down } .-1 }\n> +// { dg-message \"note: 'D::D\\\\\\(\\\\\\)' is implicitly deleted because the default definition would be ill-formed:\" \"\" { target c++23_down } .-2 }\n> +// { dg-error \"all members of anonymous union member are 'const'-qualified\" \"\" { target c++23_down } .-3 }\n> +struct E { union { const int a = 42; const long b; int c; }; } e;\n> --- gcc/testsuite/g++.dg/init/pr25811.C.jj\t2026-03-27 10:17:15.871302394 +0100\n> +++ gcc/testsuite/g++.dg/init/pr25811.C\t2026-04-28 19:32:52.723677165 +0200\n> @@ -126,7 +126,7 @@ struct Z // { dg-error \"deleted\" \"\" { ta\n>   \n>   union U // { dg-message \"implicitly deleted\" \"\" { target c++11 } }\n>   \t// { dg-error \"uninitialized\" \"\" { target c++11 } .-1 }\n> -{\n> +{\t// { dg-error \"all variant members are 'const'-qualified\" \"\" { target { c++11 && c++23_down } } .-2 }\n>     int const i; // { dg-message \"should be initialized\" }\n>   };\n>   \n> --- gcc/testsuite/g++.dg/init/pr43719.C.jj\t2026-03-27 10:17:15.871302394 +0100\n> +++ gcc/testsuite/g++.dg/init/pr43719.C\t2026-04-28 19:33:21.594192733 +0200\n> @@ -110,7 +110,7 @@ struct Z\t\t// { dg-error \"deleted\" \"\" { t\n>   };\n>   \n>   union U // { dg-error \"uninitialized\" \"\" { target c++11 } }\n> -{\n> +{\t// { dg-error \"all variant members are 'const'-qualified\" \"\" { target { c++11 && c++23_down } } .-1 }\n>     int const i; // { dg-message \"should be initialized\" }\n>   };\n>   \n> \n> \tJakub\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=HC3InfwR;\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=HC3InfwR","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 4g5Lmx1Sdyz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 01:28:47 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id CD59A4BB5898\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 15:28:45 +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 529294BA23D8\n for <gcc-patches@gcc.gnu.org>; Wed, 29 Apr 2026 15:28:17 +0000 (GMT)","from mail-qt1-f200.google.com (mail-qt1-f200.google.com\n [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-217-cIwwrxx6OYqQotdtyvImug-1; Wed, 29 Apr 2026 11:28:15 -0400","by mail-qt1-f200.google.com with SMTP id\n d75a77b69052e-50fb3403e99so247686611cf.2\n for <gcc-patches@gcc.gnu.org>; Wed, 29 Apr 2026 08:28:15 -0700 (PDT)","from [192.168.50.130]\n (130-44-146-247.s12789.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com.\n [130.44.146.247]) by smtp.gmail.com with ESMTPSA id\n d75a77b69052e-5101ae8c6aesm22507711cf.24.2026.04.29.08.28.13\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Wed, 29 Apr 2026 08:28:13 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org CD59A4BB5898","OpenDKIM Filter v2.11.0 sourceware.org 529294BA23D8"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 529294BA23D8","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 529294BA23D8","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777476497; cv=none;\n b=GfSdJc3hYAi+jMybvPXT/9oi+/uj/l1+fN8xk0RuC+9IpZ9pZMr2ZbUvOPQCN29r+hqi8/xwyYC29tMTYfXgJdyqlzqbEhSFzyvBS4awHcXpaA8noZEi0HT/L9Jma36G680JW4OIFTZesaMjFZsv2J8Bm95Hz7kUqfZxvOpWTgg=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777476497; c=relaxed/simple;\n bh=RhJgQiQm3J7iHD0gXKuNChcd4wStny5d/uDztYReraI=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=g5549tvF08PHwBy0dRIX6lOqix9RKWBNsNupMwAL+k9DSKXUOb7Ev2Hn3fDFHsDFMT5djDmEDOZMJBJeNmV8EkZW2kiixBhFVkiN8yMFbokY4pXglcL4KDH+PhEhH6JP0YWWt08S6TIjhwdDLAS2letQWY/etybbzGJRE4aqvTI=","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=1777476497;\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 content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=nNb2DLS+dmFtBkviloiyIuQqc+NV75yUs0RJNKqTz9U=;\n b=HC3InfwRskWHKRwhTQL6TAxP/1kSqH0cQnnB4ZSWowYgZ4bqOyi7LZnoeAtOGQONx1OCRi\n e2btEM80HzGJV2NMc83plPFrNGVTUb1RycLbDpVQUwIpy/gNk1KX0f1hoqmKbdLmViTZi8\n U0JveZuQQ5xoz26NKLzOeLymn96/IPw=","X-MC-Unique":"cIwwrxx6OYqQotdtyvImug-1","X-Mimecast-MFC-AGG-ID":"cIwwrxx6OYqQotdtyvImug_1777476495","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777476495; x=1778081295;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=nNb2DLS+dmFtBkviloiyIuQqc+NV75yUs0RJNKqTz9U=;\n b=QY60C20S+qZQuyFW3MWmgoSQZSx+z0HXpc4wI68aAMgFjeYlqsjIShh+mFs8FSIjsB\n 10us1EuvFSt+sxqAdQlWlflpb6ZsCJiCxt5oPPhHQadrc0xHRcNv/nap5m/Yv+FbCUTT\n y9mA+Pijal7SbsFDuG+3cNd1uF8wT3wWBMPvBaEW8kZWWLpowu9U98FyX04PwPtd1uLL\n 3L2HCj4CwWXuzaqoJrXrW6Q8mA1AFG9GTq7p3CJKQN6G0sGZSD11BdgAE1UZ3k9trH9Y\n Spw++zf7EbX8iNCCkdTpNLLQBuKe/g1dPIksTxOCqChAkOQWN1i5nh0jdvam6s0Yjn0E\n qJbA==","X-Gm-Message-State":"AOJu0Yxtlm67ojQY0DeVZmNZOjU7PpfHhMDR7gYTcdcpMCs6wUEy0DKv\n LqnqS9h2bkCaooOy9Ud6jtlPsiflV4y1THVRGeC+g5F/hDJSj/jjaSMxeUXPgXGEpfrr4of30cT\n ZMD4TKC5IMutu7RR1zx8AIq7tKgiGhORk+k+90Torf80EvWBI4/zksVQkdTI=","X-Gm-Gg":"AeBDieuAUX5foGPLE430qkK6PJme4jqz7NXgah/b2thXIglHtg8K1cMlQ6dZFHnDadu\n oLQ9WBHLwb1cre7RX9NZRuOx002/4Ek4XAePqB4Lq3jUC5UBQhPhxAzGNRy9KiQkbfouI0hp4nC\n daMWXcSzs6dEv4ALpsaZKpqLBePbkc7oSPoHNTryW9X3IS4wpYJZjSLN736yt8yyLTjBQMlNLjX\n gqUevbhEPLBOmvT4n4BobtWYrlDUpHlmBOXfoHzMH6T7Z4vDtcQns/HBNaOIn8nvvN9ndrJdqMy\n wd3JXDnbSG5KTgfrkVo1jSnOCMw+0ZBxqAp1tB+f99f1PuMzQs4QnZP2D8YCJWu4RuPUX3wrOK0\n Y+JIHhz8fZQzCXF8Z/riyjVtXhpUdrnttZzjbqh+t40PoKRnGDbQmVAqyfmcD1AjYgzbs897Ga1\n c171o4Nyp+g88fnMsCDtp7KbaCYn9Uw/JPDqQV5hqzmA==","X-Received":["by 2002:ac8:5749:0:b0:509:238f:ad8f with SMTP id\n d75a77b69052e-5100e0f637fmr113893291cf.5.1777476495081;\n Wed, 29 Apr 2026 08:28:15 -0700 (PDT)","by 2002:ac8:5749:0:b0:509:238f:ad8f with SMTP id\n d75a77b69052e-5100e0f637fmr113892771cf.5.1777476494523;\n Wed, 29 Apr 2026 08:28:14 -0700 (PDT)"],"Message-ID":"<e6788033-df03-4502-ba5b-3636ecd5b098@redhat.com>","Date":"Wed, 29 Apr 2026 11:28:12 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++: Delete default ctor for unions with all const\n members","To":"Jakub Jelinek <jakub@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","References":"<afHSt5S_bry-KuXP@tucnak>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<afHSt5S_bry-KuXP@tucnak>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"cVJiQ4DRhAuRQEUDPiMx-c4QzGA9Y0DnJCw49GgbLyw_1777476495","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","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"}},{"id":3684136,"web_url":"http://patchwork.ozlabs.org/comment/3684136/","msgid":"<afIlEfl1-la1xCfN@tucnak>","list_archive_url":null,"date":"2026-04-29T15:34:41","subject":"Re: [PATCH] c++: Delete default ctor for unions with all const\n members","submitter":{"id":671,"url":"http://patchwork.ozlabs.org/api/people/671/","name":"Jakub Jelinek","email":"jakub@redhat.com"},"content":"On Wed, Apr 29, 2026 at 11:28:12AM -0400, Jason Merrill wrote:\n> On 4/29/26 5:43 AM, Jakub Jelinek wrote:\n> > Hi!\n> > \n> > I've started looking at P3074R7/P3726R2 papers.\n> > The former removes two bullets which describe when default ctor should be\n> > deleted:\n> > - X is a union and all of its variant members are of const-qualified type (or\n> >    possibly multi-dimensional array thereof),\n> > - X is a non-union class and all members of any anonymous union member are of\n> >    const-qualified type (or possibly multi-dimensional array thereof).\n> > These have been in [class.default.ctor] (or earlier in [class.ctor]) since\n> > C++11 till C++23, but we apparently ignore these and accept it, while\n> > clang++ deletes them.\n> \n> I'm inclined to treat dropping these bullets as a DR back to C++20, to go\n> along with the changes in P1330, P1331, and (particularly) CWG2424.\n\nSo shall I change the patch then to diagnose it for C++11, C++14 and C++17\nor throw it away?\n\n\tJakub","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=Ti+TIe9X;\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=Ti+TIe9X","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 4g5LwQ36bCz1xqf\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 01:35:16 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id E6B2B4BB58D7\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 15:35:14 +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 E86DF4BA79AA\n for <gcc-patches@gcc.gnu.org>; Wed, 29 Apr 2026 15:34: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-459-uj6XsloRNTuZPzgM4fp4HQ-1; Wed,\n 29 Apr 2026 11:34:46 -0400","from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 3DA351800581\n for <gcc-patches@gcc.gnu.org>; Wed, 29 Apr 2026 15:34:45 +0000 (UTC)","from tucnak.zalov.cz (unknown [10.44.34.21])\n by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id A7407180045E; Wed, 29 Apr 2026 15:34:44 +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 63TFYfgL406546\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Wed, 29 Apr 2026 17:34:42 +0200","(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 63TFYf20406545;\n Wed, 29 Apr 2026 17:34:41 +0200"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org E6B2B4BB58D7","OpenDKIM Filter v2.11.0 sourceware.org E86DF4BA79AA"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org E86DF4BA79AA","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org E86DF4BA79AA","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777476888; cv=none;\n b=AJe5JNY7XSmoU8vLG4frODTxzT4v2XBt2IlZAOPI1dIcHxwv2mG8GAiUYbs0R7ON8d9S8ByEz/ON2FcZbrU/OmS97mHig6Foe3JrOKymLeI0wrxJFdy+INl+m+Zq9ad3Ub2wldX9frFk4HjkIbCzcf2/fFlf12qEGkuSeBHrXnw=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777476888; c=relaxed/simple;\n bh=e1jbP/BheyRat4Kxfv2qf0KmLCwPNo4Hnk1UsMmoXS4=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=j8HP1OTjPfaXRb3dsMsIYAXSHKDmRbRlrYhZBr06wniVRtJCWnSz7W/o2vpfJS+pvT+mUYuTNc+e+sZjwMbGaMLCCEXYDLyYywGBBV60xVQtxbm9HVz5J/tIcKrfrmf0WyGsXQI3r/wMsiJXlctUO8djQkDDfh1nfdD0mWiaG+U=","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=1777476887;\n h=from:from:reply-to:reply-to:subject:subject:date:date:\n message-id:message-id:to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:in-reply-to:in-reply-to:  references:references;\n bh=MdMIx55Hb+Cli5mA2gzDOaAWxmvEW10L/371/ySQQKQ=;\n b=Ti+TIe9XhEcb61hlPJ01qM/4Uy1+YgfipMHUh6undHNtXx0f7ivmtl1/WkZ4vNrMYAK1vC\n AjmlqZ75NgNG3CJpt91QtST8sElXfcDbbRumNHqLeZo6mnpC2k0ULuWQiEMwplEyDTIHGV\n nHtDLmZI83Icx2v/p7YIf05ispaSQg8=","X-MC-Unique":"uj6XsloRNTuZPzgM4fp4HQ-1","X-Mimecast-MFC-AGG-ID":"uj6XsloRNTuZPzgM4fp4HQ_1777476885","Date":"Wed, 29 Apr 2026 17:34:41 +0200","From":"Jakub Jelinek <jakub@redhat.com>","To":"Jason Merrill <jason@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","Subject":"Re: [PATCH] c++: Delete default ctor for unions with all const\n members","Message-ID":"<afIlEfl1-la1xCfN@tucnak>","References":"<afHSt5S_bry-KuXP@tucnak>\n <e6788033-df03-4502-ba5b-3636ecd5b098@redhat.com>","MIME-Version":"1.0","In-Reply-To":"<e6788033-df03-4502-ba5b-3636ecd5b098@redhat.com>","X-Scanned-By":"MIMEDefang 3.4.1 on 10.30.177.111","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"cSJFcHSt8lHcwtcZW4o4iZMpsxCvvQL2j9SvPOgsbI0_1777476885","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"}},{"id":3684280,"web_url":"http://patchwork.ozlabs.org/comment/3684280/","msgid":"<604b805a-6f58-4532-99f2-c80dc219b300@redhat.com>","list_archive_url":null,"date":"2026-04-29T21:24:37","subject":"Re: [PATCH] c++: Delete default ctor for unions with all const\n members","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/29/26 11:34 AM, Jakub Jelinek wrote:\n> On Wed, Apr 29, 2026 at 11:28:12AM -0400, Jason Merrill wrote:\n>> On 4/29/26 5:43 AM, Jakub Jelinek wrote:\n>>> Hi!\n>>>\n>>> I've started looking at P3074R7/P3726R2 papers.\n>>> The former removes two bullets which describe when default ctor should be\n>>> deleted:\n>>> - X is a union and all of its variant members are of const-qualified type (or\n>>>     possibly multi-dimensional array thereof),\n>>> - X is a non-union class and all members of any anonymous union member are of\n>>>     const-qualified type (or possibly multi-dimensional array thereof).\n>>> These have been in [class.default.ctor] (or earlier in [class.ctor]) since\n>>> C++11 till C++23, but we apparently ignore these and accept it, while\n>>> clang++ deletes them.\n>>\n>> I'm inclined to treat dropping these bullets as a DR back to C++20, to go\n>> along with the changes in P1330, P1331, and (particularly) CWG2424.\n> \n> So shall I change the patch then to diagnose it for C++11, C++14 and C++17\n> or throw it away?\n\nI lean toward dropping it; the value of additional strictness only in \nversions before the default seems limited.\n\nJason","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=ecabaclr;\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=ecabaclr","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 4g5VhH263Gz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 07:25:19 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 26AA04BBCDA8\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 21:25:17 +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 E0CDA4BB5905\n for <gcc-patches@gcc.gnu.org>; Wed, 29 Apr 2026 21:24:48 +0000 (GMT)","from mail-qt1-f197.google.com (mail-qt1-f197.google.com\n [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-611-GKlq6XYGOGK6ylSBOUu6YQ-1; Wed, 29 Apr 2026 17:24:45 -0400","by mail-qt1-f197.google.com with SMTP id\n d75a77b69052e-50d890580e1so3610631cf.3\n for <gcc-patches@gcc.gnu.org>; Wed, 29 Apr 2026 14:24:45 -0700 (PDT)","from [192.168.50.130]\n (130-44-146-247.s12789.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com.\n [130.44.146.247]) by smtp.gmail.com with ESMTPSA id\n d75a77b69052e-5101aca01ddsm25833461cf.3.2026.04.29.14.24.37\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Wed, 29 Apr 2026 14:24:37 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 26AA04BBCDA8","OpenDKIM Filter v2.11.0 sourceware.org E0CDA4BB5905"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org E0CDA4BB5905","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org E0CDA4BB5905","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777497889; cv=none;\n b=ag2WK2oaa8c14eiAALi+uuxdE7s/10HdeciQPwNJCUZTQrCjYC5fXKAk6i71OeAd3IYuv+diOPrDB/U0xJFc3EfGRgPzHn0wEgkkPHOq1xLajco/9CvmFf6srY1Lp65HAajL1wF/H6ohMU8Due10XM+I1GGu0vSR5Iuj8iK0IyE=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777497889; c=relaxed/simple;\n bh=tnTM3aN6ewHpm+rEVYopIMxK/uQBwOuiL1kY8tjUaKM=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=HjwzDDOZvsDcjtvnHD9gLRONwYL0C+f1hQ8x4yFQBtfjnBhZBJbxGZqEln7wTRP6pUGJoGs17MRLbs9sM1Yt9xiSVRhOvbbjjqC2pxawKph4km4MVt7fqZHtHMf2GhM4oHV87qHMaGzquHGbpFqL7UgP/+AR5hmDl/zIwjqgVzU=","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=1777497887;\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 content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=X+YLJyGgn3u2woa04+kLwMqygoc91Wx5eawpGaR8ztk=;\n b=ecabaclrS8MNp7wgICL8GsGbUG/X5aVt3bU323Efy4G8OIBf1Szkvtw4hTLq0brmxsdO03\n 0Cb335P/WMx6FFAm27vrnBS9eHt4DdedTUuHeu5xbeOUXYzqgd+7kWi+XnYwBKs+iZhoaW\n reGpIGYGkJdJvTFAiycSvRtZKb3PMjw=","X-MC-Unique":"GKlq6XYGOGK6ylSBOUu6YQ-1","X-Mimecast-MFC-AGG-ID":"GKlq6XYGOGK6ylSBOUu6YQ_1777497883","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777497883; x=1778102683;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=X+YLJyGgn3u2woa04+kLwMqygoc91Wx5eawpGaR8ztk=;\n b=OURXatMDSw9GSJI6vdFPL0EXgnEa3JkD0TdQrajmtyCWetH0iN5/zCF+yGWazuZV4L\n TbqUAafKv8n6cEYcvAl+UtQzavi6t28ZuOtUqNEDe5u4Pnvvr1nl9pci8B2gRaI4n2Yf\n HiizopSG/WI4mJ7zr73PLa6FkB/By9k5arBgOIPbI/C47PJSPkJv62bXZG89IDnbhsJZ\n NIXfcck8rshNtRiM9/ZN4sxDscGRo8gi2aAmrGoZVoNhYevtJVVkPEdV+JyIbyyxxqRS\n 1zRjWm98Y4/0z4aBh/CzwEvDXI3Ydn8SVj148OhJx9eDddVDEr/9FIJD0frh0Gxm3pFH\n v3DQ==","X-Gm-Message-State":"AOJu0Yw9Xm7H3Jr6IwPkxlx9ceskJIzHSbM32NKB2BZAtw3g9tJxKn+T\n 1pd++UISPRlSDwd6hqFMlqIZzHj7qNN52HYpVHn3tjsgsKSUSf6rF6OZOe0f84sB9NrvAfvqws5\n 5qDotKtaD22AJRxzcNabSDvlKCqcdq2XcZGxx2oWOBiM+tQH7rwHhFh+E6F8=","X-Gm-Gg":"AeBDievYMB2Wl+jgq4e3EnJCzyL1B0lqxVQZqDs4JrHaiEelhHYiMOTfvEMCbTjFgoL\n FLLPqgs8YpnO97vmF1f37yjrYXK0LbnTL/U1qpTKJzZrsTpKHepMr0iy6XmA7DGAZDwJlcraWPN\n KNT9duonviia8Ra7Qg+kl0lS3Yq/oe8LEZD7jyAfNAw2rjIXnbRvxZuk3ow1gnL3KMA6rloqi4N\n Zfi9sCIrMX1+9K49U1mObISvWVPZi1RIKSoInea5YyYVYQ0m7E6Oy/ylFdyWW2nmvhCisVkiEd9\n C1vP75B1BFAjP5eNXqyJtrbqhdYkExQeStMAuN2EVJMmACtfZ4NZC2XazLwjQtDtWStfuvARxQj\n LBITq3CmTauKeJZYVteJrFrp8ltfGNc/XPiGHM/Jcrbliy0OIOoqDJH4Dr4Ih/kplVauojyQHiL\n axkdrZvdW+C/MzHZeAW5ldi3pnNLWH5ffDiWoftzhlTw==","X-Received":["by 2002:a05:622a:652:b0:50e:60b7:bb40 with SMTP id\n d75a77b69052e-5102a956dedmr3796621cf.0.1777497882820;\n Wed, 29 Apr 2026 14:24:42 -0700 (PDT)","by 2002:a05:622a:652:b0:50e:60b7:bb40 with SMTP id\n d75a77b69052e-5102a956dedmr3796301cf.0.1777497882241;\n Wed, 29 Apr 2026 14:24:42 -0700 (PDT)"],"Message-ID":"<604b805a-6f58-4532-99f2-c80dc219b300@redhat.com>","Date":"Wed, 29 Apr 2026 17:24:37 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++: Delete default ctor for unions with all const\n members","To":"Jakub Jelinek <jakub@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","References":"<afHSt5S_bry-KuXP@tucnak>\n <e6788033-df03-4502-ba5b-3636ecd5b098@redhat.com> <afIlEfl1-la1xCfN@tucnak>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<afIlEfl1-la1xCfN@tucnak>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"9_YsBoY2J2cel1JMlW86iYoX2TFNXnD2DGx_clmra6s_1777497883","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","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"}}]