Index: include/bits/list.tcc =================================================================== --- include/bits/list.tcc (revision 155172) +++ include/bits/list.tcc (working copy) @@ -312,13 +312,13 @@ do { - __carry.splice(__carry.begin(), *this, begin()); + __carry.splice(__carry.begin(), _GLIBCXX_MOVE(*this), begin()); for(__counter = &__tmp[0]; __counter != __fill && !__counter->empty(); ++__counter) { - __counter->merge(__carry); + __counter->merge(_GLIBCXX_MOVE(__carry)); __carry.swap(*__counter); } __carry.swap(*__counter); @@ -328,7 +328,7 @@ while ( !empty() ); for (__counter = &__tmp[1]; __counter != __fill; ++__counter) - __counter->merge(*(__counter - 1)); + __counter->merge(_GLIBCXX_MOVE(*(__counter - 1))); swap( *(__fill - 1) ); } } @@ -389,13 +389,13 @@ do { - __carry.splice(__carry.begin(), *this, begin()); + __carry.splice(__carry.begin(), _GLIBCXX_MOVE(*this), begin()); for(__counter = &__tmp[0]; __counter != __fill && !__counter->empty(); ++__counter) { - __counter->merge(__carry, __comp); + __counter->merge(_GLIBCXX_MOVE(__carry), __comp); __carry.swap(*__counter); } __carry.swap(*__counter); @@ -405,7 +405,7 @@ while ( !empty() ); for (__counter = &__tmp[1]; __counter != __fill; ++__counter) - __counter->merge(*(__counter - 1), __comp); + __counter->merge(_GLIBCXX_MOVE(*(__counter - 1)), __comp); swap(*(__fill - 1)); } } Index: testsuite/23_containers/list/operations/42352.cc =================================================================== --- testsuite/23_containers/list/operations/42352.cc (revision 0) +++ testsuite/23_containers/list/operations/42352.cc (revision 0) @@ -0,0 +1,66 @@ +// { dg-options "-std=gnu++0x" } + +// 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 Pred 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 +// . + +#include +#include + +// PR libstdc++/42352 +void test01() +{ + bool test __attribute__((unused)) = true; + + std::list l{3, 2, 4, 1, 5, 9, 0, 8, 6, 7}; + + l.sort(); + + for (auto it = l.begin(); it != l.end(); ++it) + { + static int nn = 0; + VERIFY( *it == nn++ ); + } +} + +void test02() +{ + bool test __attribute__((unused)) = true; + + std::list l{3, 2, 4, 1, 5, 9, 0, 8, 6, 7}; + + struct compare + { + bool + operator()(int const& one, int const& two) const + { return one > two; } + }; + + l.sort(compare()); + + for (auto it = l.begin(); it != l.end(); ++it) + { + static int nn = 9; + VERIFY( *it == nn-- ); + } +} + +int main() +{ + test01(); + test02(); + return 0; +}