[libcxx-commits] [libcxx] 5cc55fd - [libc++] [test] Update "test_compare.h" users to avoid removed-in-C++20 members. NFCI.

Arthur O'Dwyer via libcxx-commits libcxx-commits at lists.llvm.org
Sat May 29 13:55:45 PDT 2021


Author: Arthur O'Dwyer
Date: 2021-05-29T16:54:24-04:00
New Revision: 5cc55fdb57c989b0987faaae7b667cd3459abae1

URL: https://github.com/llvm/llvm-project/commit/5cc55fdb57c989b0987faaae7b667cd3459abae1
DIFF: https://github.com/llvm/llvm-project/commit/5cc55fdb57c989b0987faaae7b667cd3459abae1.diff

LOG: [libc++] [test] Update "test_compare.h" users to avoid removed-in-C++20 members. NFCI.

Drive-by minor improvements to a couple of uses of min_pointer.

Differential Revision: https://reviews.llvm.org/D103366

Added: 
    

Modified: 
    libcxx/test/std/containers/associative/map/map.cons/compare.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/copy.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/copy_alloc.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/copy_assign.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
    libcxx/test/std/containers/associative/map/map.cons/move_assign.pass.cpp
    libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/compare.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/copy.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/copy_alloc.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/copy_assign.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/move_alloc.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.cons/move_assign.pass.cpp
    libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/compare.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/copy.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/copy_alloc.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/copy_assign.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_comp.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.cons/move_assign.pass.cpp
    libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/compare.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/copy.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/copy_alloc.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/copy_assign.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare_alloc.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/iter_iter_comp.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
    libcxx/test/std/containers/associative/set/set.cons/move_assign.pass.cpp
    libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp
    libcxx/test/std/containers/test_compare.h
    libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_copy.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_init.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_move.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/default.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.compile.fail.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_init.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_move.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/default.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.compile.fail.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_init.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/default.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.compile.fail.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp
    libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_copy.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_init.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_move.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/default.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move_alloc.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.compile.fail.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator.pass.cpp
    libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp
    libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
    libcxx/test/support/min_allocator.h

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/containers/associative/map/map.cons/compare.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/compare.pass.cpp
index d51ad324953dd..4e55490ebc663 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/compare.pass.cpp
@@ -24,7 +24,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     const std::map<int, double, C> m(C(3));
     assert(m.empty());
     assert(m.begin() == m.end());
@@ -32,7 +32,7 @@ int main(int, char**)
     }
 #if TEST_STD_VER >= 11
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     const std::map<int, double, C, min_allocator<std::pair<const int, double>>> m(C(3));
     assert(m.empty());
     assert(m.begin() == m.end());

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/compare_alloc.pass.cpp
index 7437a7f14506a..9d425e7218d64 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/compare_alloc.pass.cpp
@@ -23,7 +23,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<std::pair<const int, double> > A;
     std::map<int, double, C, A> m(C(4), A(5));
     assert(m.empty());
@@ -33,7 +33,7 @@ int main(int, char**)
     }
 #if TEST_STD_VER >= 11
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<std::pair<const int, double> > A;
     std::map<int, double, C, A> m(C(4), A());
     assert(m.empty());
@@ -42,7 +42,7 @@ int main(int, char**)
     assert(m.get_allocator() == A());
     }
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef explicit_allocator<std::pair<const int, double> > A;
     std::map<int, double, C, A> m(C(4), A{});
     assert(m.empty());

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/copy.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/copy.pass.cpp
index 8eec27b3eabed..1387e55cdd3fc 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/copy.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/copy.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::map<int, double, C, A> m = mo;
@@ -71,7 +71,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::map<int, double, C, A> m = mo;
@@ -105,7 +105,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::map<int, double, C, A> m = mo;

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/copy_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/copy_alloc.pass.cpp
index 93ff5e20acf54..86a53cdf65a5e 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/copy_alloc.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<V> A;
     std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     std::map<int, double, C, A> m(mo, A(3));
@@ -71,7 +71,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<V> A;
     std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
     std::map<int, double, C, A> m(mo, A());
@@ -105,7 +105,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef explicit_allocator<V> A;
     std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A{});
     std::map<int, double, C, A> m(mo, A{});

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/copy_assign.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/copy_assign.pass.cpp
index a77bf10b99132..50b44446d117a 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/copy_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/copy_assign.pass.cpp
@@ -130,7 +130,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2)
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
@@ -180,7 +180,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2)
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
@@ -216,7 +216,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2)
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A());
@@ -251,7 +251,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2)
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A());
@@ -288,7 +288,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2)
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef counting_allocatorT<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(1));
         std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(2));
