public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "gcc at ebasoft dot com.pl" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/102286] [constexpr] construct_at incorrectly starts union array lifetime in some cases Date: Fri, 18 Feb 2022 13:43:57 +0000 [thread overview] Message-ID: <bug-102286-4-cMmQ49ejKM@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-102286-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102286 Artur Bać <gcc at ebasoft dot com.pl> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |gcc at ebasoft dot com.pl --- Comment #4 from Artur Bać <gcc at ebasoft dot com.pl> --- This is not legal in c++20 but gcc allows accessing not active member of a union in constexpr https://godbolt.org/z/KsEhffeEa clang refuses and it is right "construction of subobject of member 'object' of union with active member 'init' is not allowed in a constant expression" With c++20 there is no way to have aligned_storage for not trivial type in constexpr (storage without initialization, not std::array that requires construction of non trivial objects upon member activation) https://godbolt.org/z/9EGrf8fbr #include <memory> struct foo { int * i; constexpr foo() { i = new int; } constexpr ~foo() { delete(i); } }; union storage { constexpr storage() : init{} {} constexpr ~storage() {} foo object[1]; char init = '\0'; }; consteval bool test() { storage u; auto p = std::addressof(u.object[0]); std::construct_at<foo>(p); std::destroy_at(p); return true; } int main() { static_assert( test() ); return test(); }
next prev parent reply other threads:[~2022-02-18 13:43 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-10 23:24 [Bug c++/102286] New: " ldalessandro at gmail dot com 2021-09-11 0:16 ` [Bug c++/102286] " ldalessandro at gmail dot com 2021-09-11 2:49 ` ldalessandro at gmail dot com 2021-11-17 12:06 ` redi at gcc dot gnu.org 2021-11-17 12:09 ` redi at gcc dot gnu.org 2022-02-18 13:43 ` gcc at ebasoft dot com.pl [this message] 2023-10-20 3:26 ` cvs-commit at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-102286-4-cMmQ49ejKM@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).