aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-04-26 20:25:30 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2017-04-26 20:25:30 +0100
commit9425300b415916c5474204fa1157c94612d9f8ac (patch)
treee059c296b4ab7ccdaa36a3451e54b4355112adfd
parenta480422d0ad67c0ced6b1a3a21c228277381b053 (diff)
downloadgcc-9425300b415916c5474204fa1157c94612d9f8ac.zip
gcc-9425300b415916c5474204fa1157c94612d9f8ac.tar.gz
gcc-9425300b415916c5474204fa1157c94612d9f8ac.tar.bz2
Improve tests for vector and deque move-assignment
* testsuite/23_containers/deque/allocator/move_assign-2.cc: Improve comment. Ensure first test works because allocator type propagates and not because is_always_equal is true. * testsuite/23_containers/vector/52591.cc: Likewise. Restore original testcase that instantiates the move-assignment operator. From-SVN: r247284
-rw-r--r--libstdc++-v3/ChangeLog8
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc7
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/52591.cc17
3 files changed, 24 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index f2b533b..b7d1727 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,11 @@
+2017-04-26 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/23_containers/deque/allocator/move_assign-2.cc: Improve
+ comment. Ensure first test works because allocator type propagates and
+ not because is_always_equal is true.
+ * testsuite/23_containers/vector/52591.cc: Likewise. Restore original
+ testcase that instantiates the move-assignment operator.
+
2017-04-24 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/80506
diff --git a/libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc b/libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc
index c86c2c9..65c98f0 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc
@@ -25,9 +25,9 @@
#include <type_traits>
-// As an extension we allow move-assignment of std::deque when the element
-// type is not MoveAssignable, as long as the allocator type propagates or
-// is known to always compare equal.
+// Move-assignment of std::deque<T> is allowed for non-MoveAssignable T when
+// the allocator type propagates. As an extension we also allow it if the
+// allocator type is known to always compare equal.
struct C
{
@@ -43,6 +43,7 @@ struct A1 : std::allocator<T>
template<typename U> A1(const A1<U>&) { }
using propagate_on_container_move_assignment = std::true_type;
+ using is_always_equal = std::false_type;
};
void test01()
diff --git a/libstdc++-v3/testsuite/23_containers/vector/52591.cc b/libstdc++-v3/testsuite/23_containers/vector/52591.cc
index 3c0d39e..20938fa 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/52591.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/52591.cc
@@ -23,15 +23,21 @@
#include <memory>
#include <type_traits>
-// As an extension we allow move-assignment of std::vector when the element
-// type is not MoveAssignable, as long as the allocator type propagates or
-// is known to always compare equal.
+// Move-assignment of std::vector<T> is allowed for non-MoveAssignable T when
+// the allocator type propagates. As an extension we also allow it if the
+// allocator type is known to always compare equal.
struct C
{
C& operator=(C&&) = delete;
};
+void test01()
+{
+ std::vector<C> a;
+ a = std::vector<C>();
+}
+
template<typename T>
struct A1 : std::allocator<T>
{
@@ -41,9 +47,10 @@ struct A1 : std::allocator<T>
template<typename U> A1(const A1<U>&) { }
using propagate_on_container_move_assignment = std::true_type;
+ using is_always_equal = std::false_type;
};
-void test01()
+void test02()
{
using test_type = std::vector<C, A1<C>>;
static_assert(std::is_nothrow_move_assignable<test_type>::value,
@@ -62,7 +69,7 @@ struct A2 : std::allocator<T>
using is_always_equal = std::true_type;
};
-void test02()
+void test03()
{
using test_type = std::vector<C, A2<C>>;
static_assert(std::is_nothrow_move_assignable<test_type>::value,