@@ -322,7 +322,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2)
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef counting_allocatorF<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(100));
         std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(200));

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare.pass.cpp
index dce0be4fb1cc4..9e121e37c7afb 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare.pass.cpp
@@ -24,7 +24,7 @@ int main(int, char**)
 {
     {
     typedef std::pair<const int, double> V;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     std::map<int, double, C> m({
                                 {1, 1},
                                 {1, 1.5},
@@ -45,7 +45,7 @@ int main(int, char**)
     }
     {
     typedef std::pair<const int, double> V;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     std::map<int, double, C, min_allocator<std::pair<const int, double>>> m({
                                 {1, 1},
                                 {1, 1.5},

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare_alloc.pass.cpp
index bf039c3ec3d2f..654d72a4b381f 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/initializer_list_compare_alloc.pass.cpp
@@ -25,7 +25,7 @@ int main(int, char**)
 {
     {
     typedef std::pair<const int, double> V;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<std::pair<const int, double> > A;
     std::map<int, double, C, A> m({
                                    {1, 1},
@@ -48,7 +48,7 @@ int main(int, char**)
     }
     {
     typedef std::pair<const int, double> V;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<std::pair<const int, double> > A;
     std::map<int, double, C, A> m({
                                    {1, 1},
@@ -72,7 +72,7 @@ int main(int, char**)
     {
     typedef std::pair<const int, double> V;
     typedef min_allocator<V> A;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef std::map<int, double, C, A> M;
     A a;
     M m ({ {1, 1},
@@ -96,7 +96,7 @@ int main(int, char**)
     {
     typedef std::pair<const int, double> V;
     typedef explicit_allocator<V> A;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     A a;
     std::map<int, double, C, A> m({
                                    {1, 1},

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp.pass.cpp
index 25760fa09960d..6382179e1b5cc 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     std::map<int, double, C> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5));
     assert(m.key_comp() == C(5));
     assert(m.size() == 3);
@@ -60,7 +60,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     std::map<int, double, C, min_allocator<std::pair<const int, double>>> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5));
     assert(m.key_comp() == C(5));
     assert(m.size() == 3);

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
index 56396799dc9b3..3ede41e369456 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/iter_iter_comp_alloc.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<V> A;
     std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     assert(m.get_allocator() == A(7));
@@ -64,7 +64,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<V> A;
     std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
     assert(m.get_allocator() == A());
@@ -92,7 +92,7 @@ int main(int, char**)
     };
     {
     typedef min_allocator<V> A;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     A a;
     std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), a );
 
@@ -105,7 +105,7 @@ int main(int, char**)
     }
     {
     typedef explicit_allocator<V> A;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     A a;
     std::map<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), a );
 

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
index 1e45df9ddea92..437db1e57987b 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/move.pass.cpp
@@ -26,7 +26,7 @@ int main(int, char**)
 {
     typedef std::pair<const int, double> V;
     {
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::map<int, double, C, A> mo(C(5), A(7));
         std::map<int, double, C, A> m = std::move(mo);
@@ -53,7 +53,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::map<int, double, C, A> m = std::move(mo);
@@ -71,7 +71,7 @@ int main(int, char**)
         assert(distance(mo.begin(), mo.end()) == 0);
     }
     {
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::map<int, double, C, A> mo(C(5), A());
         std::map<int, double, C, A> m = std::move(mo);
@@ -98,7 +98,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::map<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::map<int, double, C, A> m = std::move(mo);

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
index df633952069d5..55711676c8dfa 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -107,7 +107,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -196,7 +196,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef min_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -235,7 +235,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef explicit_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/map/map.cons/move_assign.pass.cpp b/libcxx/test/std/containers/associative/map/map.cons/move_assign.pass.cpp
index 72ba763f4ad0f..c19fba5169b10 100644
--- a/libcxx/test/std/containers/associative/map/map.cons/move_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.cons/move_assign.pass.cpp
@@ -28,7 +28,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -108,7 +108,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -148,7 +148,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef min_allocator<VC> A;
         typedef std::map<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp
index 9a8c86316b604..18d991c15e4ac 100644
--- a/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp
@@ -101,7 +101,7 @@ int main(int, char**)
     }
     {
         typedef test_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::map<int, double, C, A> M;
         V ar1[] =
         {
@@ -135,7 +135,7 @@ int main(int, char**)
     }
     {
         typedef other_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::map<int, double, C, A> M;
         V ar1[] =
         {
@@ -245,7 +245,7 @@ int main(int, char**)
     }
     {
         typedef min_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::map<int, double, C, A> M;
         V ar1[] =
         {

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/compare.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/compare.pass.cpp
index 223bb6204b4d6..5cf4b5d8c8736 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/compare.pass.cpp
@@ -24,7 +24,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     const std::multimap<int, double, C> m(C(3));
     assert(m.empty());
     assert(m.begin() == m.end());
@@ -32,7 +32,7 @@ int main(int, char**)
     }
 #if TEST_STD_VER >= 11
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     const std::multimap<int, double, C, min_allocator<std::pair<const int, double>>> m(C(3));
     assert(m.empty());
     assert(m.begin() == m.end());

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/compare_alloc.pass.cpp
index 3405dd3b14e5c..7bfb93ee1961f 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/compare_alloc.pass.cpp
@@ -23,7 +23,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<std::pair<const int, double> > A;
     std::multimap<int, double, C, A> m(C(4), A(5));
     assert(m.empty());
@@ -33,7 +33,7 @@ int main(int, char**)
     }
 #if TEST_STD_VER >= 11
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<std::pair<const int, double> > A;
     std::multimap<int, double, C, A> m(C(4), A());
     assert(m.empty());
@@ -42,7 +42,7 @@ int main(int, char**)
     assert(m.get_allocator() == A());
     }
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef explicit_allocator<std::pair<const int, double> > A;
     std::multimap<int, double, C, A> m(C(4), A{});
     assert(m.empty());

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/copy.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/copy.pass.cpp
index d3b064256776c..9e53d9c15de19 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/copy.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/copy.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::multimap<int, double, C, A> m = mo;
@@ -62,7 +62,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::multimap<int, double, C, A> m = mo;
@@ -87,7 +87,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::multimap<int, double, C, A> m = mo;

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_alloc.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_alloc.pass.cpp
index 42a6f23d0f87b..9ccf7715d267b 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_alloc.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<V> A;
     std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     std::multimap<int, double, C, A> m(mo, A(3));
@@ -62,7 +62,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<V> A;
     std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
     std::multimap<int, double, C, A> m(mo, A());
@@ -87,7 +87,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef explicit_allocator<V> A;
     std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A{});
     std::multimap<int, double, C, A> m(mo, A{});

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_assign.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_assign.pass.cpp
index c102baa16d15b..b4ff5e7777b98 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/copy_assign.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::multimap<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
@@ -82,7 +82,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::multimap<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
@@ -109,7 +109,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::multimap<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A());

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare.pass.cpp
index 72af2f625b9a6..5d1196ab718b7 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare.pass.cpp
@@ -23,7 +23,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef std::multimap<int, double, Cmp> C;
     typedef C::value_type V;
     C m(
@@ -55,7 +55,7 @@ int main(int, char**)
     assert(m.key_comp() == Cmp(4));
     }
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef std::multimap<int, double, Cmp, min_allocator<std::pair<const int, double>>> C;
     typedef C::value_type V;
     C m(

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare_alloc.pass.cpp
index bc9d76d622c19..7f9f58f02ed3f 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/initializer_list_compare_alloc.pass.cpp
@@ -24,7 +24,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef test_allocator<std::pair<const int, double> > A;
     typedef std::multimap<int, double, Cmp, A> C;
     typedef C::value_type V;
@@ -58,7 +58,7 @@ int main(int, char**)
     assert(m.get_allocator() == A(5));
     }
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef min_allocator<std::pair<const int, double> > A;
     typedef std::multimap<int, double, Cmp, A> C;
     typedef C::value_type V;
@@ -92,7 +92,7 @@ int main(int, char**)
     assert(m.get_allocator() == A());
     }
     {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef std::pair<const int, double> V;
     typedef min_allocator<V> A;
     typedef std::multimap<int, double, C, A> M;
@@ -123,7 +123,7 @@ int main(int, char**)
     assert(m.get_allocator() == a);
     }
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef explicit_allocator<std::pair<const int, double> > A;
     typedef std::multimap<int, double, Cmp, A> C;
     typedef C::value_type V;

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp.pass.cpp
index 0c76fabef1879..13672ed3bc463 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     std::multimap<int, double, C> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5));
     assert(m.key_comp() == C(5));
     assert(m.size() == 9);
@@ -67,7 +67,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     std::multimap<int, double, C, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5));
     assert(m.key_comp() == C(5));
     assert(m.size() == 9);

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
index 199200947bdea..3edbc687e7814 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/iter_iter_comp_alloc.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<V> A;
     std::multimap<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     assert(m.get_allocator() == A(7));
@@ -70,7 +70,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef min_allocator<V> A;
     std::multimap<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
     assert(m.get_allocator() == A());
@@ -101,7 +101,7 @@ int main(int, char**)
         V(3, 1.5),
         V(3, 2),
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef explicit_allocator<V> A;
     std::multimap<int, double, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A{});
     assert(m.get_allocator() == A{});

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
index c561afeefb44c..c486b4301130e 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/move.pass.cpp
@@ -26,7 +26,7 @@ int main(int, char**)
 {
     typedef std::pair<const int, double> V;
     {
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multimap<int, double, C, A> mo(C(5), A(7));
         std::multimap<int, double, C, A> m = std::move(mo);
@@ -53,7 +53,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::multimap<int, double, C, A> m = std::move(mo);
@@ -77,7 +77,7 @@ int main(int, char**)
         assert(distance(mo.begin(), mo.end()) == 0);
     }
     {
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::multimap<int, double, C, A> mo(C(5), A());
         std::multimap<int, double, C, A> m = std::move(mo);
@@ -104,7 +104,7 @@ int main(int, char**)
             V(3, 1.5),
             V(3, 2),
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::multimap<int, double, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::multimap<int, double, C, A> m = std::move(mo);

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/move_alloc.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/move_alloc.pass.cpp
index 1fc9a2a8b21c6..a4edd473c6294 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/move_alloc.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -107,7 +107,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -196,7 +196,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef min_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -235,7 +235,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef explicit_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.cons/move_assign.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.cons/move_assign.pass.cpp
index d4eccc638844d..f0a54b0d7cc65 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.cons/move_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.cons/move_assign.pass.cpp
@@ -28,7 +28,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -108,7 +108,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -148,7 +148,7 @@ int main(int, char**)
     {
         typedef std::pair<MoveOnly, MoveOnly> V;
         typedef std::pair<const MoveOnly, MoveOnly> VC;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef min_allocator<VC> A;
         typedef std::multimap<MoveOnly, MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp
index da4a0ef2175c9..82a838d54099a 100644
--- a/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp
+++ b/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp
@@ -101,7 +101,7 @@ int main(int, char**)
     }
     {
         typedef test_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::multimap<int, double, C, A> M;
         V ar1[] =
         {
@@ -135,7 +135,7 @@ int main(int, char**)
     }
     {
         typedef other_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::multimap<int, double, C, A> M;
         V ar1[] =
         {
@@ -245,7 +245,7 @@ int main(int, char**)
     }
     {
         typedef min_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::multimap<int, double, C, A> M;
         V ar1[] =
         {

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/compare.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/compare.pass.cpp
index 16f7486cf2d4f..e9a78b642dfcc 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/compare.pass.cpp
@@ -24,7 +24,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     const std::multiset<int, C> m(C(3));
     assert(m.empty());
     assert(m.begin() == m.end());

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/compare_alloc.pass.cpp
index 0b261e2571e26..61458e71d90b4 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/compare_alloc.pass.cpp
@@ -21,7 +21,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<int> A;
     std::multiset<int, C, A> m(C(4), A(5));
     assert(m.empty());

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/copy.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/copy.pass.cpp
index ac196b5ae33b4..a48a76889a193 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/copy.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/copy.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::multiset<int, C, A> m = mo;
@@ -82,7 +82,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::multiset<int, C, A> m = mo;

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_alloc.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_alloc.pass.cpp
index 31b8a2eb82b4d..dec23c03d47fd 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_alloc.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         3,
         3
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<V> A;
     std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     std::multiset<int, C, A> m(mo, A(3));

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_assign.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_assign.pass.cpp
index 1848cdba48813..d036d3ae9907b 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/copy_assign.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::multiset<int, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
@@ -102,7 +102,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::multiset<int, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare.pass.cpp
index b44b39b8fdf7c..128220b9af84b 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare.pass.cpp
@@ -21,7 +21,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef std::multiset<int, Cmp> C;
     typedef C::value_type V;
     C m({1, 2, 3, 4, 5, 6}, Cmp(10));

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare_alloc.pass.cpp
index 56f0bc907c0ea..37e20e0a0dbf6 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/initializer_list_compare_alloc.pass.cpp
@@ -22,7 +22,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef test_allocator<int> A;
     typedef std::multiset<int, Cmp, A> C;
     typedef C::value_type V;

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
index 4227b6b48ade4..b9de2e1272d94 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_alloc.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
         3,
         3
     };
-    typedef test_compare<std::less<V> > C;
+    typedef test_less<V> C;
     typedef test_allocator<V> A;
     std::multiset<V, C, A> m(cpp17_input_iterator<const V*>(ar),
                         cpp17_input_iterator<const V*>(ar+sizeof(ar)/sizeof(ar[0])),
@@ -73,7 +73,7 @@ int main(int, char**)
         3
     };
     typedef test_allocator<V> A;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     A a;
     std::multiset<V, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), a);
 

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_comp.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_comp.pass.cpp
index d276e4a36e640..6b548968a6ffc 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_comp.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/iter_iter_comp.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
         3,
         3
     };
-    typedef test_compare<std::less<V> > C;
+    typedef test_less<V> C;
     std::multiset<V, C> m(cpp17_input_iterator<const V*>(ar),
                      cpp17_input_iterator<const V*>(ar+sizeof(ar)/sizeof(ar[0])), C(5));
     assert(m.value_comp() == C(5));

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
index d1ab4b97838d7..6f35f8e982489 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/move.pass.cpp
@@ -26,7 +26,7 @@ int main(int, char**)
 {
     {
         typedef int V;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multiset<int, C, A> mo(C(5), A(7));
         std::multiset<int, C, A> m = std::move(mo);
@@ -54,7 +54,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::multiset<int, C, A> m = std::move(mo);
@@ -91,7 +91,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::multiset<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::multiset<int, C, A> m = std::move(mo);

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
index 47aed4ea1f9d7..620caaef19325 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
@@ -27,7 +27,7 @@ int main(int, char**)
 {
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -65,7 +65,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -103,7 +103,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.cons/move_assign.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.cons/move_assign.pass.cpp
index 5f63bfc92ebf4..c57a56cd44880 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.cons/move_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.cons/move_assign.pass.cpp
@@ -27,7 +27,7 @@ int main(int, char**)
 {
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -66,7 +66,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -105,7 +105,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -144,7 +144,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef min_allocator<V> A;
         typedef std::multiset<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp
index 2686b94dce0be..e77a3b8d053db 100644
--- a/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp
+++ b/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp
@@ -98,7 +98,7 @@ int main(int, char**)
     }
     {
         typedef test_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::set<int, C, A> M;
         V ar1[] =
         {
@@ -132,7 +132,7 @@ int main(int, char**)
     }
     {
         typedef other_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::set<int, C, A> M;
         V ar1[] =
         {

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/compare.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/compare.pass.cpp
index 66115b99c2809..2db093a9b5c8e 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/compare.pass.cpp
@@ -24,7 +24,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     const std::set<int, C> m(C(3));
     assert(m.empty());
     assert(m.begin() == m.end());

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/compare_alloc.pass.cpp
index fb13c5fbd0c8c..dfd89a16bcd07 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/compare_alloc.pass.cpp
@@ -21,7 +21,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<int> A;
     std::set<int, C, A> m(C(4), A(5));
     assert(m.empty());

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/copy.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/copy.pass.cpp
index 2e256aa172121..b3760af69f471 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/copy.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/copy.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::set<int, C, A> m = mo;
@@ -70,7 +70,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::set<int, C, A> m = mo;

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/copy_alloc.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/copy_alloc.pass.cpp
index cdc78e86defb6..f8a7217e4fcfd 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/copy_alloc.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         3,
         3
     };
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     typedef test_allocator<V> A;
     std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
     std::set<int, C, A> m(mo, A(3));

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/copy_assign.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/copy_assign.pass.cpp
index abea6ba29660e..bf399ca368fb1 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/copy_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/copy_assign.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::set<int, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));
@@ -85,7 +85,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef other_allocator<V> A;
         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(2));
         std::set<int, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0])/2, C(3), A(7));

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare.pass.cpp
index 20e738ed7b500..be98513f326d7 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare.pass.cpp
@@ -21,7 +21,7 @@
 
 int main(int, char**)
 {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef std::set<int, Cmp> C;
     typedef C::value_type V;
     C m({1, 2, 3, 4, 5, 6}, Cmp(10));

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare_alloc.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare_alloc.pass.cpp
index 18c5fb9b561ea..e6be1726fbf3f 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/initializer_list_compare_alloc.pass.cpp
@@ -24,7 +24,7 @@
 int main(int, char**)
 {
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef test_allocator<int> A;
     typedef std::set<int, Cmp, A> C;
     typedef C::value_type V;
@@ -42,7 +42,7 @@ int main(int, char**)
     assert(m.get_allocator() == A(4));
     }
     {
-    typedef test_compare<std::less<int> > Cmp;
+    typedef test_less<int> Cmp;
     typedef test_allocator<int> A;
     typedef std::set<int, Cmp, A> C;
     typedef C::value_type V;

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
index 30fa4a17e5626..962b34d389eb0 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/iter_iter_alloc.pass.cpp
@@ -42,7 +42,7 @@ int main(int, char**)
         3,
         3
     };
-    typedef test_compare<std::less<V> > C;
+    typedef test_less<V> C;
     typedef test_allocator<V> A;
     std::set<V, C, A> m(cpp17_input_iterator<const V*>(ar),
                         cpp17_input_iterator<const V*>(ar+sizeof(ar)/sizeof(ar[0])),
@@ -71,7 +71,7 @@ int main(int, char**)
         3
     };
     typedef test_allocator<V> A;
-    typedef test_compare<std::less<int> > C;
+    typedef test_less<int> C;
     A a(7);
     std::set<V, C, A> m(ar, ar+sizeof(ar)/sizeof(ar[0]), a);
 

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/iter_iter_comp.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/iter_iter_comp.pass.cpp
index c1afb46821245..523f45e88b029 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/iter_iter_comp.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/iter_iter_comp.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
         3,
         3
     };
-    typedef test_compare<std::less<V> > C;
+    typedef test_less<V> C;
     std::set<V, C> m(cpp17_input_iterator<const V*>(ar),
                      cpp17_input_iterator<const V*>(ar+sizeof(ar)/sizeof(ar[0])), C(5));
     assert(m.value_comp() == C(5));

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
index 4cd4d9cf88f22..a642b3ecc7137 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/move.pass.cpp
@@ -26,7 +26,7 @@ int main(int, char**)
 {
     {
         typedef int V;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::set<int, C, A> mo(C(5), A(7));
         std::set<int, C, A> m = std::move(mo);
@@ -54,7 +54,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef test_allocator<V> A;
         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A(7));
         std::set<int, C, A> m = std::move(mo);
@@ -85,7 +85,7 @@ int main(int, char**)
             3,
             3
         };
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef min_allocator<V> A;
         std::set<int, C, A> mo(ar, ar+sizeof(ar)/sizeof(ar[0]), C(5), A());
         std::set<int, C, A> m = std::move(mo);

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
index d174f173a7932..2d9916c4f376d 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
@@ -27,7 +27,7 @@ int main(int, char**)
 {
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -65,7 +65,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -103,7 +103,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/set/set.cons/move_assign.pass.cpp b/libcxx/test/std/containers/associative/set/set.cons/move_assign.pass.cpp
index 4c1ffddac9a55..ea85051aa4cc2 100644
--- a/libcxx/test/std/containers/associative/set/set.cons/move_assign.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.cons/move_assign.pass.cpp
@@ -27,7 +27,7 @@ int main(int, char**)
 {
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -66,7 +66,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef test_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -105,7 +105,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef other_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;
@@ -144,7 +144,7 @@ int main(int, char**)
     }
     {
         typedef MoveOnly V;
-        typedef test_compare<std::less<MoveOnly> > C;
+        typedef test_less<MoveOnly> C;
         typedef min_allocator<V> A;
         typedef std::set<MoveOnly, C, A> M;
         typedef std::move_iterator<V*> I;

diff  --git a/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp
index 63df517b7a031..2c54ecbf4cee3 100644
--- a/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp
+++ b/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp
@@ -98,7 +98,7 @@ int main(int, char**)
     }
     {
         typedef test_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::set<int, C, A> M;
         V ar1[] =
         {
@@ -132,7 +132,7 @@ int main(int, char**)
     }
     {
         typedef other_allocator<V> A;
-        typedef test_compare<std::less<int> > C;
+        typedef test_less<int> C;
         typedef std::set<int, C, A> M;
         V ar1[] =
         {

diff  --git a/libcxx/test/std/containers/test_compare.h b/libcxx/test/std/containers/test_compare.h
index fc4fdccd062e8..1b4c4916b3374 100644
--- a/libcxx/test/std/containers/test_compare.h
+++ b/libcxx/test/std/containers/test_compare.h
@@ -9,36 +9,28 @@
 #ifndef TEST_COMPARE_H
 #define TEST_COMPARE_H
 
-#include <cstddef>
-#include <type_traits>
-#include <cstdlib>
-#include <new>
-#include <climits>
-
-template <class C>
-class test_compare
-    : private C
+template <class T>
+struct test_equal_to
 {
     int data_;
-public:
-    explicit test_compare(int data = 0) : data_(data) {}
-
-    typename C::result_type
-    operator()(typename std::add_lvalue_reference<const typename C::first_argument_type>::type x,
-               typename std::add_lvalue_reference<const typename C::second_argument_type>::type y) const
-        {return C::operator()(x, y);}
-
-    bool operator==(const test_compare& c) const
-        {return data_ == c.data_;}
+    explicit test_equal_to() : data_(0) {}
+    explicit test_equal_to(int data) : data_(data) {}
+    bool operator()(const T& a, const T& b) const
+        { return a == b; }
+    friend bool operator==(const test_equal_to& a, const test_equal_to& b)
+        { return a.data_ == b.data_; }
 };
 
-
-template <class C>
-class non_const_compare
+template <class T>
+struct test_less
 {
-// operator() deliberately not marked as 'const'
-    bool operator()(const C& x, const C& y) { return x < y; }
+    int data_;
+    explicit test_less() : data_(0) {}
+    explicit test_less(int data) : data_(data) {}
+    bool operator()(const T& a, const T& b) const
+        { return a < b; }
+    friend bool operator==(const test_less& a, const test_less& b)
+        { return a.data_ == b.data_; }
 };
 
-
 #endif // TEST_COMPARE_H

diff  --git a/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp
index ff9b32e3ea27f..e41e6d820d0d3 100644
--- a/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -57,7 +57,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -105,7 +105,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -147,7 +147,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -209,7 +209,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -237,7 +237,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -285,7 +285,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -327,7 +327,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -389,7 +389,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -417,7 +417,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -465,7 +465,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -507,7 +507,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/allocator.pass.cpp
index 8f1d7561b2470..755b71f5b23c1 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/allocator.pass.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(test_allocator<std::pair<const NotConstructible, NotConstructible> >(10));
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(min_allocator<std::pair<const NotConstructible, NotConstructible> >{});
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -69,13 +69,13 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const NotConstructible, NotConstructible>> A;
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         C c(A{});
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == A{});
         assert(c.size() == 0);
         assert(c.empty());
@@ -88,7 +88,7 @@ int main(int, char**)
         typedef NotConstructible T;
         typedef test_allocator<std::pair<const T, T>> A;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef std::unordered_map<T, T, HF, Comp, A> C;
 
         A a(10);
@@ -107,7 +107,7 @@ int main(int, char**)
         typedef NotConstructible T;
         typedef test_allocator<std::pair<const T, T>> A;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef std::unordered_map<T, T, HF, Comp, A> C;
 
         A a(10);

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_copy.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_copy.pass.cpp
index a5a67bcc29d21..e29ef223839be 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_copy.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -50,13 +50,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -67,7 +67,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -97,7 +97,7 @@ int main(int, char**)
         typedef other_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -113,13 +113,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -130,7 +130,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -143,7 +143,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -159,13 +159,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         c = c0;
@@ -176,7 +176,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_init.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_init.pass.cpp
index 431c8a36738ae..8ee479e973f55 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_init.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         typedef std::allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -66,7 +66,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_move.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_move.pass.cpp
index 2378a5d4aad87..0de13dce3720d 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/assign_move.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -51,13 +51,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = std::move(c0);
@@ -68,7 +68,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -80,7 +80,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -96,13 +96,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(10)
            );
         C::iterator it0 = c0.begin();
@@ -114,7 +114,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -128,7 +128,7 @@ int main(int, char**)
         typedef other_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -144,13 +144,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         C::iterator it0 = c0.begin();
@@ -162,7 +162,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -176,7 +176,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -192,13 +192,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         C::iterator it0 = c0.begin();
@@ -210,7 +210,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy.pass.cpp
index ee4bc43a54aa9..f07193aa5670e 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy.pass.cpp
@@ -32,7 +32,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -48,7 +48,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C c = c0;
@@ -59,7 +59,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(!c.empty());
@@ -72,7 +72,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    other_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -88,7 +88,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             other_allocator<std::pair<const int, std::string> >(10)
            );
         C c = c0;
@@ -99,7 +99,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (other_allocator<std::pair<const int, std::string> >(-2)));
         assert(!c.empty());
@@ -111,7 +111,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -127,7 +127,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C c = c0;
@@ -138,7 +138,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy_alloc.pass.cpp
index 8e7a3a0796e24..8036d2d251354 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/copy_alloc.pass.cpp
@@ -32,7 +32,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -48,7 +48,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C c(c0, test_allocator<std::pair<const int, std::string> >(5));
@@ -59,7 +59,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(5)));
         assert(!c.empty());
@@ -72,7 +72,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -88,7 +88,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C c(c0, min_allocator<std::pair<const int, std::string> >());
@@ -99,7 +99,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -112,7 +112,7 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -128,7 +128,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         C c(c0, A{});
@@ -139,7 +139,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/default.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/default.pass.cpp
index bda7d24a6fd45..455eb3c2633c6 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/default.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/default.pass.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -69,14 +69,14 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const NotConstructible, NotConstructible>> A;
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         {
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == A());
         assert(c.size() == 0);
         assert(c.empty());
@@ -89,7 +89,7 @@ int main(int, char**)
         C c(a);
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == a);
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init.pass.cpp
index e348929621d99..8d6810acd8899 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -53,7 +53,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -65,7 +65,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -84,7 +84,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -98,7 +98,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_map<int, std::string, HF, Comp, A> C;
 
         A a(42);
@@ -117,7 +117,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == a);
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -129,7 +129,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_map<int, std::string, HF, Comp, A> C;
 
         HF hf(42);
@@ -150,7 +150,7 @@ int main(int, char**)
         assert(c.at(4) == "four");
         assert(c.hash_function() == hf);
         assert(!(c.hash_function() == test_hash<std::hash<int> >()));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == a);
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size.pass.cpp
index c5c07fa171b0e..ddc9f463ab2d9 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -55,7 +55,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -67,7 +67,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -88,7 +88,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash.pass.cpp
index 529070474ad8b..d90de51f20c8d 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -56,7 +56,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -90,7 +90,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal.pass.cpp
index 6f0ddaf71e2c5..291fc142ab1ab 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -49,7 +49,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -70,7 +70,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -84,7 +84,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -93,7 +93,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator.pass.cpp
index c7e325823b8c6..73386f03293d3 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -49,7 +49,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -59,7 +59,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(!c.empty());
@@ -71,7 +71,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -85,7 +85,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -95,7 +95,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -108,7 +108,7 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -122,7 +122,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -132,7 +132,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move.pass.cpp
index 363f2f818f160..182e5b00b6394 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move.pass.cpp
@@ -34,12 +34,12 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C::iterator it0 = c0.begin();
@@ -47,7 +47,7 @@ int main(int, char**)
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(c.empty());
@@ -62,7 +62,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -78,7 +78,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C::iterator it0 = c0.begin();
@@ -90,7 +90,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(!c.empty());
@@ -105,12 +105,12 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C::iterator it0 = c0.begin();
@@ -118,7 +118,7 @@ int main(int, char**)
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(c.empty());
@@ -133,7 +133,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -149,7 +149,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C::iterator it0 = c0.begin();
@@ -161,7 +161,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move_alloc.pass.cpp
index 2b4a7ef41b41d..48b7a3fc4ccb1 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/move_alloc.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -51,7 +51,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(12));
@@ -62,7 +62,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(12));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -77,7 +77,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -92,7 +92,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(10));
@@ -103,7 +103,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -118,7 +118,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -133,7 +133,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(std::move(c0), A());
@@ -144,7 +144,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -159,7 +159,7 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -174,7 +174,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         C c(std::move(c0), A{});
@@ -185,7 +185,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp
index f3474115fe3a4..098f709b66148 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -56,7 +56,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -69,7 +69,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -90,7 +90,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -104,7 +104,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_map<int, std::string, HF, Comp, A> C;
 
         P arr[] =
