Author: compnerd
Date: Sat Feb 18 13:28:38 2017
New Revision: 295559

URL: http://llvm.org/viewvc/llvm-project?rev=295559&view=rev
Log:
math: add type promoting template definition on MSVCRT

When building with MSVCRT, we need to manually provide the type
promoting overloads to allow the correct type deduced invocation for
signbit(Int) and fpclassify(int).

Modified:
    libcxx/trunk/include/math.h

Modified: libcxx/trunk/include/math.h
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/math.h?rev=295559&r1=295558&r2=295559&view=diff
==============================================================================
--- libcxx/trunk/include/math.h (original)
+++ libcxx/trunk/include/math.h Sat Feb 18 13:28:38 2017
@@ -333,6 +333,16 @@ signbit(_A1 __lcpp_x) _NOEXCEPT
     return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);
 }
 
+#elif defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) >= 14)
+
+template <typename _A1>
+inline _LIBCPP_INLINE_VISIBILITY
+typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type
+signbit(_A1 __lcpp_x) _NOEXCEPT
+{
+  return ::signbit(static_cast<typename std::__promote<_A1>::type>(__lcpp_x));
+}
+
 #endif  // signbit
 
 // fpclassify
@@ -357,6 +367,16 @@ fpclassify(_A1 __lcpp_x) _NOEXCEPT
     return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x);
 }
 
+#elif defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) >= 14)
+
+template <typename _A1>
+inline _LIBCPP_INLINE_VISIBILITY
+typename std::enable_if<std::is_arithmetic<_A1>::value, int>::type
+fpclassify(_A1 __lcpp_x) _NOEXCEPT
+{
+  return ::fpclassify(static_cast<typename 
std::__promote<_A1>::type>(__lcpp_x));
+}
+
 #endif  // fpclassify
 
 // isfinite


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

Reply via email to