diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/c_global/cmath | 16 | ||||
-rw-r--r-- | libstdc++-v3/include/c_std/cmath | 7 |
3 files changed, 26 insertions, 2 deletions
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 <paolo.carlini@oracle.com> + + * include/c_global/cmath (fmod(_Tp, _Up)): Add. + * include/c_std/cmath: Likewise. + 2011-08-11 Paolo Carlini <paolo.carlini@oracle.com> * 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<typename _Tp, typename _Up> + 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<typename _Tp, typename _Up> + 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 |