@@ -136,7 +136,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_map<int, std::string, HF, Comp, A> C;
 
         P arr[] =

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp
index 6c7d50cda045c..b57b670557a58 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -71,7 +71,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -94,7 +94,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp
index eb94ca9b69050..2304db83dda36 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -60,7 +60,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -73,7 +73,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -97,7 +97,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp
index 3d5cb2ae34831..87a117742b6ba 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -52,7 +52,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -61,7 +61,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -74,7 +74,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -90,7 +90,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -99,7 +99,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp
index 6527ec7757037..eae15885b4817 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -53,7 +53,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -63,7 +63,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(!c.empty());
@@ -76,7 +76,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -92,7 +92,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -102,7 +102,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -115,7 +115,7 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_map<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -131,7 +131,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -141,7 +141,7 @@ int main(int, char**)
         assert(c.at(3) == "three");
         assert(c.at(4) == "four");
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.compile.fail.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.compile.fail.cpp
index 9a715b6a1bb9c..249be3784bbb9 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.compile.fail.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.compile.fail.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.pass.cpp
index 41cfc7104fa3f..e69d3da59d2fc 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size.pass.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash.pass.cpp
index f97ee39fbef34..b7f7fd82e2dee 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
@@ -38,7 +38,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -51,7 +51,7 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
@@ -60,7 +60,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal.pass.cpp
index 8c306364ed847..0cc6f9746a6b8 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal.pass.cpp
@@ -29,17 +29,17 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -52,17 +52,17 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator.pass.cpp
index 40b9d01a203bb..7ccd4b7fef4ab 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator.pass.cpp
@@ -29,18 +29,18 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)));
         assert(c.size() == 0);
