Ticket #7637: karma_real_policies_int.patch

File karma_real_policies_int.patch, 1.8 KB (added by K-ballo <kaballo86@…>, 10 years ago)

patch

  • boost/spirit/home/karma/numeric/detail/numeric_utils.hpp

     
    545545            return call(n, mpl::bool_<is_integral<T>::value>());
    546546        }
    547547    };
     548
     549    ///////////////////////////////////////////////////////////////////////
     550    struct decompose_real
     551    {
     552        template <typename T>
     553        static T call(T n, T* iptr, mpl::true_)
     554        {
     555            *iptr = n;
     556            return T(0);
     557        }
     558
     559        template <typename T>
     560        static T call(T n, T* iptr, mpl::false_)
     561        {
     562            // Allow ADL to find the correct overload for modf
     563            using namespace std;
     564            return modf(n, iptr);
     565        }
     566
     567        template <typename T>
     568        static T call(T n, T* iptr)
     569        {
     570            return call(n, iptr, mpl::bool_<is_integral<T>::value>());
     571        }
     572    };
    548573}}}
    549574
    550575namespace boost { namespace spirit { namespace karma
  • boost/spirit/home/karma/numeric/detail/real_utils.hpp

     
    112112        // prepare numbers (sign, integer and fraction part)
    113113            U integer_part;
    114114            U precexp = spirit::traits::pow10<U>(precision);
    115             U fractional_part = modf(n, &integer_part);
     115            U fractional_part = spirit::traits::decompose_real::call(n, &integer_part);
    116116
    117117            fractional_part = floor(fractional_part * precexp + U(0.5));
    118118            if (fractional_part >= precexp)