public inbox for libstdc++-cvs@sourceware.org help / color / mirror / Atom feed
From: Jonathan Wakely <redi@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r12-4356] libstdc++: Fix move construction of std::tuple with array elements [PR101960] Date: Tue, 12 Oct 2021 15:49:54 +0000 (GMT) [thread overview] Message-ID: <20211012154954.D972A3857421@sourceware.org> (raw) https://gcc.gnu.org/g:7481021364e75ba583972e15ed421a53988368ea commit r12-4356-g7481021364e75ba583972e15ed421a53988368ea Author: Jonathan Wakely <jwakely@redhat.com> Date: Tue Oct 12 15:09:50 2021 +0100 libstdc++: Fix move construction of std::tuple with array elements [PR101960] The r12-3022 commit only fixed the case where an array is the last element of the tuple. This fixes the other cases too. We can just define the move constructor as defaulted, which does the right thing. Changing the move constructor to be trivial would be an ABI break, but since the last base class still has a non-trivial move constructor, defining the derived ones as defaulted doesn't change anything. libstdc++-v3/ChangeLog: PR libstdc++/101960 * include/std/tuple (_Tuple_impl(_Tuple_impl&&)): Define as defauled. * testsuite/20_util/tuple/cons/101960.cc: Check tuples with array elements before the last element. Diff: --- libstdc++-v3/include/std/tuple | 8 +------- libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc | 11 ++++++++++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 94a4f0afd31..aaee0b8826a 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -298,13 +298,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // 2729. Missing SFINAE on std::pair::operator= _Tuple_impl& operator=(const _Tuple_impl&) = delete; - constexpr - _Tuple_impl(_Tuple_impl&& __in) - noexcept(__and_<is_nothrow_move_constructible<_Head>, - is_nothrow_move_constructible<_Inherited>>::value) - : _Inherited(std::move(_M_tail(__in))), - _Base(std::forward<_Head>(_M_head(__in))) - { } + _Tuple_impl(_Tuple_impl&&) = default; template<typename... _UElements> constexpr diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc index f14604cdc69..42d17b182ed 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc @@ -1,4 +1,13 @@ // { dg-do compile { target c++11 } } #include <tuple> + +// PR libstdc++/101960 + std::tuple<int[1]> t; -auto tt = std::move(t); // PR libstdc++/101960 +auto tt = std::move(t); + +std::tuple<int[1], int> t2; +auto tt2 = std::move(t2); + +std::tuple<int[1], int[2], int[3]> t3; +auto tt3 = std::move(t3);
reply other threads:[~2021-10-12 15:49 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20211012154954.D972A3857421@sourceware.org \ --to=redi@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ --cc=libstdc++-cvs@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).