v2.1.5 Boost 1.75 release
v2.1.5 11th December 2020 (Boost 1.75) [release]
THIS IS THE FINAL RELEASE OF OUTCOME V2.1, FROM NOW ON IT IS OUTCOME V2.2
Enhancements:
-
The ADL discovered event hooks have been replaced with policy-specified event hooks instead
: This is due to brittleness (where hooks would quietly
self-disable if somebody changed something), compiler bugs (a difference in compiler settings causes
the wrong hooks, or some but not all hooks, to get discovered), and end user difficulty in using
them at all. The policy-specified event hooks can be told to default to ADL discovered hooks for
backwards compatibility: setOUTCOME_ENABLE_LEGACY_SUPPORT_FOR
to less than220
to
enable emulation. -
Improve configuring
OUTCOME_GCC6_CONCEPT_BOOL
: Older GCCs had boolean based concepts syntax, whereas newer GCCs are standards conforming.
However the precise logic of when to use legacy and conforming syntax was not well understood,
which caused Outcome to fail to compile depending on what options you pass to GCC. The new logic
always uses the legacy syntax if on GCC 8 or older, otherwise we use conforming syntax if and
only if GCC is in C++ 20 mode or later. This hopefully will resolve the corner case build
failures on GCC.
Bug fixes:
-
Boost.Outcome should now compile with
BOOST_NO_EXCEPTIONS
defined
: Thanks to Emil, maintainer of Boost.Exception, making a change for me, Boost.Outcome
should now compile with C++ exceptions globally disabled. You won't be able to use
boost::exception_ptr
as it can't be included if C++ exceptions are globally disabled. -
#236
: In the Coroutine support thefinal_suspend()
was notnoexcept
, despite being required
to be so in the C++ 20 standard. This has been fixed, but only if your compiler implements
noop_coroutine
. Additionally, ifnoop_coroutine
is available, we use the much more
efficient coroutine handle returning variant ofawait_suspend()
which should significantly
improve codegen and context switching performance.