Author: marshall
Date: Tue Jan 24 12:15:48 2017
New Revision: 292962

URL: http://llvm.org/viewvc/llvm-project?rev=292962&view=rev
Log:
Implement LWG2733: [fund.ts.v2] gcd / lcm and bool.  We already did tbis for 
C++17, so replicate the changes in experimental.

Added:
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp
    
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp
      - copied, changed from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp
Modified:
    libcxx/trunk/include/experimental/numeric

Modified: libcxx/trunk/include/experimental/numeric
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/experimental/numeric?rev=292962&r1=292961&r2=292962&view=diff
==============================================================================
--- libcxx/trunk/include/experimental/numeric (original)
+++ libcxx/trunk/include/experimental/numeric Tue Jan 24 12:15:48 2017
@@ -75,6 +75,8 @@ common_type_t<_Tp,_Up>
 gcd(_Tp __m, _Up __n)
 {
     static_assert((is_integral<_Tp>::value && is_integral<_Up>::value), 
"Arguments to gcd must be integer types");
+    static_assert((!is_same<typename remove_cv<_Tp>::type, bool>::value), 
"First argument to gcd cannot be bool" );
+    static_assert((!is_same<typename remove_cv<_Up>::type, bool>::value), 
"Second argument to gcd cannot be bool" );
     using _Rp = common_type_t<_Tp,_Up>;
     using _Wp = make_unsigned_t<_Rp>;
     return static_cast<_Rp>(__gcd(static_cast<_Wp>(__abs<_Tp>()(__m)),
@@ -87,6 +89,8 @@ common_type_t<_Tp,_Up>
 lcm(_Tp __m, _Up __n)
 {
     static_assert((is_integral<_Tp>::value && is_integral<_Up>::value), 
"Arguments to lcm must be integer types");
+    static_assert((!is_same<typename remove_cv<_Tp>::type, bool>::value), 
"First argument to lcm cannot be bool" );
+    static_assert((!is_same<typename remove_cv<_Up>::type, bool>::value), 
"Second argument to lcm cannot be bool" );
     if (__m == 0 || __n == 0)
         return 0;
 

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool1.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::gcd(false, 4);
+    std::experimental::gcd(false, 4);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool2.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::gcd(2, true);
+    std::experimental::gcd(2, true);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool3.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::gcd<volatile bool, int>(false, 4);
+    std::experimental::gcd<volatile bool, int>(false, 4);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.gcd/gcd.bool4.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::gcd<int, const bool>(2, true);
+    std::experimental::gcd<int, const bool>(2, true);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool1.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::lcm(false, 4);
+    std::experimental::lcm(false, 4);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool2.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::lcm(2, true);
+    std::experimental::lcm(2, true);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool3.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::lcm<volatile bool, int>(false, 4);
+    std::experimental::lcm<volatile bool, int>(false, 4);
 }

Copied: 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp
 (from r292937, 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp)
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp?p2=libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp&p1=libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp&r1=292937&r2=292962&rev=292962&view=diff
==============================================================================
--- 
libcxx/trunk/test/std/numerics/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp 
(original)
+++ 
libcxx/trunk/test/std/experimental/numeric/numeric.ops/numeric.ops.lcm/lcm.bool4.fail.cpp
 Tue Jan 24 12:15:48 2017
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-// UNSUPPORTED: c++98, c++03, c++11, c++14
+// UNSUPPORTED: c++98, c++03, c++11
 // <numeric>
 
 // template<class _M, class _N>
@@ -16,10 +16,10 @@
 // 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>
+#include <experimental/numeric>
 
 
 int main()
 {
-    std::lcm<int, const bool>(2, true);
+    std::experimental::lcm<int, const bool>(2, true);
 }


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to