Implement C++17 <variant>. Patch from Michael Park!

This patch was reviewed as https://reviews.llvm.org/D23263.

llvm-svn: 288547
diff --git a/libcxx/test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp b/libcxx/test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp
index f430a66..49abba2 100644
--- a/libcxx/test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp
@@ -19,6 +19,7 @@
 // constexpr bool operator==(monostate, monostate) noexcept { return true; }
 // constexpr bool operator!=(monostate, monostate) noexcept { return false; }
 
+#include "test_macros.h"
 #include <cassert>
 #include <type_traits>
 #include <variant>
@@ -29,26 +30,26 @@
   constexpr M m2{};
   {
     static_assert((m1 < m2) == false, "");
-    static_assert(noexcept(m1 < m2), "");
+    ASSERT_NOEXCEPT(m1 < m2);
   }
   {
     static_assert((m1 > m2) == false, "");
-    static_assert(noexcept(m1 > m2), "");
+    ASSERT_NOEXCEPT(m1 > m2);
   }
   {
     static_assert((m1 <= m2) == true, "");
-    static_assert(noexcept(m1 <= m2), "");
+    ASSERT_NOEXCEPT(m1 <= m2);
   }
   {
     static_assert((m1 >= m2) == true, "");
-    static_assert(noexcept(m1 >= m2), "");
+    ASSERT_NOEXCEPT(m1 >= m2);
   }
   {
     static_assert((m1 == m2) == true, "");
-    static_assert(noexcept(m1 == m2), "");
+    ASSERT_NOEXCEPT(m1 == m2);
   }
   {
     static_assert((m1 != m2) == false, "");
-    static_assert(noexcept(m1 != m2), "");
+    ASSERT_NOEXCEPT(m1 != m2);
   }
 }