N3644 support for <unordered_set> and <unordered_map>
llvm-svn: 187915
diff --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table
index 7b0fc41..6157fcd 100644
--- a/libcxx/include/__hash_table
+++ b/libcxx/include/__hash_table
@@ -112,6 +112,9 @@
pointer;
_LIBCPP_INLINE_VISIBILITY __hash_iterator() _NOEXCEPT
+#if _LIBCPP_STD_VER > 11
+ : __node_(nullptr)
+#endif
{
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__insert_i(this);
@@ -248,6 +251,9 @@
typedef __hash_iterator<__non_const_node_pointer> __non_const_iterator;
_LIBCPP_INLINE_VISIBILITY __hash_const_iterator() _NOEXCEPT
+#if _LIBCPP_STD_VER > 11
+ : __node_(nullptr)
+#endif
{
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__insert_i(this);
diff --git a/libcxx/test/containers/unord/unord.map/iterators.pass.cpp b/libcxx/test/containers/unord/unord.map/iterators.pass.cpp
index 7d99fdf..4fc85a2 100644
--- a/libcxx/test/containers/unord/unord.map/iterators.pass.cpp
+++ b/libcxx/test/containers/unord/unord.map/iterators.pass.cpp
@@ -108,4 +108,18 @@
C::const_iterator i;
}
#endif
+#if _LIBCPP_STD_VER > 11
+ { // N3664 testing
+ typedef std::unordered_map<int,double> C;
+ C::iterator ii1{}, ii2{};
+ C::iterator ii4 = ii1;
+ C::const_iterator cii{};
+ assert ( ii1 == ii2 );
+ assert ( ii1 == ii4 );
+ assert ( ii1 == cii );
+
+ assert ( !(ii1 != ii2 ));
+ assert ( !(ii1 != cii ));
+ }
+#endif
}
diff --git a/libcxx/test/containers/unord/unord.multimap/iterators.pass.cpp b/libcxx/test/containers/unord/unord.multimap/iterators.pass.cpp
index c2fc44b..cdf70c1 100644
--- a/libcxx/test/containers/unord/unord.multimap/iterators.pass.cpp
+++ b/libcxx/test/containers/unord/unord.multimap/iterators.pass.cpp
@@ -114,4 +114,18 @@
C::const_iterator i;
}
#endif
+#if _LIBCPP_STD_VER > 11
+ { // N3664 testing
+ typedef std::unordered_multimap<int,double> C;
+ C::iterator ii1{}, ii2{};
+ C::iterator ii4 = ii1;
+ C::const_iterator cii{};
+ assert ( ii1 == ii2 );
+ assert ( ii1 == ii4 );
+ assert ( ii1 == cii );
+
+ assert ( !(ii1 != ii2 ));
+ assert ( !(ii1 != cii ));
+ }
+#endif
}
diff --git a/libcxx/test/containers/unord/unord.multiset/iterators.pass.cpp b/libcxx/test/containers/unord/unord.multiset/iterators.pass.cpp
index ddfc374..bc6f880 100644
--- a/libcxx/test/containers/unord/unord.multiset/iterators.pass.cpp
+++ b/libcxx/test/containers/unord/unord.multiset/iterators.pass.cpp
@@ -107,4 +107,18 @@
C::const_iterator i;
}
#endif
+#if _LIBCPP_STD_VER > 11
+ { // N3664 testing
+ typedef std::unordered_multiset<int> C;
+ C::iterator ii1{}, ii2{};
+ C::iterator ii4 = ii1;
+ C::const_iterator cii{};
+ assert ( ii1 == ii2 );
+ assert ( ii1 == ii4 );
+ assert ( ii1 == cii );
+
+ assert ( !(ii1 != ii2 ));
+ assert ( !(ii1 != cii ));
+ }
+#endif
}
diff --git a/libcxx/test/containers/unord/unord.set/iterators.pass.cpp b/libcxx/test/containers/unord/unord.set/iterators.pass.cpp
index 7815b9b..6127d66 100644
--- a/libcxx/test/containers/unord/unord.set/iterators.pass.cpp
+++ b/libcxx/test/containers/unord/unord.set/iterators.pass.cpp
@@ -107,4 +107,18 @@
C::const_iterator i;
}
#endif
+#if _LIBCPP_STD_VER > 11
+ { // N3664 testing
+ typedef std::unordered_set<int> C;
+ C::iterator ii1{}, ii2{};
+ C::iterator ii4 = ii1;
+ C::const_iterator cii{};
+ assert ( ii1 == ii2 );
+ assert ( ii1 == ii4 );
+ assert ( ii1 == cii );
+
+ assert ( !(ii1 != ii2 ));
+ assert ( !(ii1 != cii ));
+ }
+#endif
}