v2.1 Boost 1.70 release
-
success()
andfailure()
now produce types marked[[nodiscard]]
.
-
include/outcome/outcome.natvis
is now namespace permuted like the rest of
Outcome, so debugging Outcome based code in Visual Studio should look much
prettier than before. -
.has_failure()
was returning false at times when it should have returned true.
-
- GCC 5 no longer can compile Outcome at all due to https://stackoverflow.com/questions/45607450/gcc5-nested-variable-template-is-not-a-function-template.
Added explicit version trap for GCC 5 to say it can not work. Note this is not a
breaking change, GCC 5 was never supported officially in any v2 Outcome.
- GCC 5 no longer can compile Outcome at all due to https://stackoverflow.com/questions/45607450/gcc5-nested-variable-template-is-not-a-function-template.
-
- BREAKING CHANGE
result<T, E>
,boost_result<T, E>
andstd_result<T, E>
no longer implement hard UB on fetching a value from a valueless instance ifE
is
a UDT, they now fail to compile with a useful error message. If you wish hard UB,
useunchecked<T, E>
,boost_unchecked<T, E>
orstd_unchecked<T, E>
instead.
- BREAKING CHANGE
-
- Fixed a nasty corner case bug where value type's without a copy constructor
but with a move constructor would indicate via traits that copy construction
was available. Thanks to Microsoft's compiler team for reporting this issue.
- Fixed a nasty corner case bug where value type's without a copy constructor
-
Added experimental
status_result
andstatus_outcome
based on experimental
status_code
. -
Boost edition is now 100% Boost, so defaults for
result
andoutcome
are
boost::system::error_code::errc_t
andboost::exception_ptr
. Moreover,
the test suite in the Boost edition now exclusively tests the Boost edition.
One can, of course, freely use the standalone edition with Boost, and the Boost
edition withstd
types. -
Renamed ADL discovered customisation point
throw_as_system_error_with_payload()
tooutcome_throw_as_system_error_with_payload()
. -
- Added much clearer compile failure when user tries
result<T, T>
oroutcome
where two or more types are identical. Thanks to Andrzej Krzemieński
for suggesting a technique which combines SFINAE correctness with
the remaining ability forresult<T, T>
etc to be a valid type, but
not constructible.
- Added much clearer compile failure when user tries
-
- Fixed one of the oldest long open bugs in Outcome, that the noexcept
unit tests failed on OS X for an unknown reason.
- Fixed one of the oldest long open bugs in Outcome, that the noexcept
-
- Outcome did not construct correctly from
failure_type
.
- Outcome did not construct correctly from
-
Inexplicably outcome's error + exception constructor had been removed.
Nobody noticed during the Boost peer review, which is worrying seeing as that
constructor is needed for one of the main advertised features to Boost! -
operator==
andoperator!=
now become disabled if the value, error and
exception types do not implement the same operator.- Relatedly, both comparison operators simply didn't work right. Fixed.
-
swap()
now has correctnoexcept
calculation and now correctly orders
the swaps to be whichever is the throwing swap first.
-
Added reference dump of v2.1 ABI so we can check if ABI breakage detection
works in the next set of changes, plus Travis job to check ABI and API compatibility
per commit. -
OUTCOME_TRY
is now overloaded and selectsvoid
orauto
edition
according to input parameter count.
-
- Fix generation of double underscored temporary variables in
OUTCOME_UNIQUE_NAME
, which is UB.
- Fix generation of double underscored temporary variables in
-
- Separated
result
from its hard coded dependency on the<system_error>
header. - Renamed
result
andoutcome
tobasic_result
andbasic_outcome
. - Renamed
result.hpp
intobasic_result.hpp
. - Moved
<system_error>
and<exception>
dependent code into new
std_result.hpp
andstd_outcome.hpp
header files. - Added
boost_result.hpp
andboost_outcome.hpp
which use Boost.System
and Boost.Exception (these areresult.hpp
andoutcome.hpp
in the Boost edition).
- Separated