@@ -53,18 +53,18 @@ int main(int, char**)
     {
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             min_allocator<std::pair<const NotConstructible, NotConstructible> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -77,17 +77,17 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const NotConstructible, NotConstructible> > A;
         typedef std::unordered_map<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             A{}
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == A{});
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp
index d145c74ecc1c6..fa0e74cdf6eba 100644
--- a/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -57,7 +57,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -107,7 +107,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -151,7 +151,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -217,7 +217,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -245,7 +245,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -293,7 +293,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -335,7 +335,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -397,7 +397,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -425,7 +425,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -473,7 +473,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -515,7 +515,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
index 75806df979178..e9182db88d115 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
@@ -31,7 +31,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -59,7 +59,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -107,7 +107,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -163,7 +163,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -239,7 +239,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -267,7 +267,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -315,7 +315,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -371,7 +371,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -447,7 +447,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -475,7 +475,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -523,7 +523,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -579,7 +579,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/allocator.pass.cpp
index e15999f183eea..ba7b22ce052f6 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/allocator.pass.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(test_allocator<std::pair<const NotConstructible, NotConstructible> >(10));
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(min_allocator<std::pair<const NotConstructible, NotConstructible> >{});
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -69,13 +69,13 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const NotConstructible, NotConstructible>> A;
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         C c(A{});
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == A{});
         assert(c.size() == 0);
         assert(c.empty());
