123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Changelog - Boost.Outcome documentation</title>
- <link rel="stylesheet" href="./css/boost.css" type="text/css">
- <meta name="generator" content="Hugo 0.52 with Boostdoc theme">
- <meta name="viewport" content="width=device-width,initial-scale=1.0"/>
- <link rel="icon" href="./images/favicon.ico" type="image/ico"/>
- <body><div class="spirit-nav">
- <a accesskey="p" href="./videos.html"><img src="./images/prev.png" alt="Prev"></a>
- <a accesskey="u" href="./index.html"><img src="./images/up.png" alt="Up"></a>
- <a accesskey="h" href="./index.html"><img src="./images/home.png" alt="Home"></a><a accesskey="n" href="./history.html"><img src="./images/next.png" alt="Next"></a></div><div id="content">
- <div class="titlepage"><div><div><h1 style="clear: both">Changelog</h1></div></div></div>
- <div class="toc"><dl class="toc">
- <dt>
- <dd><dl>
- <dt><a href="#v2-1-2-11th-december-2019-boost-1-72-release-https-github-com-ned14-outcome-releases-tag-v2-1-2">v2.1.2 11th December 2019 (Boost 1.72) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.2">[release]</a></a>
- <dd><dl>
- <dt><a href="#enhancements">Enhancements:</a></dt>
- <dt><a href="#bug-fixes">Bug fixes:</a></dt>
- </dl></dd></dt>
- <dt><a href="#v2-1-1-19th-august-2019-boost-1-71-release-https-github-com-ned14-outcome-releases-tag-v2-1-1">v2.1.1 19th August 2019 (Boost 1.71) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.1">[release]</a></a>
- <dd><dl>
- <dt><a href="#enhancements-1">Enhancements:</a></dt>
- <dt><a href="#bug-fixes-1">Bug fixes:</a></dt>
- </dl></dd></dt>
- <dt><a href="#v2-1-12th-apr-2019-boost-1-70-release-https-github-com-ned14-outcome-releases-tag-v2-1">v2.1 12th Apr 2019 (Boost 1.70) <a href="https://github.com/ned14/outcome/releases/tag/v2.1">[release]</a></a></dt>
- <dt><a href="#v2-0-18th-jan-2018-release-https-github-com-ned14-outcome-releases-tag-v2-0-boost-peer-review">v2.0 18th Jan 2018 <a href="https://github.com/ned14/outcome/releases/tag/v2.0-boost-peer-review">[release]</a></a></dt>
- </dl></dd></dt>
- </dl>
- </div>
- <hr />
- <h2 id="v2-1-2-11th-december-2019-boost-1-72-release-https-github-com-ned14-outcome-releases-tag-v2-1-2">v2.1.2 11th December 2019 (Boost 1.72) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.2">[release]</a></h2>
- <h3 id="enhancements">Enhancements:</h3>
- <dl>
- <dt>Improved compatibility with cmake tooling</dt>
- <dd>Standalone outcome is now <code>make install</code>-able, and cmake <code>find_package()</code> can find it.
- Note that you must separately install and <code>find_package()</code> Outcome’s dependency, quickcpplib,
- else <code>find_package()</code> of Outcome will fail.</dd>
- <dt>Non-permissive parsing is now default in Visual Studio</dt>
- <dd>The default targets in standalone Outcome’s cmake now enable non-permissive parsing.
- This was required partially because VS2019 16.3’s quite buggy Concepts implementation is
- unusuable in permissive parsing mode. Even then, lazy ADL two phase lookup is broken
- in VS2019 16.3 with <code>/std:latest</code>, you may wish to use an earlier language standard.</dd>
- <dt><strong>Breaking change!</strong></dt>
- <dd>The git submodule mechanism used by standalone Outcome of specifying dependent libraries
- has been replaced with a cmake superbuild of dependencies mechanism instead. Upon cmake
- configure, an internal copy of quickcpplib will be git cloned, built and installed into the
- build directory from where an internal <code>find_package()</code> uses it. This breaks the use of
- the unconfigured Outcome repo as an implementation of Outcome, one must now do one of:
- <ol>
- <li>Add Outcome as subdirectory to cmake build.</li>
- <li>Use cmake superbuild (i.e. <code>ExternalProject_Add()</code>) to build and install Outcome into
- a local installation.</li>
- <li>Use one of the single header editions.</li>
- </ol></dd>
- <dt><strong>Breaking change!</strong></dt>
- <dd>For standalone Outcome, the current compiler is now checked for whether it will compile
- code containing C++ Concepts, and if it does, all cmake consumers of Outcome will enable
- C++ Concepts. Set the cmake variable <code>BOOST_OUTCOME_C_CONCEPTS_FLAGS</code> to an empty string to prevent
- auto detection and enabling of C++ Concepts support occurring.</dd>
- <dt><code>BOOST_OUTCOME_TRY</code> operation now hints to the compiler that operation will be successful</dt>
- <dd><a href="https://wg21.link/P1886">P1886 <em>Error speed benchmarking</em></a> showed that there is
- considerable gain in very small functions by hinting to the compiler whether the expression
- is expected to be successful or not. <code>BOOST_OUTCOME_TRY</code> previously did not hint to the compiler
- at all, but now it does. A new suite of macros <code>BOOST_OUTCOME_TRY_FAILURE_LIKELY</code> hint to the
- compiler that failure is expected. If you wish to return to the previously unhinted
- behaviour, define <code>BOOST_OUTCOME_TRY_LIKELY(expr)</code> to <code>(!!expr)</code>.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/199">#199</a></dt>
- <dd>Support for C++ Coroutines has been added. This comes in two parts, firstly there is
- now an <code>BOOST_OUTCOME_CO_TRY()</code> operation suitable for performing the <code>TRY</code> operation from
- within a C++ Coroutine. Secondly, in the header <code>outcome/coroutine_support.hpp</code> there are
- implementations of <code>eager<OutcomeType></code> and <code>lazy<OutcomeType></code> which let you more
- naturally and efficiently use <code>basic_result</code> or <code>basic_outcome</code> from within C++
- Coroutines – specifically, if the result or outcome will construct from an exception
- pointer, exceptions thrown in the coroutine return an errored or excepted result with
- the thrown exception instead of throwing the exception through the coroutine machinery
- (which in current compilers, has a high likelihood of blowing up the program). Both
- <code>eager<T></code> and <code>lazy<T></code> can accept any <code>T</code> as well. Both have been tested and found
- working on VS2019 and clang 9.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/210">#210</a></dt>
- <dd><code>make_error_code()</code> and <code>make_exception_ptr()</code> are now additionally considered for
- compatible copy and move conversions for <code>basic_result<></code>. This lets you construct
- a <code>basic_result<T, E></code> into a <code>basic_result<T, error_code></code>, where <code>E</code> is a
- custom type which has implemented the ADL discovered free function
- <code>error_code make_error_code(E)</code>, but is otherwise unrelated to <code>error_code</code>.
- The same availability applies for <code>exception_ptr</code> with <code>make_exception_ptr()</code> being
- the ADL discovered free function. <code>basic_outcome<></code> has less support for this than
- <code>basic_result<></code> in order to keep constructor count down, but it will accept via
- this mechanism conversions from <code>basic_result<></code> and <code>failure_type<></code>.</dd>
- </dl>
- <h3 id="bug-fixes">Bug fixes:</h3>
- <dl>
- <dt><a href="https://github.com/ned14/outcome/issues/207">#184</a></dt>
- <dd>The detection of <code>[[nodiscard]]</code> support in the compiler was very mildly broken.</dd>
- </dl>
- <hr />
- <h2 id="v2-1-1-19th-august-2019-boost-1-71-release-https-github-com-ned14-outcome-releases-tag-v2-1-1">v2.1.1 19th August 2019 (Boost 1.71) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.1">[release]</a></h2>
- <h3 id="enhancements-1">Enhancements:</h3>
- <dl>
- <dt><a href="https://github.com/ned14/outcome/issues/184">#184</a></dt>
- <dd>As per request from Boost release managers, relocated <code>version.hpp</code> and
- <code>revision.hpp</code> into 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.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/185">#185</a></dt>
- <dd>Add FAQ item explaining issue #185, and why we will do nothing to
- fix it right now.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/189">#189</a></dt>
- <dd>Refactored the <code>BOOST_OUTCOME_TRY</code> implementation to use more clarified
- customisation points capable of accepting very foreign inputs. Removed the
- <code>std::experimental::expected<T, E></code> 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.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/183">#183</a></dt>
- <dd>Added a separate <code>motivation/plug_error_code</code> specifically for Boost.</dd>
- </dl>
- <h3 id="bug-fixes-1">Bug fixes:</h3>
- <dl>
- <dt>-</dt>
- <dd><code>BOOST_OUTCOME_VERSION_MINOR</code> hadn’t been updated to 1.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/181">#181</a></dt>
- <dd>Fix issue #181 where Outcome didn’t actually implement the strong swap guarantee,
- despite being documented as doing so.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/190">#190</a></dt>
- <dd>Fix issue #190 in Boost edition where unit test suite was not runnable from
- the Boost release distro.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/182">#182</a></dt>
- <dd>Fix issue #182 where <code>trait::is_exception_ptr_available<T></code> was always true,
- thus causing much weirdness, like not printing diagnostics and trying to feed
- everything to <code>make_exception_ptr()</code>.</dd>
- <dt><a href="https://github.com/ned14/outcome/issues/192">#194</a></dt>
- <dd>Fix issue #192 where the <code>std::basic_outcome_failure_exception_from_error()</code>
- was being defined twice for translation units which combine standalone and
- Boost Outcome’s.</dd>
- </dl>
- <hr />
- <h2 id="v2-1-12th-apr-2019-boost-1-70-release-https-github-com-ned14-outcome-releases-tag-v2-1">v2.1 12th Apr 2019 (Boost 1.70) <a href="https://github.com/ned14/outcome/releases/tag/v2.1">[release]</a></h2>
- <ul>
- <li><p><a href="https://github.com/ned14/outcome/issues/180">#180</a></p>
- <ul>
- <li><code>success()</code> and <code>failure()</code> now produce types marked <code>[[nodiscard]]</code>.</li>
- </ul></li>
- <li><p><code>include/outcome/outcome.natvis</code> is now namespace permuted like the rest of
- Outcome, so debugging Outcome based code in Visual Studio should look much
- prettier than before.</p></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/162">#162</a></p>
- <ul>
- <li><code>.has_failure()</code> was returning false at times when it should have returned true.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/152">#152</a></p>
- <ul>
- <li>GCC 5 no longer can compile Outcome at all due to <a href="https://stackoverflow.com/questions/45607450/gcc5-nested-variable-template-is-not-a-function-template">https://stackoverflow.com/questions/45607450/gcc5-nested-variable-template-is-not-a-function-template</a>.
- 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.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/150">#150</a></p>
- <ul>
- <li><strong>BREAKING CHANGE</strong> <code>result<T, E></code>, <code>boost_result<T, E></code> and <code>std_result<T, E></code>
- no longer implement hard UB on fetching a value from a valueless instance if <code>E</code> is
- a UDT, they now fail to compile with a useful error message. If you wish hard UB,
- use <code>unchecked<T, E></code>, <code>boost_unchecked<T, E></code> or <code>std_unchecked<T, E></code> instead.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/140">#140</a></p>
- <ul>
- <li>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.</li>
- </ul></li>
- <li><p>Added experimental <code>status_result</code> and <code>status_outcome</code> based on experimental
- <code>status_code</code>.</p></li>
- <li><p>Boost edition is now 100% Boost, so defaults for <code>result</code> and <code>outcome</code> are
- <code>boost::system::error_code::errc_t</code> and <code>boost::exception_ptr</code>. 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 with <code>std</code> types.</p></li>
- <li><p>Renamed ADL discovered customisation point <code>throw_as_system_error_with_payload()</code>
- to <code>outcome_throw_as_system_error_with_payload()</code>.</p></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/135">#135</a></p>
- <ul>
- <li>Added much clearer compile failure when user tries <code>result<T, T></code> or <code>outcome</code>
- where two or more types are identical. Thanks to Andrzej Krzemieński
- for suggesting a technique which combines SFINAE correctness with
- the remaining ability for <code>result<T, T></code> etc to be a valid type, but
- not constructible.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/67">#67</a></p>
- <ul>
- <li>Fixed one of the oldest long open bugs in Outcome, that the noexcept
- unit tests failed on OS X for an unknown reason.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/115">#115</a></p>
- <ul>
- <li>Outcome did not construct correctly from <code>failure_type</code>.</li>
- </ul></li>
- <li><p>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!</p></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/107">#107</a> and <a href="https://github.com/ned14/outcome/issues/116">#116</a></p>
- <ul>
- <li><code>operator==</code> and <code>operator!=</code> now become disabled if the value, error and
- exception types do not implement the same operator.</li>
- <li>Relatedly, both comparison operators simply didn’t work right. Fixed.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/109">#109</a></p>
- <ul>
- <li><code>swap()</code> now has correct <code>noexcept</code> calculation and now correctly orders
- the swaps to be whichever is the throwing swap first.</li>
- </ul></li>
- <li><p>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.</p></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/124">#124</a></p>
- <ul>
- <li><code>BOOST_OUTCOME_TRY</code> is now overloaded and selects <code>void</code> or <code>auto</code> edition
- according to input parameter count.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/120">#120</a></p>
- <ul>
- <li>Fix generation of double underscored temporary variables in
- <code>BOOST_OUTCOME_UNIQUE_NAME</code>, which is UB.</li>
- </ul></li>
- <li><p><a href="https://github.com/ned14/outcome/issues/110">#110</a></p>
- <ul>
- <li>Separated <code>result</code> from its hard coded dependency on the <code><system_error></code> header.</li>
- <li>Renamed <code>result</code> and <code>outcome</code> to <code>basic_result</code> and <code>basic_outcome</code>.</li>
- <li>Renamed <code>result.hpp</code> into <code>basic_result.hpp</code>.</li>
- <li>Moved <code><system_error></code> and <code><exception></code> dependent code into new
- <code>std_result.hpp</code> and <code>std_outcome.hpp</code> header files.</li>
- <li>Added <code>boost_result.hpp</code> and <code>boost_outcome.hpp</code> which use Boost.System
- and Boost.Exception (these are <code>result.hpp</code> and <code>outcome.hpp</code> in the Boost edition).</li>
- </ul></li>
- </ul>
- <hr />
- <h2 id="v2-0-18th-jan-2018-release-https-github-com-ned14-outcome-releases-tag-v2-0-boost-peer-review">v2.0 18th Jan 2018 <a href="https://github.com/ned14/outcome/releases/tag/v2.0-boost-peer-review">[release]</a></h2>
- <ul>
- <li>Boost peer review edition. This is what was reviewed.</li>
- <li>Changelog from v1 can be found in the release notes for this release.</li>
- </ul>
- </div><p><small>Last revised: November 15, 2019 at 15:43:29 UTC</small></p>
- <hr>
- <div class="spirit-nav">
- <a accesskey="p" href="./videos.html"><img src="./images/prev.png" alt="Prev"></a>
- <a accesskey="u" href="./index.html"><img src="./images/up.png" alt="Up"></a>
- <a accesskey="h" href="./index.html"><img src="./images/home.png" alt="Home"></a><a accesskey="n" href="./history.html"><img src="./images/next.png" alt="Next"></a></div></body>
- </html>
|