public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-9121] libstdc++: Fix move construction of std::tuple with array elements [PR101960]
@ 2021-10-12 16:24 Jonathan Wakely
  0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2021-10-12 16:24 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:e748216c237cff2915390e9653de2db63b2161ac

commit r11-9121-ge748216c237cff2915390e9653de2db63b2161ac
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.
    
    (cherry picked from commit 7481021364e75ba583972e15ed421a53988368ea)

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 23fad918c57..dcf30bd9a8d 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);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-10-12 16:24 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-12 16:24 [gcc r11-9121] libstdc++: Fix move construction of std::tuple with array elements [PR101960] Jonathan Wakely

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).