@@ -88,7 +88,7 @@ int main(int, char**)
         typedef NotConstructible T;
         typedef test_allocator<std::pair<const T, T>> A;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef std::unordered_multimap<T, T, HF, Comp, A> C;
 
         A a(10);
@@ -107,7 +107,7 @@ int main(int, char**)
         typedef NotConstructible T;
         typedef test_allocator<std::pair<const T, T>> A;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef std::unordered_multimap<T, T, HF, Comp, A> C;
 
         A a(10);

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy.pass.cpp
index d7f95761a091e..e095c4af36ab6 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -52,13 +52,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -76,7 +76,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -106,7 +106,7 @@ int main(int, char**)
         typedef other_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -122,13 +122,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -146,7 +146,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -159,7 +159,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -175,13 +175,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         c = c0;
@@ -199,7 +199,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_init.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_init.pass.cpp
index 7e37f84117c59..fa6b002aaf369 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_init.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -88,7 +88,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_move.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_move.pass.cpp
index e163d0a20ba94..357e7f9df0f43 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/assign_move.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -53,13 +53,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = std::move(c0);
@@ -97,7 +97,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -113,13 +113,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(10)
            );
         C::iterator it0 = c0.begin();
@@ -159,7 +159,7 @@ int main(int, char**)
         typedef other_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -175,13 +175,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         C::iterator it0 = c0.begin();
@@ -221,7 +221,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string> > A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -237,13 +237,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         C::iterator it0 = c0.begin();

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy.pass.cpp
index 08b9a858c3607..bd10f3f7a6aee 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -50,7 +50,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C c = c0;
@@ -68,7 +68,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(!c.empty());
@@ -81,7 +81,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    other_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -97,7 +97,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             other_allocator<std::pair<const int, std::string> >(10)
            );
         C c = c0;
@@ -115,7 +115,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (other_allocator<std::pair<const int, std::string> >(-2)));
         assert(!c.empty());
@@ -127,7 +127,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -143,7 +143,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C c = c0;
@@ -161,7 +161,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc.pass.cpp
index a3734f53d6f21..e39b863bec87f 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -50,7 +50,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C c(c0, test_allocator<std::pair<const int, std::string> >(5));
@@ -68,7 +68,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(5)));
         assert(!c.empty());
@@ -81,7 +81,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -97,7 +97,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C c(c0, min_allocator<std::pair<const int, std::string> >());
@@ -115,7 +115,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(!c.empty());
@@ -128,7 +128,7 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -144,7 +144,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         C c(c0, A{});
@@ -162,7 +162,7 @@ int main(int, char**)
         s.insert("four");
         CheckConsecutiveKeys<C::const_iterator>(c.find(4), c.end(), 4, s);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/default.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/default.pass.cpp
index dea7a46043839..8a537846e9ed5 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/default.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/default.pass.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -69,14 +69,14 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const NotConstructible, NotConstructible>> A;
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         {
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == A());
         assert(c.size() == 0);
         assert(c.empty());
@@ -89,7 +89,7 @@ int main(int, char**)
         C c(a);
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == a);
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init.pass.cpp
index 832bc4f90b7b6..31f51cd0f2390 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -78,13 +78,13 @@ int main(int, char**)
         assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -126,7 +126,7 @@ int main(int, char**)
         assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 #if TEST_STD_VER > 11
@@ -134,7 +134,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_multimap<int, std::string, HF, Comp, A> C;
 
         A a(42);
@@ -184,7 +184,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_multimap<int, std::string, HF, Comp, A> C;
 
         HF hf(42);

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size.pass.cpp
index 6f3a32c79298f..5d22b2571225a 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -80,13 +80,13 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -130,7 +130,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash.pass.cpp
index aa5ee727fa13c..76745cf2a62e1 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -81,13 +81,13 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -132,7 +132,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal.pass.cpp
index 02c6b71e2df64..3a7492d2127a6 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -51,7 +51,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -83,13 +83,13 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -103,7 +103,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -135,7 +135,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator.pass.cpp
index b5c617e851a98..03529970958f9 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -51,7 +51,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -84,13 +84,13 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(10)));
     }
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -104,7 +104,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -137,14 +137,14 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
     {
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -158,7 +158,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -191,7 +191,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
     }
 

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move.pass.cpp
index d61d58a5ea61f..2611976e15527 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move.pass.cpp
@@ -36,20 +36,20 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
 
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C c = std::move(c0);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const int, std::string> >(10)));
         assert(c.empty());
@@ -63,7 +63,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -79,7 +79,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         C::iterator it0 = c0.begin();
@@ -115,7 +115,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(10)));
 
         assert(c0.empty());
@@ -123,19 +123,19 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C c = std::move(c0);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const int, std::string> >()));
         assert(c.empty());
@@ -149,7 +149,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -165,7 +165,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         C::iterator it0 = c0.begin();
@@ -201,7 +201,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
 
         assert(c0.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc.pass.cpp
index 519b429a7b53d..e103eed455de4 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -53,7 +53,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(12));
@@ -87,7 +87,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(12)));
 
         assert(c0.empty());
@@ -97,7 +97,7 @@ int main(int, char**)
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -112,7 +112,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(10));
@@ -146,7 +146,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(10)));
 
         assert(c0.empty());
@@ -156,7 +156,7 @@ int main(int, char**)
         typedef min_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -171,7 +171,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(std::move(c0), A());
@@ -205,7 +205,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
 
         assert(c0.empty());
