• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
3<title>Changelog - Boost.Outcome documentation</title>
4<link rel="stylesheet" href="./css/boost.css" type="text/css">
5<meta name="generator" content="Hugo 0.52 with Boostdoc theme">
6<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
7
8<link rel="icon" href="./images/favicon.ico" type="image/ico"/>
9<body><div class="spirit-nav">
10<a accesskey="p" href="./videos.html"><img src="./images/prev.png" alt="Prev"></a>
11    <a accesskey="u" href="./index.html"><img src="./images/up.png" alt="Up"></a>
12    <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">
13
14  <div class="titlepage"><div><div><h1 style="clear: both">Changelog</h1></div></div></div>
15  <div class="toc"><dl class="toc">
16<dt>
17<dd><dl>
18<dt><a href="#v2-1-4-boost-1-74-release-https-github-com-ned14-outcome-releases-tag-v2-1-4">v2.1.4 ??? (Boost 1.74) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.4">[release]</a></a>
19<dd><dl>
20<dt><a href="#enhancements">Enhancements:</a></dt>
21<dt><a href="#bug-fixes">Bug fixes:</a></dt>
22</dl></dd></dt>
23<dt><a href="#v2-1-3-29th-april-2020-boost-1-73-release-https-github-com-ned14-outcome-releases-tag-v2-1-3">v2.1.3 29th April 2020 (Boost 1.73) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.3">[release]</a></a>
24<dd><dl>
25<dt><a href="#enhancements-1">Enhancements:</a></dt>
26<dt><a href="#bug-fixes-1">Bug fixes:</a></dt>
27</dl></dd></dt>
28<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>
29<dd><dl>
30<dt><a href="#enhancements-2">Enhancements:</a></dt>
31<dt><a href="#bug-fixes-2">Bug fixes:</a></dt>
32</dl></dd></dt>
33<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>
34<dd><dl>
35<dt><a href="#enhancements-3">Enhancements:</a></dt>
36<dt><a href="#bug-fixes-3">Bug fixes:</a></dt>
37</dl></dd></dt>
38<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>
39<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>
40</dl></dd></dt>
41</dl>
42  </div>
43
44
45<hr />
46
47<h2 id="v2-1-4-boost-1-74-release-https-github-com-ned14-outcome-releases-tag-v2-1-4">v2.1.4 ??? (Boost 1.74) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.4">[release]</a></h2>
48
49<div class="notices note" style="background: url('images/note.png') top left no-repeat padding-box padding-box;">
50<div class="notices heading">note</div>
51<div class="notices message"><p>The v2.1 branch is expected to be retired end of 2020, with the v2.2 branch
52becoming the default. You can use the future v2.2 branch now using
53<a href="https://github.com/ned14/outcome/tree/better_optimisation"><code>better_optimisation</code></a>.
54This branch has a number of major breaking changes to Outcome v2.1, see the front page
55for details.</p>
56</div>
57</div>
58
59
60<h3 id="enhancements">Enhancements:</h3>
61
62<dl>
63<dt>BREAKING CHANGE <code>void</code> results and outcomes no longer default construct types during explicit construction</dt>
64<dd>Previously if you explicitly constructed a <code>result&lt;T&gt;</code> from a non-errored
65<code>result&lt;void&gt;</code>, it default constructed <code>T</code>. This was found to cause unhelpful
66surprise, so it has been disabled.</dd>
67<dt>New macro <code>BOOST_OUTCOME_ENABLE_LEGACY_SUPPORT_FOR</code></dt>
68<dd>The macro <a href="./reference/macros/enable_legacy_support_for.html" class="api-reference"><code>BOOST_OUTCOME_ENABLE_LEGACY_SUPPORT_FOR</code></a>
69 can be used to
70enable aliasing of older naming and features to newer naming and features when
71using a newer version of Outcome.</dd>
72<dt>Concepts now have snake case style naming instead of camel case style</dt>
73<dd>When Outcome was first implemented, it was thought that C++ 20 concepts were
74going to have camel case style. This was changed before the C++ 20 release, and
75Outcome&rsquo;s concepts have been renamed similarly. This won&rsquo;t break any code in
76Outcome v2.1, as compatibility aliases are provided. However code compiled
77against Outcome v2.2 will need to be upgraded, unless <code>BOOST_OUTCOME_ENABLE_LEGACY_SUPPORT_FOR</code>
78is set to <code>210</code> or lower.</dd>
79<dt>Concepts now live in <code>BOOST_OUTCOME_V2_NAMESPACE::concepts</code> namespace</dt>
80<dd>Previously concepts lived in the <code>convert</code> namespace, now they live in their
81own namespace.</dd>
82<dt>New concepts <a href="./reference/concepts/basic_result.html" class="api-reference"><code>basic_result&lt;T&gt;</code></a>
83 and <a href="./reference/concepts/basic_outcome.html" class="api-reference"><code>basic_outcome&lt;T&gt;</code></a>
84 added</dt>
85<dd>End users were finding an unhelpful gap in between <a href="./reference/traits/is_basic_result.html" class="api-reference"><code>is_basic_result&lt;T&gt;</code></a>
86
87and <a href="./reference/concepts/value_or_error.html" class="api-reference"><code>value_or_error&lt;T&gt;</code></a>
88 where they wanted a concept that matched
89types which were <code>basic_result</code>, but not exactly one of those. Concepts filling
90that gap were added.</dd>
91<dt>Operation <code>TRY</code> works differently from Outcome v2.2 onwards</dt>
92<dd>This is a severely code breaking change which change the syntax of how one uses
93<code>BOOST_OUTCOME_TRY()</code>. A regular expression suitable for upgrading code can be found in
94the list of changes between Outcome v2.1 and v2.2.</dd>
95</dl>
96
97<h3 id="bug-fixes">Bug fixes:</h3>
98
99<dl>
100<dt><a href="https://github.com/ned14/outcome/issues/224">#224</a></dt>
101<dd>The clang Apple ships in Xcode 11.4 (currently the latest) has not been patched
102with the fixes to LLVM clang that fix <code>noexcept(std::is_constructible&lt;T, void&gt;)</code>
103failing to compile which I originally submitted years ago. So give up waiting on
104Apple to fix their clang, add a workaround to Outcome.</dd>
105<dt>Spare storage could not be used from within no-value policy classes</dt>
106<dd>Due to an obvious brain fart when writing the code at the time, the spare storage
107APIs had the wrong prototype which prevented them working from within policy classes.
108Sorry.</dd>
109<dt>Boost.Outcome should now compile with <code>BOOST_NO_EXCEPTIONS</code> defined</dt>
110<dd>Thanks to Emil, maintainer of Boost.Exception, making a change for me, Boost.Outcome
111should now compile with C++ exceptions globally disabled. You won&rsquo;t be able to use
112<code>boost::exception_ptr</code> as it can&rsquo;t be included if C++ exceptions are globally disabled.</dd>
113</dl>
114
115<hr />
116
117<h2 id="v2-1-3-29th-april-2020-boost-1-73-release-https-github-com-ned14-outcome-releases-tag-v2-1-3">v2.1.3 29th April 2020 (Boost 1.73) <a href="https://github.com/ned14/outcome/releases/tag/v2.1.3">[release]</a></h2>
118
119<h3 id="enhancements-1">Enhancements:</h3>
120
121<dl>
122<dt>Performance of Outcome-based code compiled by clang has been greatly improved</dt>
123<dd><p>The previous implementation of Outcome&rsquo;s status bitfield confused clang&rsquo;s
124optimiser, which caused low quality codegen. Unlike most codegen issues, this was
125noticeably in empirical benchmarks of real world code, as was shown by
126<a href="https://wg21.link/P1886">P1886 <em>Error speed benchmarking</em></a>.</p>
127
128<p>The safe part of the <a href="https://github.com/ned14/outcome/tree/better_optimisation"><code>better_optimisation</code></a>
129Outcome v2.2.0 future branch was merged to Outcome v2.1.3 which includes a new
130status bitfield implementation. This appears to not confuse clang&rsquo;s optimiser,
131and clang 9 produces code which routinely beats GCC 9&rsquo;s code for various canned
132use cases.</p></dd>
133<dt>Precompiled headers are automatically enabled on new enough cmake&rsquo;s for standalone Outcome</dt>
134<dd><p>If on cmake 3.16 or later, its new precompiled headers build support is used
135to tell consumers of the <code>outcome::hl</code> cmake target to precompile Outcome, <strong>if
136and only if</strong> <code>PROJECT_IS_DEPENDENCY</code> is false. <code>PROJECT_IS_DEPENDENCY</code> is set
137by Outcome&rsquo;s CMakeLists.txt if it detects that it was included using
138<code>add_subdirectory()</code>, so for the vast majority of Outcome end users, the use
139of precompiled headers will NOT be enabled.</p>
140
141<p>Exported targets do NOT request precompilation of headers, as it is
142assumed that importers of the Outcome cmake targets will configure their own
143precompiled headers which incorporate Outcome.</p></dd>
144<dt>Installability is now CI tested per commit</dt>
145<dd><p>Due to installability of standalone Outcome (e.g. <code>make install</code>) breaking
146itself rather more frequently than is ideal, installability is now tested on CI
147per commit.</p></dd>
148<dt>Coroutines support has been documented</dt>
149<dd><p>The coroutines support added in v2.1.2 has now been properly documented.</p></dd>
150</dl>
151
152<h3 id="bug-fixes-1">Bug fixes:</h3>
153
154<dl>
155<dt><a href="https://github.com/ned14/outcome/issues/214">#214</a></dt>
156<dd>Newer Concepts implementing compilers were unhappy with the early check for
157destructibility of <code>T</code> and <code>E</code>, so removed template constraints, falling back
158to static assert which runs later in the type instantiation sequence.</dd>
159<dt><a href="https://github.com/ned14/outcome/issues/215">#215</a></dt>
160<dd>For standalone Outcome, <code>CMAKE_TOOLCHAIN_FILE</code> is now passed through during
161dependency superbuild. This should solve build issues for some embedded toolchain
162users.</dd>
163<dt><a href="https://github.com/ned14/outcome/issues/220">#220</a></dt>
164<dd>A false positive undefined behaviour sanitiser failure in some use cases of
165Experimental Outcome was worked around to avoid the failure message.</dd>
166<dt><a href="https://github.com/ned14/outcome/issues/221">#221</a></dt>
167<dd>Restored compatibility with x86 on Windows, which was failing with link errors.
168It was quite surprising that this bug was not reported sooner, but obviously
169almost nobody is using Outcome with x86 on Windows.</dd>
170<dt><a href="https://github.com/ned14/outcome/issues/223">#223</a></dt>
171<dd>Fix a segfault in Debug builds only when cloning a <code>status_code_ptr</code> in
172Experimental.Outcome only.</dd>
173</dl>
174
175<hr />
176
177<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>
178
179<h3 id="enhancements-2">Enhancements:</h3>
180
181<dl>
182<dt>Improved compatibility with cmake tooling</dt>
183<dd>Standalone outcome is now <code>make install</code>-able, and cmake <code>find_package()</code> can find it.
184Note that you must separately install and <code>find_package()</code> Outcome&rsquo;s dependency, quickcpplib,
185else <code>find_package()</code> of Outcome will fail.</dd>
186<dt>Non-permissive parsing is now default in Visual Studio</dt>
187<dd>The default targets in standalone Outcome&rsquo;s cmake now enable non-permissive parsing.
188This was required partially because VS2019 16.3&rsquo;s quite buggy Concepts implementation is
189unusuable in permissive parsing mode. Even then, lazy ADL two phase lookup is broken
190in VS2019 16.3 with <code>/std:latest</code>, you may wish to use an earlier language standard.</dd>
191<dt><strong>Breaking change!</strong></dt>
192<dd>The git submodule mechanism used by standalone Outcome of specifying dependent libraries
193has been replaced with a cmake superbuild of dependencies mechanism instead. Upon cmake
194configure, an internal copy of quickcpplib will be git cloned, built and installed into the
195build directory from where an internal <code>find_package()</code> uses it. This breaks the use of
196the unconfigured Outcome repo as an implementation of Outcome, one must now do one of:
197
198<ol>
199<li>Add Outcome as subdirectory to cmake build.</li>
200<li>Use cmake superbuild (i.e. <code>ExternalProject_Add()</code>) to build and install Outcome into
201a local installation.</li>
202<li>Use one of the single header editions.</li>
203</ol></dd>
204<dt><strong>Breaking change!</strong></dt>
205<dd>For standalone Outcome, the current compiler is now checked for whether it will compile
206code containing C++ Concepts, and if it does, all cmake consumers of Outcome will enable
207C++ Concepts. Set the cmake variable <code>BOOST_OUTCOME_C_CONCEPTS_FLAGS</code> to an empty string to prevent
208auto detection and enabling of C++ Concepts support occurring.</dd>
209<dt><code>BOOST_OUTCOME_TRY</code> operation now hints to the compiler that operation will be successful</dt>
210<dd><a href="https://wg21.link/P1886">P1886 <em>Error speed benchmarking</em></a> showed that there is
211considerable gain in very small functions by hinting to the compiler whether the expression
212is expected to be successful or not. <code>BOOST_OUTCOME_TRY</code> previously did not hint to the compiler
213at all, but now it does. A new suite of macros <code>BOOST_OUTCOME_TRY_FAILURE_LIKELY</code> hint to the
214compiler that failure is expected. If you wish to return to the previously unhinted
215behaviour, define <code>BOOST_OUTCOME_TRY_LIKELY(expr)</code> to <code>(!!expr)</code>.</dd>
216<dt><a href="https://github.com/ned14/outcome/issues/199">#199</a></dt>
217<dd>Support for C++ Coroutines has been added. This comes in two parts, firstly there is
218now an <code>BOOST_OUTCOME_CO_TRY()</code> operation suitable for performing the <code>TRY</code> operation from
219within a C++ Coroutine. Secondly, in the header <code>outcome/coroutine_support.hpp</code> there are
220implementations of <code>eager&lt;OutcomeType&gt;</code> and <code>lazy&lt;OutcomeType&gt;</code> which let you more
221naturally and efficiently use <code>basic_result</code> or <code>basic_outcome</code> from within C++
222Coroutines &ndash; specifically, if the result or outcome will construct from an exception
223pointer, exceptions thrown in the coroutine return an errored or excepted result with
224the thrown exception instead of throwing the exception through the coroutine machinery
225(which in current compilers, has a high likelihood of blowing up the program). Both
226<code>eager&lt;T&gt;</code> and <code>lazy&lt;T&gt;</code> can accept any <code>T</code> as well. Both have been tested and found
227working on VS2019 and clang 9.</dd>
228<dt><a href="https://github.com/ned14/outcome/issues/210">#210</a></dt>
229<dd><code>make_error_code()</code> and <code>make_exception_ptr()</code> are now additionally considered for
230compatible copy and move conversions for <code>basic_result&lt;&gt;</code>. This lets you construct
231a <code>basic_result&lt;T, E&gt;</code> into a <code>basic_result&lt;T, error_code&gt;</code>, where <code>E</code> is a
232custom type which has implemented the ADL discovered free function
233<code>error_code make_error_code(E)</code>, but is otherwise unrelated to <code>error_code</code>.
234The same availability applies for <code>exception_ptr</code> with <code>make_exception_ptr()</code> being
235the ADL discovered free function. <code>basic_outcome&lt;&gt;</code> has less support for this than
236<code>basic_result&lt;&gt;</code> in order to keep constructor count down, but it will accept via
237this mechanism conversions from <code>basic_result&lt;&gt;</code> and <code>failure_type&lt;&gt;</code>.</dd>
238</dl>
239
240<h3 id="bug-fixes-2">Bug fixes:</h3>
241
242<dl>
243<dt><a href="https://github.com/ned14/outcome/issues/207">#184</a></dt>
244<dd>The detection of <code>[[nodiscard]]</code> support in the compiler was very mildly broken.</dd>
245</dl>
246
247<hr />
248
249<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>
250
251<h3 id="enhancements-3">Enhancements:</h3>
252
253<dl>
254<dt><a href="https://github.com/ned14/outcome/issues/184">#184</a></dt>
255<dd>As per request from Boost release managers, relocated <code>version.hpp</code> and
256<code>revision.hpp</code> into detail, and added the Boost licence boilerplate to the top
257of every source file which was missing one (I think). Also took the opportunity
258to run the licence restamping script over all Outcome, so copyright dates are now
259up to date.</dd>
260<dt><a href="https://github.com/ned14/outcome/issues/185">#185</a></dt>
261<dd>Add FAQ item explaining issue #185, and why we will do nothing to
262fix it right now.</dd>
263<dt><a href="https://github.com/ned14/outcome/issues/189">#189</a></dt>
264<dd>Refactored the <code>BOOST_OUTCOME_TRY</code> implementation to use more clarified
265customisation points capable of accepting very foreign inputs. Removed the
266<code>std::experimental::expected&lt;T, E&gt;</code> specialisations, as those are no longer
267necessary. Fixed the documentation for the customisation points which
268previously claimed that they are ADL discovered, which they are not. Added
269a recipe describing how to add in support for foreign input types.</dd>
270<dt><a href="https://github.com/ned14/outcome/issues/183">#183</a></dt>
271<dd>Added a separate <code>motivation/plug_error_code</code> specifically for Boost.</dd>
272</dl>
273
274<h3 id="bug-fixes-3">Bug fixes:</h3>
275
276<dl>
277<dt>-</dt>
278<dd><code>BOOST_OUTCOME_VERSION_MINOR</code> hadn&rsquo;t been updated to 1.</dd>
279<dt><a href="https://github.com/ned14/outcome/issues/181">#181</a></dt>
280<dd>Fix issue #181 where Outcome didn&rsquo;t actually implement the strong swap guarantee,
281despite being documented as doing so.</dd>
282<dt><a href="https://github.com/ned14/outcome/issues/190">#190</a></dt>
283<dd>Fix issue #190 in Boost edition where unit test suite was not runnable from
284the Boost release distro.</dd>
285<dt><a href="https://github.com/ned14/outcome/issues/182">#182</a></dt>
286<dd>Fix issue #182 where <code>trait::is_exception_ptr_available&lt;T&gt;</code> was always true,
287thus causing much weirdness, like not printing diagnostics and trying to feed
288everything to <code>make_exception_ptr()</code>.</dd>
289<dt><a href="https://github.com/ned14/outcome/issues/192">#194</a></dt>
290<dd>Fix issue #192 where the <code>std::basic_outcome_failure_exception_from_error()</code>
291was being defined twice for translation units which combine standalone and
292Boost Outcome&rsquo;s.</dd>
293</dl>
294
295<hr />
296
297<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>
298
299<ul>
300<li><p><a href="https://github.com/ned14/outcome/issues/180">#180</a></p>
301
302<ul>
303<li><code>success()</code> and <code>failure()</code> now produce types marked <code>[[nodiscard]]</code>.</li>
304</ul></li>
305
306<li><p><code>include/outcome/outcome.natvis</code> is now namespace permuted like the rest of
307Outcome, so debugging Outcome based code in Visual Studio should look much
308prettier than before.</p></li>
309
310<li><p><a href="https://github.com/ned14/outcome/issues/162">#162</a></p>
311
312<ul>
313<li><code>.has_failure()</code> was returning false at times when it should have returned true.</li>
314</ul></li>
315
316<li><p><a href="https://github.com/ned14/outcome/issues/152">#152</a></p>
317
318<ul>
319<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>.
320Added explicit version trap for GCC 5 to say it can not work. Note this is not a
321breaking change, GCC 5 was never supported officially in any v2 Outcome.</li>
322</ul></li>
323
324<li><p><a href="https://github.com/ned14/outcome/issues/150">#150</a></p>
325
326<ul>
327<li><strong>BREAKING CHANGE</strong> <code>result&lt;T, E&gt;</code>, <code>boost_result&lt;T, E&gt;</code> and <code>std_result&lt;T, E&gt;</code>
328no longer implement hard UB on fetching a value from a valueless instance if <code>E</code> is
329a UDT, they now fail to compile with a useful error message. If you wish hard UB,
330use <code>unchecked&lt;T, E&gt;</code>, <code>boost_unchecked&lt;T, E&gt;</code> or <code>std_unchecked&lt;T, E&gt;</code> instead.</li>
331</ul></li>
332
333<li><p><a href="https://github.com/ned14/outcome/issues/140">#140</a></p>
334
335<ul>
336<li>Fixed a nasty corner case bug where value type&rsquo;s without a copy constructor
337but with a move constructor would indicate via traits that copy construction
338was available. Thanks to Microsoft&rsquo;s compiler team for reporting this issue.</li>
339</ul></li>
340
341<li><p>Added experimental <code>status_result</code> and <code>status_outcome</code> based on experimental
342<code>status_code</code>.</p></li>
343
344<li><p>Boost edition is now 100% Boost, so defaults for <code>result</code> and <code>outcome</code> are
345<code>boost::system::error_code::errc_t</code> and <code>boost::exception_ptr</code>. Moreover,
346the test suite in the Boost edition now exclusively tests the Boost edition.
347One can, of course, freely use the standalone edition with Boost, and the Boost
348edition with <code>std</code> types.</p></li>
349
350<li><p>Renamed ADL discovered customisation point <code>throw_as_system_error_with_payload()</code>
351to <code>outcome_throw_as_system_error_with_payload()</code>.</p></li>
352
353<li><p><a href="https://github.com/ned14/outcome/issues/135">#135</a></p>
354
355<ul>
356<li>Added much clearer compile failure when user tries <code>result&lt;T, T&gt;</code> or <code>outcome</code>
357where two or more types are identical. Thanks to Andrzej KrzemieĊ„ski
358for suggesting a technique which combines SFINAE correctness with
359the remaining ability for <code>result&lt;T, T&gt;</code> etc to be a valid type, but
360not constructible.</li>
361</ul></li>
362
363<li><p><a href="https://github.com/ned14/outcome/issues/67">#67</a></p>
364
365<ul>
366<li>Fixed one of the oldest long open bugs in Outcome, that the noexcept
367unit tests failed on OS X for an unknown reason.</li>
368</ul></li>
369
370<li><p><a href="https://github.com/ned14/outcome/issues/115">#115</a></p>
371
372<ul>
373<li>Outcome did not construct correctly from <code>failure_type</code>.</li>
374</ul></li>
375
376<li><p>Inexplicably outcome&rsquo;s error + exception constructor had been removed.
377Nobody noticed during the Boost peer review, which is worrying seeing as that
378constructor is needed for one of the main advertised features to Boost!</p></li>
379
380<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>
381
382<ul>
383<li><code>operator==</code> and <code>operator!=</code> now become disabled if the value, error and
384exception types do not implement the same operator.</li>
385<li>Relatedly, both comparison operators simply didn&rsquo;t work right. Fixed.</li>
386</ul></li>
387
388<li><p><a href="https://github.com/ned14/outcome/issues/109">#109</a></p>
389
390<ul>
391<li><code>swap()</code> now has correct <code>noexcept</code> calculation and now correctly orders
392the swaps to be whichever is the throwing swap first.</li>
393</ul></li>
394
395<li><p>Added reference dump of v2.1 ABI so we can check if ABI breakage detection
396works in the next set of changes, plus Travis job to check ABI and API compatibility
397per commit.</p></li>
398
399<li><p><a href="https://github.com/ned14/outcome/issues/124">#124</a></p>
400
401<ul>
402<li><code>BOOST_OUTCOME_TRY</code> is now overloaded and selects <code>void</code> or <code>auto</code> edition
403according to input parameter count.</li>
404</ul></li>
405
406<li><p><a href="https://github.com/ned14/outcome/issues/120">#120</a></p>
407
408<ul>
409<li>Fix generation of double underscored temporary variables in
410<code>BOOST_OUTCOME_UNIQUE_NAME</code>, which is UB.</li>
411</ul></li>
412
413<li><p><a href="https://github.com/ned14/outcome/issues/110">#110</a></p>
414
415<ul>
416<li>Separated <code>result</code> from its hard coded dependency on the <code>&lt;system_error&gt;</code> header.</li>
417<li>Renamed <code>result</code> and <code>outcome</code> to <code>basic_result</code> and <code>basic_outcome</code>.</li>
418<li>Renamed <code>result.hpp</code> into <code>basic_result.hpp</code>.</li>
419<li>Moved <code>&lt;system_error&gt;</code> and <code>&lt;exception&gt;</code> dependent code into new
420<code>std_result.hpp</code> and <code>std_outcome.hpp</code> header files.</li>
421<li>Added <code>boost_result.hpp</code> and <code>boost_outcome.hpp</code> which use Boost.System
422and Boost.Exception (these are <code>result.hpp</code> and <code>outcome.hpp</code> in the Boost edition).</li>
423</ul></li>
424</ul>
425
426<hr />
427
428<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>
429
430<ul>
431<li>Boost peer review edition. This is what was reviewed.</li>
432<li>Changelog from v1 can be found in the release notes for this release.</li>
433</ul>
434
435
436
437        </div><p><small>Last revised: July 07, 2020 at 15:18:51 &#43;0100</small></p>
438<hr>
439<div class="spirit-nav">
440<a accesskey="p" href="./videos.html"><img src="./images/prev.png" alt="Prev"></a>
441    <a accesskey="u" href="./index.html"><img src="./images/up.png" alt="Up"></a>
442    <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>
443</html>
444