From 115ad05af522ac1df1ddf97c41d2ec0d65830f41 Mon Sep 17 00:00:00 2001 From: Alexander Nasonov Date: Wed, 11 Oct 2006 19:43:54 +0000 Subject: [PATCH] Set precision correctly for builtin and UDT floating types. [SVN r35562] --- include/boost/detail/lcast_precision.hpp | 10 +++++----- include/boost/lexical_cast.hpp | 24 +++--------------------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/include/boost/detail/lcast_precision.hpp b/include/boost/detail/lcast_precision.hpp index 49345d5..085c569 100644 --- a/include/boost/detail/lcast_precision.hpp +++ b/include/boost/detail/lcast_precision.hpp @@ -5,8 +5,8 @@ // (See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_DETAIL_LCAST_SET_PRECISION_HPP_INCLUDED -#define BOOST_DETAIL_LCAST_SET_PRECISION_HPP_INCLUDED +#ifndef BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED +#define BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED #include #include @@ -28,7 +28,7 @@ namespace boost { namespace detail { #ifdef _MSC_VER #pragma warning (push) -// conditional expression is constant (stream precision) +// conditional expression is constant #pragma warning (disable : 4127) #endif @@ -85,7 +85,7 @@ inline std::streamsize lcast_get_precision() // radix = 10 and digits10 == the number of decimal digits. return 6; -} // template bool lcast_set_precision(std::ios_base& stream) +} template inline void lcast_set_precision(std::ios_base& stream) @@ -109,5 +109,5 @@ inline void lcast_set_precision(std::ios_base& stream) #undef BOOST_DETAIL_LCAST_ASSERT -#endif // BOOST_DETAIL_LCAST_SET_PRECISION_HPP_INCLUDED +#endif // BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp index e8ac499..8b88bad 100644 --- a/include/boost/lexical_cast.hpp +++ b/include/boost/lexical_cast.hpp @@ -27,6 +27,7 @@ #include #include #include +#include #ifdef BOOST_NO_STRINGSTREAM #include @@ -458,25 +459,7 @@ namespace boost lexical_stream(char_type* = 0, char_type* = 0) { stream.unsetf(std::ios::skipws); - -#if (defined _MSC_VER) -# pragma warning( push ) - // conditional expression is constant -# pragma warning( disable : 4127 ) -#endif - - typedef std::numeric_limits t; - typedef std::numeric_limits s; - - if(t::is_specialized) - stream.precision(1 + t::digits10); - else if(s::is_specialized) - stream.precision(1 + s::digits10); - -#if (defined _MSC_VER) -# pragma warning( pop ) -#endif - + lcast_set_precision(stream); } ~lexical_stream() { @@ -626,8 +609,7 @@ namespace boost typedef std::numeric_limits limits; - if(limits::is_specialized) - stream.precision(limits::digits10 + 1); + lcast_set_precision(stream); #if (defined _MSC_VER) # pragma warning( pop ) #endif