Fixes for LWG 2598, 2686, 2739, 2742, 2747, and 2759, which were adopted last week in Issaquah

llvm-svn: 286858
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp
new file mode 100644
index 0000000..cc821e1
--- /dev/null
+++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// 
+// UNSUPPORTED: c++98, c++03, c++11, c++14
+// <numeric>
+
+// template<class _M, class _N>
+// constexpr common_type_t<_M,_N> gcd(_M __m, _N __n)
+
+// Remarks: If either M or N is not an integer type, 
+// or if either is (a possibly cv-qualified) bool, the program is ill-formed.
+
+#include <numeric>
+
+
+int main()
+{
+    std::gcd(false, 4);
+}
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp
new file mode 100644
index 0000000..1e5ee25
--- /dev/null
+++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// 
+// UNSUPPORTED: c++98, c++03, c++11, c++14
+// <numeric>
+
+// template<class _M, class _N>
+// constexpr common_type_t<_M,_N> gcd(_M __m, _N __n)
+
+// Remarks: If either M or N is not an integer type, 
+// or if either is (a possibly cv-qualified) bool, the program is ill-formed.
+
+#include <numeric>
+
+
+int main()
+{
+    std::gcd(2, true);
+}
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp
new file mode 100644
index 0000000..76d1030
--- /dev/null
+++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// 
+// UNSUPPORTED: c++98, c++03, c++11, c++14
+// <numeric>
+
+// template<class _M, class _N>
+// constexpr common_type_t<_M,_N> gcd(_M __m, _N __n)
+
+// Remarks: If either M or N is not an integer type, 
+// or if either is (a possibly cv-qualified) bool, the program is ill-formed.
+
+#include <numeric>
+
+
+int main()
+{
+    std::gcd<volatile bool, int>(false, 4);
+}
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp
new file mode 100644
index 0000000..2c685c9
--- /dev/null
+++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// 
+// UNSUPPORTED: c++98, c++03, c++11, c++14
+// <numeric>
+
+// template<class _M, class _N>
+// constexpr common_type_t<_M,_N> gcd(_M __m, _N __n)
+
+// Remarks: If either M or N is not an integer type, 
+// or if either is (a possibly cv-qualified) bool, the program is ill-formed.
+
+#include <numeric>
+
+
+int main()
+{
+    std::gcd<int, const bool>(2, true);
+}
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral1.fail.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral1.fail.cpp
index 585e40b..0707eca 100644
--- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral1.fail.cpp
+++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral1.fail.cpp
@@ -13,7 +13,8 @@
 // template<class _M, class _N>
 // constexpr common_type_t<_M,_N> gcd(_M __m, _N __n)
 
-// Remarks: If either M or N is not an integer type, the program is ill-formed.
+// Remarks: If either M or N is not an integer type, 
+// or if either is (a possibly cv-qualified) bool, the program is ill-formed.
 
 #include <numeric>
 
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral2.fail.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral2.fail.cpp
index 7a2709a..113dd3d 100644
--- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral2.fail.cpp
+++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.not_integral2.fail.cpp
@@ -13,7 +13,8 @@
 // template<class _M, class _N>
 // constexpr common_type_t<_M,_N> gcd(_M __m, _N __n)
 
-// Remarks: If either M or N is not an integer type, the program is ill-formed.
+// Remarks: If either M or N is not an integer type, 
+// or if either is (a possibly cv-qualified) bool, the program is ill-formed.
 
 #include <numeric>