diff options
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> |