Changelog
v2.1.1 XXth July 2019 (Boost 1.71) [release]
Enhancements:
- #184
- As per request from Boost release managers, relocated
version.hppandrevision.hppinto detail, and added the Boost licence boilerplate to the top of every source file which was missing one (I think). Also took the opportunity to run the licence restamping script over all Outcome, so copyright dates are now up to date. - #185
- Add FAQ item explaining issue #185, and why we will do nothing to fix it right now.
- #189
- Refactored the
BOOST_OUTCOME_TRYimplementation to use more clarified customisation points capable of accepting very foreign inputs. Removed thestd::experimental::expected<T, E>specialisations, as those are no longer necessary. Fixed the documentation for the customisation points which previously claimed that they are ADL discovered, which they are not. Added a recipe describing how to add in support for foreign input types. - #183
- Added a separate
motivation/plug_error_codespecifically for Boost.
Bug fixes:
- -
BOOST_OUTCOME_VERSION_MINORhadn’t been updated to 1.- #181
- Fix issue #181 where Outcome didn’t actually implement the strong swap guarantee, despite being documented as doing so.
- #190
- Fix issue #190 in Boost edition where unit test suite was not runnable from the Boost release distro.
- #182
- Fix issue #182 where
trait::is_exception_ptr_available<T>was always true, thus causing much weirdness, like not printing diagnostics and trying to feed everything tomake_exception_ptr(). - #194
- Fix issue #192 where the
std::basic_outcome_failure_exception_from_error()was being defined twice for translation units which combine standalone and Boost Outcome’s.
v2.1 12th Apr 2019 (Boost 1.70) [release]
-
success()andfailure()now produce types marked[[nodiscard]].
include/outcome/outcome.natvisis 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.
-
- 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 ifEis 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.
Added experimental
status_resultandstatus_outcomebased on experimentalstatus_code.Boost edition is now 100% Boost, so defaults for
resultandoutcomeareboost::system::error_code::errc_tandboost::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 withstdtypes.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>oroutcomewhere 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.
-
- 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 correctnoexceptcalculation 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.
-
BOOST_OUTCOME_TRYis now overloaded and selectsvoidorautoedition according to input parameter count.
-
- Fix generation of double underscored temporary variables in
BOOST_OUTCOME_UNIQUE_NAME, which is UB.
- Fix generation of double underscored temporary variables in
-
- Separated
resultfrom its hard coded dependency on the<system_error>header. - Renamed
resultandoutcometobasic_resultandbasic_outcome. - Renamed
result.hppintobasic_result.hpp. - Moved
<system_error>and<exception>dependent code into newstd_result.hppandstd_outcome.hppheader files. - Added
boost_result.hppandboost_outcome.hppwhich use Boost.System and Boost.Exception (these areresult.hppandoutcome.hppin the Boost edition).
- Separated
v2.0 18th Jan 2018 [release]
- Boost peer review edition. This is what was reviewed.
- Changelog from v1 can be found in the release notes for this release.



