2011-08-12 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 Aug 2011 15:40:01 +0000 (15:40 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 Aug 2011 15:40:01 +0000 (15:40 +0000)
* include/c_global/cmath (fmod(_Tp, _Up)): Add.
* include/c_std/cmath: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177698 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/c_global/cmath
libstdc++-v3/include/c_std/cmath

index c52b849..587ddd5 100644 (file)
@@ -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.
index 1eeded8..6711d90 100644 (file)
@@ -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;
 
index 13eef40..c367fce 100644 (file)
@@ -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