Index: test/containers/associative/multiset/iterator.pass.cpp
===================================================================
--- test/containers/associative/multiset/iterator.pass.cpp	(revision 187915)
+++ test/containers/associative/multiset/iterator.pass.cpp	(working copy)
@@ -195,4 +195,18 @@
                 assert(*i == j);
     }
 #endif
+#if _LIBCPP_STD_VER > 11
+    { // N3664 testing
+        typedef std::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
 }
Index: test/containers/associative/multimap/iterator.pass.cpp
===================================================================
--- test/containers/associative/multimap/iterator.pass.cpp	(revision 187915)
+++ test/containers/associative/multimap/iterator.pass.cpp	(working copy)
@@ -211,4 +211,18 @@
             }
     }
 #endif
+#if _LIBCPP_STD_VER > 11
+    { // N3664 testing
+        typedef std::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
 }
Index: test/containers/associative/set/iterator.pass.cpp
===================================================================
--- test/containers/associative/set/iterator.pass.cpp	(revision 187915)
+++ test/containers/associative/set/iterator.pass.cpp	(working copy)
@@ -191,4 +191,18 @@
             assert(*i == j);
     }
 #endif
+#if _LIBCPP_STD_VER > 11
+    { // N3664 testing
+        typedef std::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
 }
Index: test/containers/associative/map/map.access/iterator.pass.cpp
===================================================================
--- test/containers/associative/map/map.access/iterator.pass.cpp	(revision 187915)
+++ test/containers/associative/map/map.access/iterator.pass.cpp	(working copy)
@@ -207,4 +207,18 @@
         }
     }
 #endif
+#if _LIBCPP_STD_VER > 11
+    { // N3664 testing
+        typedef std::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
 }
Index: include/__tree
===================================================================
--- include/__tree	(revision 187915)
+++ include/__tree	(working copy)
@@ -641,7 +641,11 @@
 #endif
                                        pointer;
 
-    _LIBCPP_INLINE_VISIBILITY __tree_iterator() _NOEXCEPT {}
+    _LIBCPP_INLINE_VISIBILITY __tree_iterator() _NOEXCEPT
+#if _LIBCPP_STD_VER > 11
+    : __ptr_(nullptr)
+#endif
+    {}
 
     _LIBCPP_INLINE_VISIBILITY reference operator*() const {return __ptr_->__value_;}
     _LIBCPP_INLINE_VISIBILITY pointer operator->() const
@@ -712,7 +716,12 @@
 #endif
                                        pointer;
 
-    _LIBCPP_INLINE_VISIBILITY __tree_const_iterator() {}
+    _LIBCPP_INLINE_VISIBILITY __tree_const_iterator()
+#if _LIBCPP_STD_VER > 11
+    : __ptr_(nullptr)
+#endif
+    {}
+
 private:
     typedef typename remove_const<__node>::type  __non_const_node;
     typedef typename pointer_traits<__node_pointer>::template
