Implement N3421; comparison predicates<void>

llvm-svn: 187357
diff --git a/libcxx/test/utilities/function.objects/comparisons/equal_to.pass.cpp b/libcxx/test/utilities/function.objects/comparisons/equal_to.pass.cpp
index 988e957..7904887 100644
--- a/libcxx/test/utilities/function.objects/comparisons/equal_to.pass.cpp
+++ b/libcxx/test/utilities/function.objects/comparisons/equal_to.pass.cpp
@@ -22,4 +22,12 @@
     static_assert((std::is_base_of<std::binary_function<int, int, bool>, F>::value), "");
     assert(f(36, 36));
     assert(!f(36, 6));
+#if _LIBCPP_STD_VER > 11
+    typedef std::equal_to<> F2;
+    const F2 f2 = F2();
+    assert(f2(36, 36));
+    assert(!f2(36, 6));
+    assert(f2(36, 36.0));
+    assert(f2(36.0, 36L));
+#endif
 }
diff --git a/libcxx/test/utilities/function.objects/comparisons/greater.pass.cpp b/libcxx/test/utilities/function.objects/comparisons/greater.pass.cpp
index 2cadd6d..8e9a891 100644
--- a/libcxx/test/utilities/function.objects/comparisons/greater.pass.cpp
+++ b/libcxx/test/utilities/function.objects/comparisons/greater.pass.cpp
@@ -23,4 +23,15 @@
     assert(!f(36, 36));
     assert(f(36, 6));
     assert(!f(6, 36));
+#if _LIBCPP_STD_VER > 11
+    typedef std::greater<> F2;
+    const F2 f2 = F2();
+    assert(!f2(36, 36));
+    assert(f2(36, 6));
+    assert(!f2(6, 36));
+    assert( f2(36, 6.0));
+    assert( f2(36.0, 6));
+    assert(!f2(6, 36.0));
+    assert(!f2(6.0, 36));
+#endif
 }
diff --git a/libcxx/test/utilities/function.objects/comparisons/greater_equal.pass.cpp b/libcxx/test/utilities/function.objects/comparisons/greater_equal.pass.cpp
index 3ecadd4..63aad67 100644
--- a/libcxx/test/utilities/function.objects/comparisons/greater_equal.pass.cpp
+++ b/libcxx/test/utilities/function.objects/comparisons/greater_equal.pass.cpp
@@ -23,4 +23,15 @@
     assert(f(36, 36));
     assert(f(36, 6));
     assert(!f(6, 36));
+#if _LIBCPP_STD_VER > 11
+    typedef std::greater_equal<> F2;
+    const F2 f2 = F2();
+    assert(f2(36, 36));
+    assert(f2(36, 6));
+    assert(!f2(6, 36));
+    assert( f2(36, 6.0));
+    assert( f2(36.0, 6));
+    assert(!f2(6, 36.0));
+    assert(!f2(6.0, 36));
+#endif
 }
diff --git a/libcxx/test/utilities/function.objects/comparisons/less.pass.cpp b/libcxx/test/utilities/function.objects/comparisons/less.pass.cpp
index 0946bbf..6060964 100644
--- a/libcxx/test/utilities/function.objects/comparisons/less.pass.cpp
+++ b/libcxx/test/utilities/function.objects/comparisons/less.pass.cpp
@@ -23,4 +23,15 @@
     assert(!f(36, 36));
     assert(!f(36, 6));
     assert(f(6, 36));
+#if _LIBCPP_STD_VER > 11
+    typedef std::less<> F2;
+    const F2 f2 = F2();
+    assert(!f2(36, 36));
+    assert(!f2(36, 6));
+    assert( f2(6, 36));
+    assert(!f2(36, 6.0));
+    assert(!f2(36.0, 6));
+    assert( f2(6, 36.0));
+    assert( f2(6.0, 36));
+#endif
 }
diff --git a/libcxx/test/utilities/function.objects/comparisons/less_equal.pass.cpp b/libcxx/test/utilities/function.objects/comparisons/less_equal.pass.cpp
index 818af4a..346e68b 100644
--- a/libcxx/test/utilities/function.objects/comparisons/less_equal.pass.cpp
+++ b/libcxx/test/utilities/function.objects/comparisons/less_equal.pass.cpp
@@ -23,4 +23,15 @@
     assert(f(36, 36));
     assert(!f(36, 6));
     assert(f(6, 36));
+#if _LIBCPP_STD_VER > 11
+    typedef std::less_equal<> F2;
+    const F2 f2 = F2();
+    assert( f2(36, 36));
+    assert(!f2(36, 6));
+    assert( f2(6, 36));
+    assert(!f2(36, 6.0));
+    assert(!f2(36.0, 6));
+    assert( f2(6, 36.0));
+    assert( f2(6.0, 36));
+#endif
 }
diff --git a/libcxx/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp b/libcxx/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp
index 0b8f8dd..d481e47 100644
--- a/libcxx/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp
+++ b/libcxx/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp
@@ -22,4 +22,14 @@
     static_assert((std::is_base_of<std::binary_function<int, int, bool>, F>::value), "");
     assert(!f(36, 36));
     assert(f(36, 6));
+#if _LIBCPP_STD_VER > 11
+    typedef std::not_equal_to<> F2;
+    const F2 f2 = F2();
+    assert(!f2(36, 36));
+    assert( f2(36, 6));
+    assert( f2(36, 6.0));
+    assert( f2(36.0, 6));
+    assert(!f2(36.0, 36));
+    assert(!f2(36, 36.0));
+#endif
 }