From: Paolo Carlini Date: Fri, 12 Aug 2011 15:40:01 +0000 (+0000) Subject: cmath (fmod(_Tp, _Up)): Add. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e02d979a34621de7e71c821fcf4cfb5cca511e72;p=gcc.git cmath (fmod(_Tp, _Up)): Add. 2011-08-12 Paolo Carlini * include/c_global/cmath (fmod(_Tp, _Up)): Add. * include/c_std/cmath: Likewise. From-SVN: r177698 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c52b84912f2..587ddd5c16a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2011-08-12 Paolo Carlini + + * include/c_global/cmath (fmod(_Tp, _Up)): Add. + * include/c_std/cmath: Likewise. + 2011-08-11 Paolo Carlini * include/std/future: constexpr functions are implicitly inline. diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath index 1eeded8efe1..6711d90caed 100644 --- a/libstdc++-v3/include/c_global/cmath +++ b/libstdc++-v3/include/c_global/cmath @@ -282,6 +282,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION fmod(long double __x, long double __y) { return __builtin_fmodl(__x, __y); } + template + inline _GLIBCXX_CONSTEXPR + typename __gnu_cxx::__promote_2< + typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value + && __is_arithmetic<_Up>::__value, + _Tp>::__type, _Up>::__type + fmod(_Tp __x, _Up __y) + { + typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + return fmod(__type(__x), __type(__y)); + } + using ::frexp; inline _GLIBCXX_CONSTEXPR float @@ -313,8 +325,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline _GLIBCXX_CONSTEXPR typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, double>::__type - ldexp(_Tp __x, int __exp) - { return __builtin_ldexp(__x, __exp); } + ldexp(_Tp __x, int __exp) + { return __builtin_ldexp(__x, __exp); } using ::log; diff --git a/libstdc++-v3/include/c_std/cmath b/libstdc++-v3/include/c_std/cmath index 13eef408402..c367fceed62 100644 --- a/libstdc++-v3/include/c_std/cmath +++ b/libstdc++-v3/include/c_std/cmath @@ -268,6 +268,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION fmod(long double __x, long double __y) { return __builtin_fmodl(__x, __y); } + template + inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value + && __is_integer<_Up>::__value, + double>::__type + fmod(_Tp __x, _Up __y) + { return __builtin_fmod(__x, __y); } + using ::frexp; inline float