Message du 31/03/11 00:42 De : "Emil Dotchevski" A : "Hochhaus, Andrew" Copie à : boost-users@lists.boost.org Objet : Re: [Boost-users] no exceptions
On Wed, Mar 30, 2011 at 3:16 PM, Hochhaus, Andrew wrote:
Thanks Emil.
On Mon, Mar 21, 2011 at 7:01 PM, Emil Dotchevski wrote:
2) What is the "recommended" way to throw exceptions inside boost library code (BOOST_THROW_EXCEPTION, boost::throw_exception, etc)?
For BOOST_NO_EXCEPTIONS to work, it is sufficient to use boost::throw_exception to throw. However, it is recommended to use BOOST_THROW_EXCEPTION instead, which has the benefit of storing the file and line number into the exception object. See http://www.boost.org/doc/libs/release/libs/exception/doc/BOOST_THROW_EXCEPTI....
That is what I was hoping for.
Unfortunately there is no recommended way to work without no exceptions, as the long thread Emil mentioned explains. At least it is not included in the guidelines.
3) If this is not intended behavior, would incremental patches to remove these dependencies be considered for inclusion?
You mean dependencies on boost/throw_exception.hpp? I'd think that patches that convert naked throws to BOOST_THROW_EXCEPTION should be accepted, since the boost/throw_exception.hpp header is extremely lightweight.
Yes. I'm hoping to convert naked throws to BOOST_THROW_EXCEPTION.
I'm sure that most of the library authors will accept the patch, but I will request directly before doing it.
While I'm at it, any reason why naked {try,catch} shouldn't also be converted to BOOST_{TRY,CATCH,CATCH_END}?
There is alreadt boost/detail/no_exceptions_support.hpp void foo() { BOOST_TRY { ... } BOOST_CATCH(const std::bad_alloc&) { ... BOOST_RETHROW } BOOST_CATCH(const std::exception& e) { ... } BOOST_CATCH_END } With exception support enabled it will expand into: void foo() { { try { ... } catch (const std::bad_alloc&) { ... throw; } catch (const std::exception& e) { ... } } } With exception support disabled it will expand into: void foo() { { if(true) { ... } else if (false) { ... } else if (false) { ... } } }
Yes. See the long discussion we had about that issue. :)
See the dev ML.