Brian Silverman | af2eaa8 | 2018-08-04 17:28:31 -0700 | [diff] [blame^] | 1 | [/ |
| 2 | Boost.Optional |
| 3 | |
| 4 | Copyright (c) 2015, 2016 Andrzej Krzemienski |
| 5 | |
| 6 | Distributed under the Boost Software License, Version 1.0. |
| 7 | (See accompanying file LICENSE_1_0.txt or copy at |
| 8 | http://www.boost.org/LICENSE_1_0.txt) |
| 9 | ] |
| 10 | |
| 11 | |
| 12 | [section:relnotes Release Notes] |
| 13 | |
| 14 | [heading Boost Release 1.68] |
| 15 | |
| 16 | * Added member function `has_value()` for compatibility with `std::optional` ([@https://github.com/boostorg/optional/issues/52 issue #52]). |
| 17 | * Added member function `map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> U`. |
| 18 | * Added member function `flat_map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> optonal<U>`. |
| 19 | |
| 20 | |
| 21 | [heading Boost Release 1.67] |
| 22 | |
| 23 | * Fixed [@https://github.com/boostorg/optional/issues/46 issue #46]. |
| 24 | * Fixed `-Wzero-as-null-pointer-constant` warnings. |
| 25 | |
| 26 | |
| 27 | [heading Boost Release 1.66] |
| 28 | |
| 29 | * On newer compilers `optional` is now trivially-copyable for scalar `T`s. This uses a different storage (just `T` rather than `aligned_storage`). We require the compiler to support defaulted functions. |
| 30 | * Changed the implementation of `operator==` to get rid of the `-Wmaybe-uninitialized` false-positive warning from GCC. |
| 31 | |
| 32 | [heading Boost Release 1.63] |
| 33 | * Added two new in-place constructors. They work similarly to `emplace()` functions: they initialize the contained value by perfect-forwarding the obtained arguments. One constructor always initializes the contained value, the other based on a boolean condition. |
| 34 | * Syntax `o = {}` now correctly un-initializes optional, just like in `std::optional`. |
| 35 | * Fixed [@https://svn.boost.org/trac/boost/ticket/12203 Trac #12203]. |
| 36 | * Fixed [@https://svn.boost.org/trac/boost/ticket/12563 Trac #12563]. |
| 37 | |
| 38 | |
| 39 | [heading Boost Release 1.62] |
| 40 | |
| 41 | * Fixed [@https://svn.boost.org/trac/boost/ticket/12179 Trac #12179]. |
| 42 | |
| 43 | |
| 44 | [heading Boost Release 1.61] |
| 45 | |
| 46 | * Now `boost::optional` is specialized for reference parameters. This addresses a couple of issues: |
| 47 | * the `sizeof` of optional reference is that of a pointer, |
| 48 | * some bugs connected to copying optional references are gone, |
| 49 | * all run-time bugs caused by incorrect reference binding on some compilers are now turned into compile-time errors, |
| 50 | * you can swap optional references: it is like swapping pointers: shalow, underlying objects are not affected, |
| 51 | * optional references to abstract types work. |
| 52 | * Documented nested typedefs ([@https://svn.boost.org/trac/boost/ticket/5193 Trac #5193]). |
| 53 | * Made the perfect-forwarding constructor SFINAE-friendly, which fixes [@https://svn.boost.org/trac/boost/ticket/12002 Trac #12002]. However, this only works in the newer platforms that correctly implement C++11 `<type_traits>`. |
| 54 | * Fixed [@https://svn.boost.org/trac/boost/ticket/10445 Trac #10445]. |
| 55 | |
| 56 | |
| 57 | [heading Boost Release 1.60] |
| 58 | |
| 59 | * Changed the implementation of `boost::none` again. Now it is a const object with internal linkage (as any other tag). This fixes [@https://svn.boost.org/trac/boost/ticket/11203 Trac #11203]. |
| 60 | |
| 61 | |
| 62 | [heading Boost Release 1.59] |
| 63 | |
| 64 | * For C++03 compilers, added 0-argument overload for member function `emplace()`, and therewith removed the dependency on `<boost/utility/in_place_factory.hpp>`. |
| 65 | * Fixed [@https://svn.boost.org/trac/boost/ticket/11241 Trac #11241]. |
| 66 | |
| 67 | [heading Boost Release 1.58] |
| 68 | |
| 69 | * `boost::none_t` is no longer convertible from literal `0`. This avoids a bug where `optional<rational<int>> oi = 0;` would initialize an optional object with no contained value. |
| 70 | * Improved the trick that prevents streaming out `optional` without header `optional_io.hpp` by using safe-bool idiom. This addresses [@https://svn.boost.org/trac/boost/ticket/10825 Trac #10825]. |
| 71 | * IOStream operators are now mentioned in documentation. |
| 72 | * Added a way to manually disable move semantics: just define macro `BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES`. This can be used to work around [@https://svn.boost.org/trac/boost/ticket/10399 Trac #10399]. |
| 73 | * It is no longer possible to assign `optional<U>` to `optional<T>` when `U` is not assignable or convertible to `T` ([@https://svn.boost.org/trac/boost/ticket/11087 Trac #11087]). |
| 74 | * Value accessors now work correctly on rvalues of `optional<T&>` ([@https://svn.boost.org/trac/boost/ticket/10839 Trac #10839]). |
| 75 | |
| 76 | |
| 77 | [heading Boost Release 1.57] |
| 78 | |
| 79 | * [@https://github.com/boostorg/optional/pull/9 Git pull #9]: ['"Supply `<string>` to fix C++03 compile error on `logic_error("...")`"]. |
| 80 | |
| 81 | |
| 82 | [heading Boost Release 1.56] |
| 83 | |
| 84 | * Added support for rvalue references. Now `optional<T>` works with moveable but non-copyable `T`'s, |
| 85 | * Improved `swap` (now uses move operations), |
| 86 | * Added function `emplace()`. This is the last of the requests from [@https://svn.boost.org/trac/boost/ticket/1841 Trac #1841], |
| 87 | * `optional` is moveable, including conditional `noexcept` specifications, which make it `move_if_noexcept`-friendly, |
| 88 | * Using explicit operator bool() on platforms that support it ([@https://svn.boost.org/trac/boost/ticket/4227 Trac #4227]) (breaking change), |
| 89 | * Forward declaration of `operator<<(ostream&, optional const&)` to prevent inadvertent incorrect serialization of optional objects, |
| 90 | * Removed deprecated function `reset()` from examples ([@https://svn.boost.org/trac/boost/ticket/9005 Trac #9005]), |
| 91 | * Equality comparison with `boost::none` does not require that `T` be EqualityComparable, |
| 92 | * Optional rvalue references are explicitly disallowed, |
| 93 | * Binding temporaries to optional references is explicitly disallowed (breaking change), |
| 94 | * More ways to access the contained value, functions `value()`, `value_or()`, `value_or_eval()`, |
| 95 | * Updated and reorganized documentation, added tutorial and quick guide sections. |
| 96 | |
| 97 | |
| 98 | |
| 99 | [endsect][/ relnotes] |