Commit 4c650853 by Jason Merrill Committed by Jason Merrill

forward_list.h (splice_after): Use forward.

	* include/bits/forward_list.h (splice_after): Use forward.
	(merge): Likewise.
	* include/bits/stl_iterator.h (move_iterator::operator*): Use move.
	(move_iterator::operator[]): Use move.
	* include/bits/stl_list.h (insert): Use move.
	* include/std/thread (_Callable constructor): Use forward.
	* include/std/tuple: Don't specify explicit template args to move.

From-SVN: r150326
parent 9771799c
2009-07-31 Jason Merrill <jason@redhat.com>
* include/bits/forward_list.h (splice_after): Use forward.
(merge): Likewise.
* include/bits/stl_iterator.h (move_iterator::operator*): Use move.
(move_iterator::operator[]): Use move.
* include/bits/stl_list.h (insert): Use move.
* include/std/thread (_Callable constructor): Use forward.
* include/std/tuple: Don't specify explicit template args to move.
* testsuite/20_util/forward/requirements/explicit_instantiation.cc:
Adjust signature.
* testsuite/20_util/tuple/swap.cc: Swap takes lvalue reference.
* testsuite/30_threads/shared_future/cons/copy.cc: Return rvalue
reference.
* testsuite/20_util/shared_ptr/assign/auto_ptr.cc,
testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc,
testsuite/20_util/shared_ptr/cons/auto_ptr.cc,
testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc,
testsuite/23_containers/forward_list/ext_pointer/operations/1.cc,
testsuite/23_containers/forward_list/ext_pointer/operations/5.cc,
testsuite/23_containers/forward_list/operations/1.cc,
testsuite/23_containers/forward_list/operations/5.cc: Use move.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc,
testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc,
testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc,
testsuite/23_containers/list/requirements/dr438/insert_neg.cc,
testsuite/30_threads/thread/cons/assign_neg.cc: Adjust line numbers.
2009-07-31 Paolo Carlini <paolo.carlini@oracle.com> 2009-07-31 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/40912 (partial) PR libstdc++/40912 (partial)
......
...@@ -1057,7 +1057,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -1057,7 +1057,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void void
splice_after(const_iterator __pos, forward_list&& __list, splice_after(const_iterator __pos, forward_list&& __list,
const_iterator __it) const_iterator __it)
{ this->splice_after(__pos, __list, __it, __it._M_next()); } {
this->splice_after(__pos, std::forward<forward_list>(__list),
__it, __it._M_next());
}
/** /**
* @brief Insert range from another %forward_list. * @brief Insert range from another %forward_list.
...@@ -1146,7 +1149,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -1146,7 +1149,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*/ */
void void
merge(forward_list&& __list) merge(forward_list&& __list)
{ this->merge(__list, std::less<_Tp>()); } { this->merge(std::forward<forward_list>(__list), std::less<_Tp>()); }
/** /**
* @brief Merge sorted lists according to comparison function. * @brief Merge sorted lists according to comparison function.
......
...@@ -913,7 +913,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -913,7 +913,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
reference reference
operator*() const operator*() const
{ return *_M_current; } { return std::move(*_M_current); }
pointer pointer
operator->() const operator->() const
...@@ -973,7 +973,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -973,7 +973,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
reference reference
operator[](difference_type __n) const operator[](difference_type __n) const
{ return _M_current[__n]; } { return std::move(_M_current[__n]); }
}; };
template<typename _IteratorL, typename _IteratorR> template<typename _IteratorL, typename _IteratorR>
......
...@@ -1027,7 +1027,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) ...@@ -1027,7 +1027,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
insert(iterator __position, size_type __n, const value_type& __x) insert(iterator __position, size_type __n, const value_type& __x)
{ {
list __tmp(__n, __x, _M_get_Node_allocator()); list __tmp(__n, __x, _M_get_Node_allocator());
splice(__position, __tmp); #ifdef __GXX_EXPERIMENTAL_CXX0X__
splice(__position, std::move(__tmp));
#else
splice(__position, __tmp);
#endif
} }
/** /**
...@@ -1049,7 +1053,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) ...@@ -1049,7 +1053,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
_InputIterator __last) _InputIterator __last)
{ {
list __tmp(__first, __last, _M_get_Node_allocator()); list __tmp(__first, __last, _M_get_Node_allocator());
#ifdef __GXX_EXPERIMENTAL_CXX0X__
splice(__position, std::move(__tmp));
#else
splice(__position, __tmp); splice(__position, __tmp);
#endif
} }
/** /**
......
...@@ -126,7 +126,10 @@ namespace std ...@@ -126,7 +126,10 @@ namespace std
template<typename _Callable> template<typename _Callable>
explicit thread(_Callable __f) explicit thread(_Callable __f)
{ _M_start_thread(_M_make_routine<_Callable>(__f)); } {
_M_start_thread(_M_make_routine<_Callable>
(std::forward<_Callable>(__f)));
}
template<typename _Callable, typename... _Args> template<typename _Callable, typename... _Args>
thread(_Callable&& __f, _Args&&... __args) thread(_Callable&& __f, _Args&&... __args)
......
...@@ -164,7 +164,7 @@ namespace std ...@@ -164,7 +164,7 @@ namespace std
: _Inherited(__in._M_tail()), _Base(__in._M_head()) { } : _Inherited(__in._M_tail()), _Base(__in._M_head()) { }
_Tuple_impl(_Tuple_impl&& __in) _Tuple_impl(_Tuple_impl&& __in)
: _Inherited(std::move<_Inherited&&>(__in._M_tail())), : _Inherited(std::move(__in._M_tail())),
_Base(std::forward<_Head>(__in._M_head())) { } _Base(std::forward<_Head>(__in._M_head())) { }
template<typename... _UElements> template<typename... _UElements>
...@@ -173,8 +173,7 @@ namespace std ...@@ -173,8 +173,7 @@ namespace std
template<typename... _UElements> template<typename... _UElements>
_Tuple_impl(_Tuple_impl<_Idx, _UElements...>&& __in) _Tuple_impl(_Tuple_impl<_Idx, _UElements...>&& __in)
: _Inherited(std::move<typename _Tuple_impl<_Idx, _UElements...>:: : _Inherited(std::move(__in._M_tail())),
_Inherited&&>(__in._M_tail())),
_Base(std::forward<typename _Tuple_impl<_Idx, _UElements...>:: _Base(std::forward<typename _Tuple_impl<_Idx, _UElements...>::
_Base>(__in._M_head())) { } _Base>(__in._M_head())) { }
...@@ -244,7 +243,7 @@ namespace std ...@@ -244,7 +243,7 @@ namespace std
: _Inherited(static_cast<const _Inherited&>(__in)) { } : _Inherited(static_cast<const _Inherited&>(__in)) { }
tuple(tuple&& __in) tuple(tuple&& __in)
: _Inherited(std::move<_Inherited>(__in)) { } : _Inherited(static_cast<_Inherited&&>(__in)) { }
template<typename... _UElements> template<typename... _UElements>
tuple(const tuple<_UElements...>& __in) tuple(const tuple<_UElements...>& __in)
...@@ -253,7 +252,7 @@ namespace std ...@@ -253,7 +252,7 @@ namespace std
template<typename... _UElements> template<typename... _UElements>
tuple(tuple<_UElements...>&& __in) tuple(tuple<_UElements...>&& __in)
: _Inherited(std::move<_Tuple_impl<0, _UElements...> >(__in)) { } : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
// XXX http://gcc.gnu.org/ml/libstdc++/2008-02/msg00047.html // XXX http://gcc.gnu.org/ml/libstdc++/2008-02/msg00047.html
template<typename... _UElements> template<typename... _UElements>
...@@ -327,7 +326,7 @@ namespace std ...@@ -327,7 +326,7 @@ namespace std
: _Inherited(static_cast<const _Inherited&>(__in)) { } : _Inherited(static_cast<const _Inherited&>(__in)) { }
tuple(tuple&& __in) tuple(tuple&& __in)
: _Inherited(std::move<_Inherited>(__in)) { } : _Inherited(static_cast<_Inherited&&>(__in)) { }
template<typename _U1, typename _U2> template<typename _U1, typename _U2>
tuple(const tuple<_U1, _U2>& __in) tuple(const tuple<_U1, _U2>& __in)
...@@ -335,7 +334,7 @@ namespace std ...@@ -335,7 +334,7 @@ namespace std
template<typename _U1, typename _U2> template<typename _U1, typename _U2>
tuple(tuple<_U1, _U2>&& __in) tuple(tuple<_U1, _U2>&& __in)
: _Inherited(std::move<_Tuple_impl<0, _U1, _U2> >(__in)) { } : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
template<typename _U1, typename _U2> template<typename _U1, typename _U2>
tuple(const pair<_U1, _U2>& __in) tuple(const pair<_U1, _U2>& __in)
......
...@@ -28,5 +28,5 @@ ...@@ -28,5 +28,5 @@
namespace std namespace std
{ {
typedef short test_type; typedef short test_type;
template test_type&& forward(std::identity<test_type>::type&&); template test_type&& forward<test_type>(test_type&&);
} }
...@@ -66,7 +66,7 @@ test01() ...@@ -66,7 +66,7 @@ test01()
std::shared_ptr<A> a(new A); std::shared_ptr<A> a(new A);
std::auto_ptr<B> b(new B); std::auto_ptr<B> b(new B);
a = b; a = std::move(b);
VERIFY( a.get() != 0 ); VERIFY( a.get() != 0 );
VERIFY( b.get() == 0 ); VERIFY( b.get() == 0 );
VERIFY( A::ctor_count == 2 ); VERIFY( A::ctor_count == 2 );
......
...@@ -36,7 +36,7 @@ test01() ...@@ -36,7 +36,7 @@ test01()
std::shared_ptr<A> a; std::shared_ptr<A> a;
std::auto_ptr<B> b; std::auto_ptr<B> b;
a = b; // { dg-error "here" } a = std::move(b); // { dg-error "here" }
return 0; return 0;
} }
......
...@@ -33,7 +33,7 @@ test01() ...@@ -33,7 +33,7 @@ test01()
bool test __attribute__((unused)) = true; bool test __attribute__((unused)) = true;
std::auto_ptr<A> a(new A); std::auto_ptr<A> a(new A);
std::shared_ptr<A> a2(a); std::shared_ptr<A> a2(std::move(a));
VERIFY( a.get() == 0 ); VERIFY( a.get() == 0 );
VERIFY( a2.get() != 0 ); VERIFY( a2.get() != 0 );
VERIFY( a2.use_count() == 1 ); VERIFY( a2.use_count() == 1 );
......
...@@ -34,7 +34,7 @@ test01() ...@@ -34,7 +34,7 @@ test01()
bool test __attribute__((unused)) = true; bool test __attribute__((unused)) = true;
const std::auto_ptr<A> a; const std::auto_ptr<A> a;
std::shared_ptr<A> p(a); // { dg-error "no match" } std::shared_ptr<A> p(std::move(a)); // { dg-error "no match" }
return 0; return 0;
} }
......
...@@ -41,7 +41,7 @@ struct MoveOnly ...@@ -41,7 +41,7 @@ struct MoveOnly
bool operator==(MoveOnly const& m) bool operator==(MoveOnly const& m)
{ return i == m.i; } { return i == m.i; }
void swap(MoveOnly&& m) void swap(MoveOnly& m)
{ std::swap(m.i, i); } { std::swap(m.i, i); }
int i; int i;
......
...@@ -39,7 +39,7 @@ test01() ...@@ -39,7 +39,7 @@ test01()
fwd_list_type x = {666.0, 777.0, 888.0}; fwd_list_type x = {666.0, 777.0, 888.0};
a.splice_after(posa, x); a.splice_after(posa, std::move(x));
++posa; ++posa;
VERIFY(*posa == 666.0); VERIFY(*posa == 666.0);
...@@ -70,7 +70,7 @@ test02() ...@@ -70,7 +70,7 @@ test02()
++endy; ++endy;
VERIFY(*endy == 14.0); VERIFY(*endy == 14.0);
a.splice_after(posa, y, befy, endy); a.splice_after(posa, std::move(y), befy, endy);
VERIFY(*posa == 0.0); VERIFY(*posa == 0.0);
VERIFY(*befy == 10.0); VERIFY(*befy == 10.0);
...@@ -95,7 +95,7 @@ test03() ...@@ -95,7 +95,7 @@ test03()
fwd_list_type::const_iterator posz = z.begin(); fwd_list_type::const_iterator posz = z.begin();
VERIFY(*posz == 42.0); VERIFY(*posz == 42.0);
a.splice_after(posa, z, posz); a.splice_after(posa, std::move(z), posz);
VERIFY(*posa == 1.0); VERIFY(*posa == 1.0);
++posa; ++posa;
VERIFY(*posa == 43.0); VERIFY(*posa == 43.0);
......
...@@ -37,7 +37,7 @@ test01() ...@@ -37,7 +37,7 @@ test01()
fwd_list_type a = {0.0, 1.0, 2.0, 3.0, 4.0}; fwd_list_type a = {0.0, 1.0, 2.0, 3.0, 4.0};
fwd_list_type b = {1.0, 2.0, 3.0, 4.0, 4.0, 5.0}; fwd_list_type b = {1.0, 2.0, 3.0, 4.0, 4.0, 5.0};
a.merge(b); a.merge(std::move(b));
fwd_list_type r = {0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 4.0, 5.0}; fwd_list_type r = {0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 4.0, 5.0};
......
...@@ -34,7 +34,7 @@ test01() ...@@ -34,7 +34,7 @@ test01()
std::forward_list<double> x = {666.0, 777.0, 888.0}; std::forward_list<double> x = {666.0, 777.0, 888.0};
a.splice_after(posa, x); a.splice_after(posa, std::move(x));
++posa; ++posa;
VERIFY(*posa == 666.0); VERIFY(*posa == 666.0);
...@@ -63,7 +63,7 @@ test02() ...@@ -63,7 +63,7 @@ test02()
++endy; ++endy;
VERIFY(*endy == 14.0); VERIFY(*endy == 14.0);
a.splice_after(posa, y, befy, endy); a.splice_after(posa, std::move(y), befy, endy);
VERIFY(*posa == 0.0); VERIFY(*posa == 0.0);
VERIFY(*befy == 10.0); VERIFY(*befy == 10.0);
...@@ -86,7 +86,7 @@ test03() ...@@ -86,7 +86,7 @@ test03()
std::forward_list<double>::const_iterator posz = z.begin(); std::forward_list<double>::const_iterator posz = z.begin();
VERIFY(*posz == 42.0); VERIFY(*posz == 42.0);
a.splice_after(posa, z, posz); a.splice_after(posa, std::move(z), posz);
VERIFY(*posa == 1.0); VERIFY(*posa == 1.0);
++posa; ++posa;
VERIFY(*posa == 43.0); VERIFY(*posa == 43.0);
......
...@@ -32,7 +32,7 @@ test01() ...@@ -32,7 +32,7 @@ test01()
std::forward_list<double> a = {0.0, 1.0, 2.0, 3.0, 4.0}; std::forward_list<double> a = {0.0, 1.0, 2.0, 3.0, 4.0};
std::forward_list<double> b = {1.0, 2.0, 3.0, 4.0, 4.0, 5.0}; std::forward_list<double> b = {1.0, 2.0, 3.0, 4.0, 4.0, 5.0};
a.merge(b); a.merge(std::move(b));
std::forward_list<double> r = {0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, std::forward_list<double> r = {0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0,
4.0, 4.0, 4.0, 5.0}; 4.0, 4.0, 4.0, 5.0};
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-do compile } // { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1379 } // { dg-error "no matching" "" { target *-*-* } 1387 }
// { dg-excess-errors "" } // { dg-excess-errors "" }
#include <list> #include <list>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-do compile } // { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1348 } // { dg-error "no matching" "" { target *-*-* } 1356 }
// { dg-excess-errors "" } // { dg-excess-errors "" }
#include <list> #include <list>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-do compile } // { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1348 } // { dg-error "no matching" "" { target *-*-* } 1356 }
// { dg-excess-errors "" } // { dg-excess-errors "" }
#include <list> #include <list>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-do compile } // { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1348 } // { dg-error "no matching" "" { target *-*-* } 1356 }
// { dg-excess-errors "" } // { dg-excess-errors "" }
#include <list> #include <list>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <future> #include <future>
#include <testsuite_hooks.h> #include <testsuite_hooks.h>
extern std::unique_future<int>& get(); extern std::unique_future<int>&& get();
void test01() void test01()
{ {
......
...@@ -32,4 +32,4 @@ void test01() ...@@ -32,4 +32,4 @@ void test01()
} }
// { dg-error "used here" "" { target *-*-* } 31 } // { dg-error "used here" "" { target *-*-* } 31 }
// { dg-error "deleted function" "" { target *-*-* } 141 } // { dg-error "deleted function" "" { target *-*-* } 144 }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment