diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2014-01-06 18:12:50 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2014-01-06 18:12:50 +0000 |
commit | a429ba738c6be5cf9db396fa40cc0571b378f8ef (patch) | |
tree | 077d0f1ae7ac2cdeae21a9a262e1aefcebb0bc38 | |
parent | b3f9501b258f8ce3e72390a1b1cefbeded7e27f7 (diff) | |
download | bcm5719-llvm-a429ba738c6be5cf9db396fa40cc0571b378f8ef.tar.gz bcm5719-llvm-a429ba738c6be5cf9db396fa40cc0571b378f8ef.zip |
Back out the <type_traits> changes from r198431; they were breaking when building with glibc. Need to find a better solution for PR18218.
llvm-svn: 198623
-rw-r--r-- | libcxx/include/cmath | 70 | ||||
-rw-r--r-- | libcxx/test/numerics/c.math/cmath.pass.cpp | 14 |
2 files changed, 22 insertions, 62 deletions
diff --git a/libcxx/include/cmath b/libcxx/include/cmath index 4f279783a90..def49c0bfcb 100644 --- a/libcxx/include/cmath +++ b/libcxx/include/cmath @@ -419,25 +419,12 @@ __libcpp_isnan(_A1 __x) _NOEXCEPT #undef isnan +template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -bool -isnan(float __x) _NOEXCEPT -{ - return __libcpp_isnan(__x); -} - -inline _LIBCPP_INLINE_VISIBILITY -bool -isnan(double __x) _NOEXCEPT -{ - return __libcpp_isnan(__x); -} - -inline _LIBCPP_INLINE_VISIBILITY -bool -isnan(long double __x) _NOEXCEPT +typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type +isnan(_A1 __x) _NOEXCEPT { - return __libcpp_isnan(__x); + return __libcpp_isnan((typename std::__promote<_A1>::type)__x); } #endif // isnan @@ -665,26 +652,6 @@ using ::isunordered; using ::float_t; using ::double_t; -// isnan - -template <class _A1> -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<__promote<_A1>::value, bool>::type -#ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES -isnan(_A1 __x) -#else -isnan(_A1&& __x) - _NOEXCEPT_ - ( - _NOEXCEPT_(__promote<_A1>::__does_not_throw) - ) -#endif -{ - typedef typename __promote<_A1>::type type; - static_assert(!(is_same<typename remove_reference<_A1>::type, type>::value), ""); - return __libcpp_isnan(static_cast<type>(_VSTD::forward<_A1>(__x))); -} - // abs #if !defined(_AIX) @@ -985,25 +952,18 @@ inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __x, long double __ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY -typename __promote<_A1, _A2>::type -#ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES -pow(_A1 __x, _A2 __y) -#else -pow(_A1&& __x, _A2&& __y) - _NOEXCEPT_ - ( - _NOEXCEPT_(__promote<_A1>::__does_not_throw) && - _NOEXCEPT_(__promote<_A2>::__does_not_throw) - ) -#endif +typename enable_if +< + is_arithmetic<_A1>::value && + is_arithmetic<_A2>::value, + typename __promote<_A1, _A2>::type +>::type +pow(_A1 __x, _A2 __y) _NOEXCEPT { - typedef typename __promote<_A1>::type _D1; - typedef typename __promote<_A2>::type _D2; - typedef typename __promote<_D1, _D2>::type type; - static_assert((!(is_same<typename remove_reference<_A1>::type, type>::value && - is_same<typename remove_reference<_A2>::type, type>::value)), ""); - return pow(static_cast<type>(static_cast<_D1>(_VSTD::forward<_A1>(__x))), - static_cast<type>(static_cast<_D2>(_VSTD::forward<_A2>(__y)))); + typedef typename __promote<_A1, _A2>::type __result_type; + static_assert((!(is_same<_A1, __result_type>::value && + is_same<_A2, __result_type>::value)), ""); + return pow((__result_type)__x, (__result_type)__y); } // sin diff --git a/libcxx/test/numerics/c.math/cmath.pass.cpp b/libcxx/test/numerics/c.math/cmath.pass.cpp index 13d872cdcc7..5db9fd14bbe 100644 --- a/libcxx/test/numerics/c.math/cmath.pass.cpp +++ b/libcxx/test/numerics/c.math/cmath.pass.cpp @@ -339,14 +339,14 @@ void test_pow() static_assert((std::is_same<decltype(std::powf(0,0)), float>::value), ""); static_assert((std::is_same<decltype(std::powl(0,0)), long double>::value), ""); static_assert((std::is_same<decltype(std::pow((int)0, (int)0)), double>::value), ""); - static_assert((std::is_same<decltype(std::pow(Value<int>(), (int)0)), double>::value), ""); - static_assert((std::is_same<decltype(std::pow(Value<long double>(), (float)0)), long double>::value), ""); - static_assert((std::is_same<decltype(std::pow((float) 0, Value<float>())), float>::value), ""); +// static_assert((std::is_same<decltype(std::pow(Value<int>(), (int)0)), double>::value), ""); +// static_assert((std::is_same<decltype(std::pow(Value<long double>(), (float)0)), long double>::value), ""); +// static_assert((std::is_same<decltype(std::pow((float) 0, Value<float>())), float>::value), ""); assert(std::pow(1,1) == 1); - assert(std::pow(Value<int,1>(), Value<float,1>()) == 1); - assert(std::pow(1.0f, Value<double,1>()) == 1); - assert(std::pow(1.0, Value<int,1>()) == 1); - assert(std::pow(Value<long double,1>(), 1LL) == 1); +// assert(std::pow(Value<int,1>(), Value<float,1>()) == 1); +// assert(std::pow(1.0f, Value<double,1>()) == 1); +// assert(std::pow(1.0, Value<int,1>()) == 1); +// assert(std::pow(Value<long double,1>(), 1LL) == 1); } void test_sin() |