On 15/12/2016 13:53, Robert Ramey wrote:
I think that there has been a lot of confusion about what BOOST_THROW_EXCEPTION is suppose to do.
My understanding was that it was a macro intended to support the writing of portable code that could run on platforms which didn't support exceptions or where the user / author didn't want to use the exception mechanism so he could redefine the macro. Lot's of libraries used this idiom to decouple their libraries from the the selection of exception mechanism.
Shouldn't a macro with that intent be defined in core/no_exceptions_support.hpp instead? (There currently doesn't appear to be a throw macro there, presumably because boost::throw_exception was sufficient?)
With the acceptance of Boost.Exception, this BOOST_THROW_EXCEPTION was repurposed to call boost.exception. Obviously not what previous users of BOOST_THROW_EXCEPTION intended or expected. This made many libraries dependent on the new library boost.exception which had multiple repercussions - one of which is that boost.exception has now become a "core library" - not sure what that is supposed to mean.
It doesn't really look like (at least in current code) that BOOST_THROW_EXCEPTION has any function unless you want to capture the error_info automatically. Otherwise you can just always use boost::throw_exception instead. If you want to use BOOST_THROW_EXCEPTION without depending on Boost.Exception, it looks like you can define BOOST_EXCEPTION_DISABLE, although at the cost of losing the current_exception and error_info wrappers. This is independent of BOOST_NO_EXCEPTIONS, which controls whether exceptions are thrown at all.