@@ -215,7 +215,7 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -230,7 +230,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         C c(std::move(c0), A());
@@ -264,7 +264,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
 
         assert(c0.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp
index a6055720aa222..4f2105804dd9d 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -81,14 +81,14 @@ int main(int, char**)
         assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
 #if TEST_STD_VER >= 11
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -132,7 +132,7 @@ int main(int, char**)
         assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 #if TEST_STD_VER > 11
@@ -140,7 +140,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_multimap<int, std::string, HF, Comp, A> C;
 
         P arr[] =
@@ -192,7 +192,7 @@ int main(int, char**)
         typedef std::pair<int, std::string> P;
         typedef test_allocator<std::pair<const int, std::string>> A;
         typedef test_hash<std::hash<int>> HF;
-        typedef test_compare<std::equal_to<int>> Comp;
+        typedef test_equal_to<int> Comp;
         typedef std::unordered_multimap<int, std::string, HF, Comp, A> C;
 
         P arr[] =

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp
index a670895a526e2..045b928a17a40 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp
@@ -37,7 +37,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -83,14 +83,14 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
 #if TEST_STD_VER >= 11
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -136,7 +136,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 #endif

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp
index 39fe55d7038ee..609c0bd48eacc 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -85,14 +85,14 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
 #if TEST_STD_VER >= 11
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -139,7 +139,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 #endif

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp
index d93a063873b89..d90cb0d46972a 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp
@@ -38,7 +38,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -54,7 +54,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -86,14 +86,14 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >()));
     }
 #if TEST_STD_VER >= 11
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -109,7 +109,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -141,7 +141,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
 #endif

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp
index f20f8f13bf3db..60515ce23a9bf 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp
@@ -39,7 +39,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -55,7 +55,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<std::pair<const int, std::string> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -88,14 +88,14 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >(10)));
     }
 #if TEST_STD_VER >= 11
     {
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<std::pair<const int, std::string> >
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -111,7 +111,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<std::pair<const int, std::string> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -144,14 +144,14 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >()));
     }
     {
         typedef explicit_allocator<std::pair<const int, std::string>> A;
         typedef std::unordered_multimap<int, std::string,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef std::pair<int, std::string> P;
@@ -167,7 +167,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A{}
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -200,7 +200,7 @@ int main(int, char**)
         assert(std::fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
         assert(c.max_load_factor() == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A{});
     }
 #endif

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.compile.fail.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.compile.fail.cpp
index 122e3aec33fbd..38afd227504fd 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.compile.fail.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.compile.fail.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.pass.cpp
index 9b58de89d9fae..824e72f9cd528 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size.pass.cpp
@@ -29,14 +29,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -49,14 +49,14 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash.pass.cpp
index 8dceccf591406..d9cf11d3819de 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
@@ -38,7 +38,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -51,7 +51,7 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
@@ -60,7 +60,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal.pass.cpp
index 5d32ec29bab4f..0aad720e842d2 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal.pass.cpp
@@ -29,17 +29,17 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -52,17 +52,17 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator.pass.cpp
index 254d89d99b5ae..11da1f6635e66 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator.pass.cpp
@@ -29,18 +29,18 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<std::pair<const NotConstructible,
                                                                   NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)));
         assert(c.size() == 0);
@@ -53,18 +53,18 @@ int main(int, char**)
     {
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<std::pair<const NotConstructible,
                                                                  NotConstructible> >
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             min_allocator<std::pair<const NotConstructible, NotConstructible> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() ==
                (min_allocator<std::pair<const NotConstructible, NotConstructible> >()));
         assert(c.size() == 0);
@@ -77,17 +77,17 @@ int main(int, char**)
         typedef explicit_allocator<std::pair<const NotConstructible, NotConstructible> > A;
         typedef std::unordered_multimap<NotConstructible, NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             A{}
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == A{});
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
index 1d0532fcb644a..74800dbc11328 100644
--- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
@@ -31,7 +31,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -59,7 +59,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -109,7 +109,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -158,7 +158,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -229,7 +229,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -257,7 +257,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -305,7 +305,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -352,7 +352,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -419,7 +419,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -447,7 +447,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -495,7 +495,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;
@@ -542,7 +542,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<std::pair<const int, std::string> > Alloc;
         typedef std::unordered_multimap<int, std::string, Hash, Compare, Alloc> C;
         typedef std::pair<int, std::string> P;

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp
index bad8df9d9f09c..36cdce8112cc8 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp
@@ -28,7 +28,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -56,7 +56,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -104,7 +104,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -146,7 +146,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -208,7 +208,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -236,7 +236,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -284,7 +284,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -326,7 +326,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -388,7 +388,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -416,7 +416,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -464,7 +464,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -506,7 +506,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/allocator.pass.cpp
index 2a3b867b5e0aa..4b881387b2d3e 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/allocator.pass.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(test_allocator<NotConstructible>(10));
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == test_allocator<NotConstructible>(10));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(min_allocator<NotConstructible>{});
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == min_allocator<NotConstructible>());
         assert(c.size() == 0);
         assert(c.empty());
@@ -65,7 +65,7 @@ int main(int, char**)
     {
         typedef NotConstructible T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_multiset<T, HF, Comp, A> C;
 
@@ -85,7 +85,7 @@ int main(int, char**)
     {
         typedef NotConstructible T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_multiset<T, HF, Comp, A> C;
 

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp
index 1f8cc68b38235..9f3b9450bab41 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -50,13 +50,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -67,7 +67,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -98,7 +98,7 @@ int main(int, char**)
         typedef other_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -114,13 +114,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -131,7 +131,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -144,7 +144,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -160,13 +160,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         c = c0;
@@ -177,7 +177,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_init.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_init.pass.cpp
index bcf5e72bdfdd5..9a58ae46d002a 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_init.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -66,7 +66,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp
index 26c9c592927cf..6ac7268172851 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -51,13 +51,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = std::move(c0);
@@ -68,7 +68,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -80,7 +80,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -96,13 +96,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(10)
            );
         C::iterator it0 = c0.begin();
@@ -114,7 +114,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -127,7 +127,7 @@ int main(int, char**)
         typedef other_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -143,13 +143,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         C::iterator it0 = c0.begin();
@@ -161,7 +161,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -174,7 +174,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -190,13 +190,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         C::iterator it0 = c0.begin();
@@ -208,7 +208,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -221,7 +221,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -237,13 +237,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         C::iterator it0 = c0.begin();
@@ -255,7 +255,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp
index aa2edf1de4415..0186894472d01 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp
@@ -32,7 +32,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -48,7 +48,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C c = c0;
@@ -59,7 +59,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -71,7 +71,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    other_allocator<int>
                                    > C;
         typedef int P;
@@ -87,7 +87,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             other_allocator<int>(10)
            );
         C c = c0;
@@ -98,7 +98,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == other_allocator<int>(-2));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -109,7 +109,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -125,7 +125,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C c = c0;
@@ -136,7 +136,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp
index d0579292af401..04cc13b007178 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp
@@ -32,7 +32,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -48,7 +48,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C c(c0, test_allocator<int>(5));
@@ -59,7 +59,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(5));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -71,7 +71,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -87,7 +87,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C c(c0, min_allocator<int>());
@@ -98,7 +98,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/default.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/default.pass.cpp
index bb762b576caa6..15508889c506d 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/default.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/default.pass.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -65,14 +65,14 @@ int main(int, char**)
         typedef explicit_allocator<NotConstructible> A;
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         {
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == A());
         assert(c.size() == 0);
         assert(c.empty());
@@ -85,7 +85,7 @@ int main(int, char**)
         C c(a);
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == a);
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init.pass.cpp
index 941ca8d66c4ea..991f50c5c4661 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -52,7 +52,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -63,7 +63,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -82,7 +82,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -94,7 +94,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_multiset<T, HF, Comp, A> C;
 
@@ -127,7 +127,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_multiset<T, HF, Comp, A> C;
 

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size.pass.cpp
index e2ab6d571adb7..6bf5b30f49504 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -54,7 +54,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -65,7 +65,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -86,7 +86,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash.pass.cpp
index 796d2f0db15a8..ca9f4cc6a8723 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -56,7 +56,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -67,7 +67,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -89,7 +89,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal.pass.cpp
index 8500c8ea6f47e..d235b44dde472 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -48,7 +48,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -57,7 +57,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -82,7 +82,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -91,7 +91,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator.pass.cpp
index 9deb0010263fd..bccbc770439a9 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -48,7 +48,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -69,7 +69,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -83,7 +83,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -93,7 +93,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move.pass.cpp
index fa02494c19cc1..0eff5c9062cf0 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move.pass.cpp
@@ -33,19 +33,19 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C c = std::move(c0);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -58,7 +58,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -74,7 +74,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C::iterator it0 = c0.begin();
@@ -87,7 +87,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -100,19 +100,19 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C c = std::move(c0);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -125,7 +125,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -141,7 +141,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C::iterator it0 = c0.begin();
@@ -154,7 +154,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp
index 6153c713eeef4..51a824aa6dfb6 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp
@@ -36,7 +36,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -51,7 +51,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(12));
@@ -62,7 +62,7 @@ int main(int, char**)
         CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
         CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(12));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -77,7 +77,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -92,7 +92,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(10));
@@ -103,7 +103,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -118,7 +118,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -133,7 +133,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(std::move(c0), A());
@@ -144,7 +144,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -159,7 +159,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -174,7 +174,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(std::move(c0), A());
@@ -185,7 +185,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range.pass.cpp
index 23a2e07ecfdc6..316ec1aeb16c7 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -54,7 +54,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -66,7 +66,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -87,7 +87,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -99,7 +99,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_multiset<T, HF, Comp, A> C;
         T arr[] =
