summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/__hash_table8
-rw-r--r--libcxx/include/__tree4
-rw-r--r--libcxx/test/std/containers/associative/map/incomplete_type.pass.cpp2
-rw-r--r--libcxx/test/std/containers/associative/map/map.cons/default_recursive.pass.cpp2
-rw-r--r--libcxx/test/std/containers/associative/multimap/incomplete_type.pass.cpp2
-rw-r--r--libcxx/test/std/containers/associative/multimap/multimap.cons/default_recursive.pass.cpp2
-rw-r--r--libcxx/test/std/containers/unord/unord.map/incomplete_type.pass.cpp2
-rw-r--r--libcxx/test/std/containers/unord/unord.multimap/incomplete.pass.cpp2
8 files changed, 6 insertions, 18 deletions
diff --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table
index 86cd9315dd7..6b93e848d5c 100644
--- a/libcxx/include/__hash_table
+++ b/libcxx/include/__hash_table
@@ -938,10 +938,6 @@ private:
typedef allocator_traits<__node_base_allocator> __node_base_traits;
static_assert((is_same<__node_base_pointer, typename __node_base_traits::pointer>::value),
"Allocator does not rebind pointers in a sane manner.");
- static_assert((is_copy_constructible<key_equal>::value),
- "Predicate must be copy-constructible.");
- static_assert((is_copy_constructible<hasher>::value),
- "Hasher must be copy-constructible.");
private:
@@ -1479,6 +1475,10 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(__hash_table&& __u,
template <class _Tp, class _Hash, class _Equal, class _Alloc>
__hash_table<_Tp, _Hash, _Equal, _Alloc>::~__hash_table()
{
+ static_assert((is_copy_constructible<key_equal>::value),
+ "Predicate must be copy-constructible.");
+ static_assert((is_copy_constructible<hasher>::value),
+ "Hasher must be copy-constructible.");
__deallocate(__p1_.first().__next_);
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__erase_c(this);
diff --git a/libcxx/include/__tree b/libcxx/include/__tree
index e4863a02a56..52166baef9f 100644
--- a/libcxx/include/__tree
+++ b/libcxx/include/__tree
@@ -946,8 +946,6 @@ private:
typedef allocator_traits<__node_base_allocator> __node_base_traits;
static_assert((is_same<__node_base_pointer, typename __node_base_traits::pointer>::value),
"Allocator does not rebind pointers in a sane manner.");
- static_assert((is_copy_constructible<value_compare>::value),
- "Comparator must be copy-constructible.");
private:
__node_pointer __begin_node_;
@@ -1707,6 +1705,8 @@ __tree<_Tp, _Compare, _Allocator>::operator=(__tree&& __t)
template <class _Tp, class _Compare, class _Allocator>
__tree<_Tp, _Compare, _Allocator>::~__tree()
{
+ static_assert((is_copy_constructible<value_compare>::value),
+ "Comparator must be copy-constructible.");
destroy(__root());
}
diff --git a/libcxx/test/std/containers/associative/map/incomplete_type.pass.cpp b/libcxx/test/std/containers/associative/map/incomplete_type.pass.cpp
index 341ea2e3e12..84c2451ce08 100644
--- a/libcxx/test/std/containers/associative/map/incomplete_type.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/incomplete_type.pass.cpp
@@ -12,8 +12,6 @@
// Check that std::map and it's iterators can be instantiated with an incomplete
// type.
-// XFAIL: gcc
-
#include <map>
struct A {
diff --git a/libcxx/test/std/containers/associative/map/map.cons/default_recursive.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/default_recursive.pass.cpp
index 813db0bb570..b4b72725fd6 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/default_recursive.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/default_recursive.pass.cpp
@@ -13,8 +13,6 @@
// map();
-// XFAIL: gcc
-
#include <map>
struct X
diff --git a/libcxx/test/std/containers/associative/multimap/incomplete_type.pass.cpp b/libcxx/test/std/containers/associative/multimap/incomplete_type.pass.cpp
index 5663e5dc0b0..c461eb38139 100644
--- a/libcxx/test/std/containers/associative/multimap/incomplete_type.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/incomplete_type.pass.cpp
@@ -12,8 +12,6 @@
// Check that std::multimap and it's iterators can be instantiated with an incomplete
// type.
-// XFAIL: gcc
-
#include <map>
struct A {
diff --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/default_recursive.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/default_recursive.pass.cpp
index 092bc8ccc61..08ca8a441e3 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/default_recursive.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/default_recursive.pass.cpp
@@ -13,8 +13,6 @@
// multimap();
-// XFAIL: gcc
-
#include <map>
struct X
diff --git a/libcxx/test/std/containers/unord/unord.map/incomplete_type.pass.cpp b/libcxx/test/std/containers/unord/unord.map/incomplete_type.pass.cpp
index ce28c7ac88c..d51b1d8d181 100644
--- a/libcxx/test/std/containers/unord/unord.map/incomplete_type.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/incomplete_type.pass.cpp
@@ -13,8 +13,6 @@
// Check that std::unordered_map and it's iterators can be instantiated with an incomplete
// type.
-// XFAIL: gcc
-
#include <unordered_map>
template <class Tp>
diff --git a/libcxx/test/std/containers/unord/unord.multimap/incomplete.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/incomplete.pass.cpp
index 65940de5e43..7822224e736 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/incomplete.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/incomplete.pass.cpp
@@ -13,8 +13,6 @@
// Check that std::unordered_multimap and it's iterators can be instantiated with an incomplete
// type.
-// XFAIL: gcc
-
#include <unordered_map>
template <class Tp>
OpenPOWER on IntegriCloud