summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libstdc++-v3/ChangeLog21
-rw-r--r--libstdc++-v3/include/bits/list.tcc12
-rw-r--r--libstdc++-v3/include/bits/stl_list.h44
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc2
10 files changed, 145 insertions, 21 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 39d1d707740..7c20083923a 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 c461a41c80d..899b4181509 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 2a6e58f798f..51f8a8f931d 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 00000000000..c055f70bc74
--- /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 00000000000..faaf2f765b1
--- /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 00000000000..0598cfb225b
--- /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 c0b6ea46be9..a9ef74472bf 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 0d27211a5f7..a3e29627f8d 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 bbf78080365..f90ed940727 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 1e84b97d301..24bcee0c7fd 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>