@@ -132,7 +132,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_multiset<T, HF, Comp, A> C;
         T arr[] =

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size.pass.cpp
index 057334c158d8c..0b7b60a6de01c 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -56,7 +56,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -91,7 +91,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash.pass.cpp
index abf21780e266c..f65860bd6d126 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -70,7 +70,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -94,7 +94,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal.pass.cpp
index 829cf909d50b4..72a6412517cc9 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -50,7 +50,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -59,7 +59,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -71,7 +71,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -87,7 +87,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 6);
@@ -96,7 +96,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator.pass.cpp
index d1b625daab0b6..9bbb338c4b5f7 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -51,7 +51,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -61,7 +61,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -73,7 +73,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -89,7 +89,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -99,7 +99,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.compile.fail.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.compile.fail.cpp
index 45d67f33a61c8..6c47080015056 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.compile.fail.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.compile.fail.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.pass.cpp
index ba32ec3705587..16ec4e3caee58 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size.pass.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash.pass.cpp
index 47d0867f0f944..d8070b01559a1 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7,
@@ -37,7 +37,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -49,7 +49,7 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7,
@@ -57,7 +57,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal.pass.cpp
index f9cc2503b68a5..26612a0345ef2 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal.pass.cpp
@@ -29,16 +29,16 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -50,16 +50,16 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator.pass.cpp
index 8e25bf00e21ff..bc7cb12a73c80 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator.pass.cpp
@@ -29,17 +29,17 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             test_allocator<std::pair<const NotConstructible, NotConstructible> >(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (test_allocator<NotConstructible>(10)));
         assert(c.size() == 0);
         assert(c.empty());
@@ -51,17 +51,17 @@ int main(int, char**)
     {
         typedef std::unordered_multiset<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             min_allocator<std::pair<const NotConstructible, NotConstructible> >()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp
index 5b5a4cd37392f..b7691cfc30c5f 100644
--- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp
@@ -28,7 +28,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -56,7 +56,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -106,7 +106,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -150,7 +150,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -216,7 +216,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -244,7 +244,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -292,7 +292,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -334,7 +334,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -396,7 +396,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -424,7 +424,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -472,7 +472,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -514,7 +514,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
         typedef int P;

diff  --git a/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp
index 0877b14f763f2..17193a9272b5b 100644
--- a/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp
@@ -28,7 +28,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -56,7 +56,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -104,7 +104,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -146,7 +146,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -208,7 +208,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -236,7 +236,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -284,7 +284,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -326,7 +326,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -388,7 +388,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -416,7 +416,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -464,7 +464,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -506,7 +506,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/allocator.pass.cpp
index 920244aae8242..127f5d7fe7ad5 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/allocator.pass.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(test_allocator<NotConstructible>(10));
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == test_allocator<NotConstructible>(10));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(min_allocator<NotConstructible>{});
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == min_allocator<NotConstructible>());
         assert(c.size() == 0);
         assert(c.empty());
@@ -65,7 +65,7 @@ int main(int, char**)
     {
         typedef NotConstructible T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_set<T, HF, Comp, A> C;
 
@@ -85,7 +85,7 @@ int main(int, char**)
     {
         typedef NotConstructible T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_set<T, HF, Comp, A> C;
 

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_copy.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_copy.pass.cpp
index 10952954284ea..703ec03a82ec7 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_copy.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -49,13 +49,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -66,7 +66,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -96,7 +96,7 @@ int main(int, char**)
         typedef other_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -112,13 +112,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = c0;
@@ -129,7 +129,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -142,7 +142,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -158,13 +158,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         c = c0;
@@ -175,7 +175,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_init.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_init.pass.cpp
index 3b8c0d5a459be..eecce7e4e5fd8 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_init.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -66,7 +66,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_move.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_move.pass.cpp
index 1edbe0b9174cf..4d64d47944329 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/assign_move.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -50,13 +50,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         c = std::move(c0);
@@ -67,7 +67,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(4));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -79,7 +79,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -95,13 +95,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(10)
            );
         C::iterator it0 = c0.begin();
@@ -113,7 +113,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -126,7 +126,7 @@ int main(int, char**)
         typedef other_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -142,13 +142,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A(4)
            );
         C::iterator it0 = c0.begin();
@@ -160,7 +160,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -173,7 +173,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         typedef int P;
@@ -189,13 +189,13 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(a, a + 2,
             7,
             test_hash<std::hash<int> >(2),
-            test_compare<std::equal_to<int> >(3),
+            test_equal_to<int>(3),
             A()
            );
         C::iterator it0 = c0.begin();
@@ -207,7 +207,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy.pass.cpp
index 179e6e473c8f1..dfc3bebf0e912 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy.pass.cpp
@@ -31,7 +31,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -47,7 +47,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C c = c0;
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -70,7 +70,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    other_allocator<int>
                                    > C;
         typedef int P;
@@ -86,7 +86,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             other_allocator<int>(10)
            );
         C c = c0;
@@ -97,7 +97,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == other_allocator<int>(-2));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -108,7 +108,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -124,7 +124,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C c = c0;
@@ -135,7 +135,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy_alloc.pass.cpp
index 970da08771742..653bf10459c29 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/copy_alloc.pass.cpp
@@ -31,7 +31,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -47,7 +47,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C c(c0, test_allocator<int>(5));
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(5));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -70,7 +70,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -86,7 +86,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C c(c0, min_allocator<int>());
@@ -97,7 +97,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/default.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/default.pass.cpp
index 1fa2932e5a52e..a4fd3ffee8339 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/default.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/default.pass.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -65,14 +65,14 @@ int main(int, char**)
         typedef explicit_allocator<NotConstructible> A;
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    A
                                    > C;
         {
         C c;
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == A());
         assert(c.size() == 0);
         assert(c.empty());
@@ -85,7 +85,7 @@ int main(int, char**)
         C c(a);
         LIBCPP_ASSERT(c.bucket_count() == 0);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == a);
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init.pass.cpp
index 45d386711f768..a33204f5e89f0 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
   {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -52,7 +52,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -63,7 +63,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -82,7 +82,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -94,7 +94,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_set<T, HF, Comp, A> C;
 
@@ -127,7 +127,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_set<T, HF, Comp, A> C;
 

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size.pass.cpp
index 20ecaed23ec1f..368ea120f37da 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -54,7 +54,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -65,7 +65,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -86,7 +86,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash.pass.cpp
index fa2cc17451a00..68951ddea032a 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -56,7 +56,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -67,7 +67,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -89,7 +89,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal.pass.cpp
index 8a13e56e6a021..cf2e3cfaf8ab4 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -48,7 +48,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -57,7 +57,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -82,7 +82,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -91,7 +91,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator.pass.cpp
index fc36ad00a57e4..a75baba080471 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -48,7 +48,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -69,7 +69,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -83,7 +83,7 @@ int main(int, char**)
             },
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -93,7 +93,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move.pass.cpp
index dd3822e2ff3af..16aced4cd5c25 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move.pass.cpp
@@ -33,19 +33,19 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C c = std::move(c0);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -58,7 +58,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -74,7 +74,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         C::iterator it0 = c0.begin();
@@ -87,7 +87,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -100,19 +100,19 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         C c0(7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C c = std::move(c0);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 0);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -125,7 +125,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -141,7 +141,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         C::iterator it0 = c0.begin();
@@ -154,7 +154,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move_alloc.pass.cpp
index 81423f224afa2..8f518b8c507ad 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move_alloc.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/move_alloc.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -50,7 +50,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(12));
@@ -61,7 +61,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(12));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -76,7 +76,7 @@ int main(int, char**)
         typedef test_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -91,7 +91,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A(10)
            );
         C c(std::move(c0), A(10));
@@ -102,7 +102,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -117,7 +117,7 @@ int main(int, char**)
         typedef min_allocator<int> A;
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    A
                                    > C;
         P a[] =
@@ -132,7 +132,7 @@ int main(int, char**)
         C c0(a, a + sizeof(a)/sizeof(a[0]),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             A()
            );
         C c(std::move(c0), A());
@@ -143,7 +143,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == A());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range.pass.cpp
index d323468710c29..a1a8c8b8b077a 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -54,7 +54,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -66,7 +66,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -87,7 +87,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -99,7 +99,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_set<T, HF, Comp, A> C;
         T arr[] =
