diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp index 3fc0072..ed2291d 100644 --- a/include/boost/lexical_cast.hpp +++ b/include/boost/lexical_cast.hpp @@ -1616,6 +1616,11 @@ namespace boost { // does not support such conversions. Try updating it. BOOST_STATIC_ASSERT((boost::is_same::value)); #endif + +#ifndef BOOST_NO_EXCEPTIONS + out_stream.exceptions(std::ios::badbit); + try { +#endif bool const result = !(out_stream << input).fail(); const buffer_t* const p = static_cast( static_cast*>(out_stream.rdbuf()) @@ -1623,6 +1628,11 @@ namespace boost { start = p->pbase(); finish = p->pptr(); return result; +#ifndef BOOST_NO_EXCEPTIONS + } catch (const ::std::ios_base::failure& /*f*/) { + return false; + } +#endif } template @@ -1996,6 +2006,10 @@ namespace boost { #endif // BOOST_NO_STD_LOCALE #endif // BOOST_NO_STRINGSTREAM +#ifndef BOOST_NO_EXCEPTIONS + stream.exceptions(std::ios::badbit); + try { +#endif stream.unsetf(std::ios::skipws); lcast_set_precision(stream, static_cast(0)); @@ -2010,6 +2024,12 @@ namespace boost { #else Traits::eof(); #endif + +#ifndef BOOST_NO_EXCEPTIONS + } catch (const ::std::ios_base::failure& /*f*/) { + return false; + } +#endif } template diff --git a/test/lexical_cast_arrays_test.cpp b/test/lexical_cast_arrays_test.cpp index cb590d2..013f401 100644 --- a/test/lexical_cast_arrays_test.cpp +++ b/test/lexical_cast_arrays_test.cpp @@ -222,7 +222,8 @@ static void testing_template_array_output_on_char_value() BOOST_CHECK(&res3[0] == u16ethalon); } - BOOST_CHECK_THROW(lexical_cast(val), boost::bad_lexical_cast); + // Some compillers may throw std::bad_alloc here + BOOST_CHECK_THROW(lexical_cast(val), std::exception); #endif #ifdef BOOST_LC_RUNU32 @@ -248,7 +249,8 @@ static void testing_template_array_output_on_char_value() BOOST_CHECK(&res3[0] == u32ethalon); } - BOOST_CHECK_THROW(lexical_cast(val), boost::bad_lexical_cast); + // Some compillers may throw std::bad_alloc here + BOOST_CHECK_THROW(lexical_cast(val), std::exception); #endif }