diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp index 76736a3..2562b62 100644 --- a/include/boost/lexical_cast.hpp +++ b/include/boost/lexical_cast.hpp @@ -1526,13 +1526,12 @@ namespace boost { #if defined(BOOST_NO_STRINGSTREAM) typedef std::ostrstream out_stream_t; - typedef parser_buf unlocked_but_t; #elif defined(BOOST_NO_STD_LOCALE) typedef std::ostringstream out_stream_t; - typedef parser_buf unlocked_but_t; + typedef parser_buf buffer_t; #else typedef std::basic_ostringstream out_stream_t; - typedef parser_buf, CharT> unlocked_but_t; + typedef parser_buf, CharT> buffer_t; #endif typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c< RequiresStringbuffer, @@ -1615,8 +1614,9 @@ namespace boost { BOOST_STATIC_ASSERT((boost::is_same::value)); #endif bool const result = !(out_stream << input).fail(); - const unlocked_but_t* const p - = static_cast(out_stream.rdbuf()) ; + const buffer_t* const p = static_cast( + static_cast*>(out_stream.rdbuf()) + ); start = p->pbase(); finish = p->pptr(); return result; @@ -1984,15 +1984,13 @@ namespace boost { std::istrstream stream(start, finish - start); #else -#if defined(BOOST_NO_STD_LOCALE) - std::istringstream stream; -#else - std::basic_istringstream stream; -#endif // BOOST_NO_STD_LOCALE - - unlocked_but_t buf; + buffer_t buf; buf.setbuf(start, finish - start); - dynamic_cast&>(stream).rdbuf(&buf); +#if defined(BOOST_NO_STD_LOCALE) + std::istream stream(&buf); +#else + std::basic_istream stream(&buf); +#endif // BOOST_NO_STD_LOCALE #endif // BOOST_NO_STRINGSTREAM stream.unsetf(std::ios::skipws);