@@ -132,7 +132,7 @@ int main(int, char**)
     {
         typedef int T;
         typedef test_hash<std::hash<T>> HF;
-        typedef test_compare<std::equal_to<T>> Comp;
+        typedef test_equal_to<T> Comp;
         typedef test_allocator<T> A;
         typedef std::unordered_set<T, HF, Comp, A> C;
         T arr[] =

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size.pass.cpp
index f6f1e3ba8d3aa..252d902ab5d71 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size.pass.cpp
@@ -33,7 +33,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -56,7 +56,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -68,7 +68,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -91,7 +91,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >());
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash.pass.cpp
index 6c50df5f0e302..26e3d2e42baa0 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -58,7 +58,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -70,7 +70,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -94,7 +94,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >());
+        assert(c.key_eq() == test_equal_to<int>());
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal.pass.cpp
index 932823e53993d..745abee271037 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal.pass.cpp
@@ -34,7 +34,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -50,7 +50,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -59,7 +59,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -71,7 +71,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -87,7 +87,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9)
+            test_equal_to<int>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.size() == 4);
@@ -96,7 +96,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator.pass.cpp
index 3db984819fa77..d7e0b8c311e69 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator.pass.cpp
@@ -35,7 +35,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    test_allocator<int>
                                    > C;
         typedef int P;
@@ -51,7 +51,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             test_allocator<int>(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -61,7 +61,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == test_allocator<int>(10));
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
@@ -73,7 +73,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<int,
                                    test_hash<std::hash<int> >,
-                                   test_compare<std::equal_to<int> >,
+                                   test_equal_to<int>,
                                    min_allocator<int>
                                    > C;
         typedef int P;
@@ -89,7 +89,7 @@ int main(int, char**)
         C c(cpp17_input_iterator<P*>(a), cpp17_input_iterator<P*>(a + sizeof(a)/sizeof(a[0])),
             7,
             test_hash<std::hash<int> >(8),
-            test_compare<std::equal_to<int> >(9),
+            test_equal_to<int>(9),
             min_allocator<int>()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
@@ -99,7 +99,7 @@ int main(int, char**)
         assert(c.count(3) == 1);
         assert(c.count(4) == 1);
         assert(c.hash_function() == test_hash<std::hash<int> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
+        assert(c.key_eq() == test_equal_to<int>(9));
         assert(c.get_allocator() == min_allocator<int>());
         assert(!c.empty());
         assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.compile.fail.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.compile.fail.cpp
index da3dc1855774a..2f7aace774638 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.compile.fail.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.compile.fail.cpp
@@ -28,13 +28,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c = 7;
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.pass.cpp
index 12ba6201a1b5e..37aaedb0333e0 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size.pass.cpp
@@ -29,13 +29,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -47,13 +47,13 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7);
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >());
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash.pass.cpp
index 60134b7fad2ac..e5146bda73fd4 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash.pass.cpp
@@ -29,7 +29,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7,
@@ -37,7 +37,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -49,7 +49,7 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7,
@@ -57,7 +57,7 @@ int main(int, char**)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >());
+        assert(c.key_eq() == test_equal_to<NotConstructible>());
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal.pass.cpp
index 49e12ea29d9cc..af057db315c51 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal.pass.cpp
@@ -29,16 +29,16 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (test_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());
@@ -50,16 +50,16 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9)
+            test_equal_to<NotConstructible>(9)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator.pass.cpp
index 43eb1f7170365..1885fffa4ba6d 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator.pass.cpp
@@ -29,17 +29,17 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    test_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             test_allocator<NotConstructible>(10)
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (test_allocator<NotConstructible>(10)));
         assert(c.size() == 0);
         assert(c.empty());
@@ -51,17 +51,17 @@ int main(int, char**)
     {
         typedef std::unordered_set<NotConstructible,
                                    test_hash<std::hash<NotConstructible> >,
-                                   test_compare<std::equal_to<NotConstructible> >,
+                                   test_equal_to<NotConstructible>,
                                    min_allocator<NotConstructible>
                                    > C;
         C c(7,
             test_hash<std::hash<NotConstructible> >(8),
-            test_compare<std::equal_to<NotConstructible> >(9),
+            test_equal_to<NotConstructible>(9),
             min_allocator<NotConstructible>()
            );
         LIBCPP_ASSERT(c.bucket_count() == 7);
         assert(c.hash_function() == test_hash<std::hash<NotConstructible> >(8));
-        assert(c.key_eq() == test_compare<std::equal_to<NotConstructible> >(9));
+        assert(c.key_eq() == test_equal_to<NotConstructible>(9));
         assert(c.get_allocator() == (min_allocator<NotConstructible>()));
         assert(c.size() == 0);
         assert(c.empty());

diff  --git a/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp
index c128bd5fb6922..ebed1f090ecf5 100644
--- a/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp
+++ b/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp
@@ -28,7 +28,7 @@ int main(int, char**)
 {
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1, 1));
@@ -56,7 +56,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -106,7 +106,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -150,7 +150,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef test_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -216,7 +216,7 @@ int main(int, char**)
 
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc(1));
@@ -244,7 +244,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -292,7 +292,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -334,7 +334,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef other_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -396,7 +396,7 @@ int main(int, char**)
 #if TEST_STD_VER >= 11
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         C c1(0, Hash(1), Compare(1), Alloc());
@@ -424,7 +424,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -472,7 +472,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;
@@ -514,7 +514,7 @@ int main(int, char**)
     }
     {
         typedef test_hash<std::hash<int> > Hash;
-        typedef test_compare<std::equal_to<int> > Compare;
+        typedef test_equal_to<int> Compare;
         typedef min_allocator<int> Alloc;
         typedef std::unordered_set<int, Hash, Compare, Alloc> C;
         typedef int P;

diff  --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
index 5d25bd78e13e0..ca243b42702b8 100644
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
+++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
@@ -45,16 +45,13 @@ void test_disabled_with_deleter() {
   test_hash_disabled_for_type<pointer>();
 }
 
-namespace std {
-
 template <class T>
-struct hash<::min_pointer<T, std::integral_constant<size_t, 1>>> {
-  size_t operator()(::min_pointer<T, std::integral_constant<size_t, 1>> p) const TEST_NOEXCEPT_FALSE {
+struct std::hash<min_pointer<T, std::integral_constant<size_t, 1>>> {
+  size_t operator()(min_pointer<T, std::integral_constant<size_t, 1>> p) const TEST_NOEXCEPT_FALSE {
     if (!p) return 0;
     return std::hash<T*>{}(std::addressof(*p));
   }
 };
-}
 
 struct A {};
 

diff  --git a/libcxx/test/support/min_allocator.h b/libcxx/test/support/min_allocator.h
index 8f636c694ee53..0cf050eb96dcc 100644
--- a/libcxx/test/support/min_allocator.h
+++ b/libcxx/test/support/min_allocator.h
@@ -372,42 +372,14 @@ class min_pointer<const T, ID>
     static TEST_CONSTEXPR_CXX14 min_pointer pointer_to(const T& t) {return min_pointer(std::addressof(t));}
 
     friend TEST_CONSTEXPR_CXX14 bool operator==(min_pointer x, min_pointer y) {return x.ptr_ == y.ptr_;}
-    friend TEST_CONSTEXPR_CXX14 bool operator!=(min_pointer x, min_pointer y) {return !(x == y);}
+    friend TEST_CONSTEXPR_CXX14 bool operator!=(min_pointer x, min_pointer y) {return x.ptr_ != y.ptr_;}
+    friend TEST_CONSTEXPR_CXX14 bool operator==(min_pointer x, std::nullptr_t) {return x.ptr_ == nullptr;}
+    friend TEST_CONSTEXPR_CXX14 bool operator!=(min_pointer x, std::nullptr_t) {return x.ptr_ != nullptr;}
+    friend TEST_CONSTEXPR_CXX14 bool operator==(std::nullptr_t, min_pointer x) {return x.ptr_ == nullptr;}
+    friend TEST_CONSTEXPR_CXX14 bool operator!=(std::nullptr_t, min_pointer x) {return x.ptr_ != nullptr;}
     template <class U, class XID> friend class min_pointer;
 };
 
-template <class T, class ID>
-TEST_CONSTEXPR_CXX14 inline
-bool
-operator==(min_pointer<T, ID> x, std::nullptr_t)
-{
-    return !static_cast<bool>(x);
-}
-
-template <class T, class ID>
-TEST_CONSTEXPR_CXX14 inline
-bool
-operator==(std::nullptr_t, min_pointer<T, ID> x)
-{
-    return !static_cast<bool>(x);
-}
-
-template <class T, class ID>
-TEST_CONSTEXPR_CXX14 inline
-bool
-operator!=(min_pointer<T, ID> x, std::nullptr_t)
-{
-    return static_cast<bool>(x);
-}
-
-template <class T, class ID>
-TEST_CONSTEXPR_CXX14 inline
-bool
-operator!=(std::nullptr_t, min_pointer<T, ID> x)
-{
-    return static_cast<bool>(x);
-}
-
 template <class T>
 class min_allocator
 {


        


More information about the libcxx-commits mailing list