diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 39d1d7077400451198bdb626699539c883623094..7c20083923a52f09a1896008e5eea4a477700a5c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,24 @@ +2009-12-14 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_list.h (splice(iterator, list&), splice(iterator, + list&, iterator), splice(iterator, list&, iterator, iterator), + merge(list&), merge(list&, _StrictWeakOrdering)): Re-add in C++0x + mode for backward compatibility (see DR 1133). + (insert(iterator, size_type, const value_type&), insert(iterator, + _InputIterator, _InputIterator)): Adjust. + * include/bits/list.tcc (sort): Likewise. + * testsuite/23_containers/list/modifiers/1_c++0x.cc: Add. + * testsuite/23_containers/list/operations/2_c++0x.cc: Likewise. + * testsuite/23_containers/list/operations/3_c++0x.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + assign_neg.cc: Adjust dg-error line numbers. + * testsuite/23_containers/list/requirements/dr438/ + insert_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_2_neg.cc: Likewise. + 2009-12-11 Paolo Carlini <paolo.carlini@oracle.com> Matthias Klose <doko@ubuntu.com> diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc index c461a41c80dd3358ee1413d3601ba904a00ba784..899b41815094c5daf473b0764bc55a0b10c39ab3 100644 --- a/libstdc++-v3/include/bits/list.tcc +++ b/libstdc++-v3/include/bits/list.tcc @@ -312,13 +312,13 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) do { - __carry.splice(__carry.begin(), _GLIBCXX_MOVE(*this), begin()); + __carry.splice(__carry.begin(), *this, begin()); for(__counter = &__tmp[0]; __counter != __fill && !__counter->empty(); ++__counter) { - __counter->merge(_GLIBCXX_MOVE(__carry)); + __counter->merge(__carry); __carry.swap(*__counter); } __carry.swap(*__counter); @@ -328,7 +328,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) while ( !empty() ); for (__counter = &__tmp[1]; __counter != __fill; ++__counter) - __counter->merge(_GLIBCXX_MOVE(*(__counter - 1))); + __counter->merge(*(__counter - 1)); swap( *(__fill - 1) ); } } @@ -389,13 +389,13 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) do { - __carry.splice(__carry.begin(), _GLIBCXX_MOVE(*this), begin()); + __carry.splice(__carry.begin(), *this, begin()); for(__counter = &__tmp[0]; __counter != __fill && !__counter->empty(); ++__counter) { - __counter->merge(_GLIBCXX_MOVE(__carry), __comp); + __counter->merge(__carry, __comp); __carry.swap(*__counter); } __carry.swap(*__counter); @@ -405,7 +405,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) while ( !empty() ); for (__counter = &__tmp[1]; __counter != __fill; ++__counter) - __counter->merge(_GLIBCXX_MOVE(*(__counter - 1)), __comp); + __counter->merge(*(__counter - 1), __comp); swap(*(__fill - 1)); } } diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index 2a6e58f798f7d221ad51cc1692c54d66a2197ddc..51f8a8f931dfeeb506c862c4b15bb085f47cb341 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -1027,11 +1027,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) insert(iterator __position, size_type __n, const value_type& __x) { list __tmp(__n, __x, _M_get_Node_allocator()); -#ifdef __GXX_EXPERIMENTAL_CXX0X__ - splice(__position, std::move(__tmp)); -#else - splice(__position, __tmp); -#endif + splice(__position, __tmp); } /** @@ -1053,11 +1049,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) _InputIterator __last) { list __tmp(__first, __last, _M_get_Node_allocator()); -#ifdef __GXX_EXPERIMENTAL_CXX0X__ - splice(__position, std::move(__tmp)); -#else splice(__position, __tmp); -#endif } /** @@ -1164,6 +1156,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) } } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + splice(iterator __position, list& __x) + { splice(__position, std::move(__x)); } +#endif + /** * @brief Insert element from another %list. * @param position Iterator referencing the element to insert before. @@ -1191,6 +1189,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) this->_M_transfer(__position, __i, __j); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + splice(iterator __position, list& __x, iterator __i) + { splice(__position, std::move(__x), __i); } +#endif + /** * @brief Insert range from another %list. * @param position Iterator referencing the element to insert before. @@ -1221,6 +1225,12 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) } } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + void + splice(iterator __position, list& __x, iterator __first, iterator __last) + { splice(__position, std::move(__x), __first, __last); } +#endif + /** * @brief Remove all elements equal to value. * @param value The value to remove. @@ -1288,10 +1298,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * sorted order, leaving @a x empty when complete. Elements in * this list precede elements in @a x that are equal. */ - void #ifdef __GXX_EXPERIMENTAL_CXX0X__ + void merge(list&& __x); + + void + merge(list& __x) + { merge(std::move(__x)); } #else + void merge(list& __x); #endif @@ -1307,11 +1322,18 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) * in this list precede elements in @a x that are equivalent * according to StrictWeakOrdering(). */ +#ifdef __GXX_EXPERIMENTAL_CXX0X__ template<typename _StrictWeakOrdering> void -#ifdef __GXX_EXPERIMENTAL_CXX0X__ merge(list&&, _StrictWeakOrdering); + + template<typename _StrictWeakOrdering> + void + merge(list& __x, _StrictWeakOrdering __comp) + { merge(std::move(__x), __comp); } #else + template<typename _StrictWeakOrdering> + void merge(list&, _StrictWeakOrdering); #endif diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc new file mode 100644 index 0000000000000000000000000000000000000000..c055f70bc741d7a9b427074a31a5715d44df25c3 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc @@ -0,0 +1,27 @@ +// { 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 +// <http://www.gnu.org/licenses/>. + +#include "1.h" +#include <list> + +int main() +{ + modifiers1<std::list<__gnu_test::copy_tracker> >(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc new file mode 100644 index 0000000000000000000000000000000000000000..faaf2f765b1e017ace0251a977c0afd63d2b0eb3 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc @@ -0,0 +1,27 @@ +// { 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 +// <http://www.gnu.org/licenses/>. + +#include "2.h" +#include <list> + +int main() +{ + operations02<std::list<int> >(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc new file mode 100644 index 0000000000000000000000000000000000000000..0598cfb225bd85ea69dff472f9b64676acd84464 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc @@ -0,0 +1,27 @@ +// { 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 +// <http://www.gnu.org/licenses/>. + +#include "3.h" +#include <list> + +int main() +{ + operations03<std::list<int> >(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc index c0b6ea46be9adec0b34f5c7d1c32ce52490c7bd1..a9ef74472bf2e058ca262f1e280ad2f849fdfd2e 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1387 } +// { dg-error "no matching" "" { target *-*-* } 1409 } // { dg-excess-errors "" } #include <list> diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc index 0d27211a5f7c72c25329981e28de86e50405302e..a3e29627f8dc3b16a278951141560c486bc4d88b 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1356 } +// { dg-error "no matching" "" { target *-*-* } 1378 } // { dg-excess-errors "" } #include <list> diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc index bbf780803657b7aeac6ff725836f095556919651..f90ed940727db5b1c75d4986a82e5a4802ddbaf7 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1356 } +// { dg-error "no matching" "" { target *-*-* } 1378 } // { dg-excess-errors "" } #include <list> diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc index 1e84b97d3017b36eb330295883b2cd9084466b7d..24bcee0c7fd324fff1001a90d37605dd4b4a9f62 100644 --- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1356 } +// { dg-error "no matching" "" { target *-*-* } 1378 } // { dg-excess-errors "" } #include <list>