diff options
Diffstat (limited to 'boost/lexical_cast/detail/converter_lexical_streams.hpp')
-rw-r--r-- | boost/lexical_cast/detail/converter_lexical_streams.hpp | 37 |
1 files changed, 4 insertions, 33 deletions
diff --git a/boost/lexical_cast/detail/converter_lexical_streams.hpp b/boost/lexical_cast/detail/converter_lexical_streams.hpp index 7f8cfd946e..2d6617dadd 100644 --- a/boost/lexical_cast/detail/converter_lexical_streams.hpp +++ b/boost/lexical_cast/detail/converter_lexical_streams.hpp @@ -62,7 +62,6 @@ #include <boost/lexical_cast/detail/lcast_char_constants.hpp> #include <boost/lexical_cast/detail/lcast_unsigned_converters.hpp> #include <boost/lexical_cast/detail/inf_nan.hpp> -#include <boost/lexical_cast/detail/lcast_float_converters.hpp> #include <istream> @@ -739,12 +738,10 @@ namespace boost { return true; } - bool operator>>(float& output) { return lcast_ret_float<Traits>(output,start,finish); } - private: // Not optimised converter template <class T> - bool float_types_converter_internal(T& output, int /*tag*/) { + bool float_types_converter_internal(T& output) { if (parse_inf_nan(start, finish, output)) return true; bool const return_value = shr_using_base_class(output); @@ -770,36 +767,10 @@ namespace boost { return return_value; } - // Optimised converter - bool float_types_converter_internal(double& output, char /*tag*/) { - return lcast_ret_float<Traits>(output, start, finish); - } public: - - bool operator>>(double& output) { - /* - * Some compilers implement long double as double. In that case these types have - * same size, same precision, same max and min values... And it means, - * that current implementation of lcast_ret_float cannot be used for type - * double, because it will give a big precision loss. - * */ - boost::mpl::if_c< -#if (defined(BOOST_HAS_LONG_LONG) || defined(BOOST_HAS_MS_INT64)) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS) - boost::type_traits::ice_eq< sizeof(double), sizeof(long double) >::value, -#else - 1, -#endif - int, - char - >::type tag = 0; - - return float_types_converter_internal(output, tag); - } - - bool operator>>(long double& output) { - int tag = 0; - return float_types_converter_internal(output, tag); - } + bool operator>>(float& output) { return float_types_converter_internal(output); } + bool operator>>(double& output) { return float_types_converter_internal(output); } + bool operator>>(long double& output) { return float_types_converter_internal(output); } // Generic istream-based algorithm. // lcast_streambuf_for_target<InputStreamable>::value is true. |