On 05/07/2020 03:29, Emil Dotchevski via Boost wrote:
Surely we test Boost with exceptions globally disabled in the regression testing right?
What Peter means is that boost::exception_ptr ought to support BOOST_NO_EXCEPTIONS. However, it does not, it never has.
I'll admit to surprise here. I always thought that one of the principle reasons for Boost.Exception is exactly so that Boost can work well enough with exceptions globally disabled. I mean, I know I've seen bits of Boost in use on embedded platforms where exceptions are globally disabled. It worked well enough. So you surprise me that I was wrong here.
It is not trivial to support it because its implementation has been complicated over the years; remember, it was added when there was no standard support for exception_ptr. And I've learned that I can't remove old features because there's code in the wild that uses them. I think this is the complete list of legacy features:
- If there is standard support, it is able to wrap std::exception_ptr in a boost::exception_ptr.
So now I am confused. If std::exception_ptr works well enough with exceptions globally disabled on all the major standard libraries, and Boost.Exception is able to wrap that, what's the problem here? Obviously, this is C++ 11 onwards only which Outcome requires in any case, but I'm not seeing what the showstopper is here. Coming back to your original question:
Is there a way to configure Outcome so it does not use (boost) exception_ptr?
The outcome/boost_result.hpp is just a specialisation of
outcome::basic_result<> with Boost types, same as outcome/std_result.hpp
or outcome/experimental/status_result.hpp is.
You can absolutely configure your own outcome::basic_result<>
specialisation. If you simply want to remove the boost::exception_ptr
dependency, I'd suggest cloning outcome/boost_result.hpp into a new
file, and quite literally comment out the Boost.Exception stuff.
Obviously by doing this you'd lose support for result