re PR libstdc++/41530 ([c++0x] Cannot move-construct std::tuple from a different type of std::tuple)

2009-10-05  John Bytheway  <jbytheway@gmail.com>

	PR libstdc++/41530
	* include/std/tuple (_Tuple_impl<>::_Tuple_impl(_Tuple_impl<>&&)):
	Fix to just move.
	* testsuite/20_util/tuple/cons/41530.cc: New.

From-SVN: r152461
This commit is contained in:
John Bytheway 2009-10-05 17:56:02 +00:00 committed by Paolo Carlini
parent 8c32d1e009
commit cadd2a9cb3
3 changed files with 42 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2009-10-05 John Bytheway <jbytheway@gmail.com>
PR libstdc++/41530
* include/std/tuple (_Tuple_impl<>::_Tuple_impl(_Tuple_impl<>&&)):
Fix to just move.
* testsuite/20_util/tuple/cons/41530.cc: New.
2009-10-05 Phil Muldoon <pmuldoon@redhat.com>
* doc/xml/manual/debug.xml: Add narrative for GDB Python pretty

View File

@ -174,8 +174,7 @@ namespace std
template<typename... _UElements>
_Tuple_impl(_Tuple_impl<_Idx, _UElements...>&& __in)
: _Inherited(std::move(__in._M_tail())),
_Base(std::forward<typename _Tuple_impl<_Idx, _UElements...>::
_Base>(__in._M_head())) { }
_Base(std::move(__in._M_head())) { }
_Tuple_impl&
operator=(const _Tuple_impl& __in)

View File

@ -0,0 +1,34 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
// Copyright (C) 2009 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// Tuple
#include <tuple>
class A {};
class B : public A {};
// PR libstdc++/41530
void test01()
{
std::tuple<B*> b;
std::tuple<A*> a1(b);
std::tuple<A*> a2(std::move(b));
}