|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r85331 - in branches/release: boost libs/conversion/test
From: antoshkka_at_[hidden]
Date: 2013-08-13 09:08:37
Author: apolukhin
Date: 2013-08-13 09:08:37 EDT (Tue, 13 Aug 2013)
New Revision: 85331
URL: http://svn.boost.org/trac/boost/changeset/85331
Log:
Merge from trunk:
* Do not treat critcal errors as bad_lexical_cast exceptions, but if exceptions are on, throw correct exception instead (refs #8966)
Text files modified:
branches/release/boost/lexical_cast.hpp | 20 ++++++++++++++++++++
branches/release/libs/conversion/test/lexical_cast_arrays_test.cpp | 6 ++++--
2 files changed, 24 insertions(+), 2 deletions(-)
Modified: branches/release/boost/lexical_cast.hpp
==============================================================================
--- branches/release/boost/lexical_cast.hpp Tue Aug 13 02:34:08 2013 (r85330)
+++ branches/release/boost/lexical_cast.hpp 2013-08-13 09:08:37 EDT (Tue, 13 Aug 2013) (r85331)
@@ -1616,6 +1616,11 @@
// does not support such conversions. Try updating it.
BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::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<buffer_t*>(
static_cast<std::basic_streambuf<CharT, Traits>*>(out_stream.rdbuf())
@@ -1623,6 +1628,11 @@
start = p->pbase();
finish = p->pptr();
return result;
+#ifndef BOOST_NO_EXCEPTIONS
+ } catch (const ::std::ios_base::failure& /*f*/) {
+ return false;
+ }
+#endif
}
template <class T>
@@ -1996,6 +2006,10 @@
#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<InputStreamable*>(0));
@@ -2010,6 +2024,12 @@
#else
Traits::eof();
#endif
+
+#ifndef BOOST_NO_EXCEPTIONS
+ } catch (const ::std::ios_base::failure& /*f*/) {
+ return false;
+ }
+#endif
}
template<class T>
Modified: branches/release/libs/conversion/test/lexical_cast_arrays_test.cpp
==============================================================================
--- branches/release/libs/conversion/test/lexical_cast_arrays_test.cpp Tue Aug 13 02:34:08 2013 (r85330)
+++ branches/release/libs/conversion/test/lexical_cast_arrays_test.cpp 2013-08-13 09:08:37 EDT (Tue, 13 Aug 2013) (r85331)
@@ -222,7 +222,8 @@
BOOST_CHECK(&res3[0] == u16ethalon);
}
- BOOST_CHECK_THROW(lexical_cast<u16short_arr_type>(val), boost::bad_lexical_cast);
+ // Some compillers may throw std::bad_alloc here
+ BOOST_CHECK_THROW(lexical_cast<u16short_arr_type>(val), std::exception);
#endif
#ifdef BOOST_LC_RUNU32
@@ -248,7 +249,8 @@
BOOST_CHECK(&res3[0] == u32ethalon);
}
- BOOST_CHECK_THROW(lexical_cast<u32short_arr_type>(val), boost::bad_lexical_cast);
+ // Some compillers may throw std::bad_alloc here
+ BOOST_CHECK_THROW(lexical_cast<u32short_arr_type>(val), std::exception);
#endif
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk