1[/ 2 Boost.Optional 3 4 Copyright (c) 2015 - 2018 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.76] 15 16* Fixed MSVC warning C4702. 17 18[heading Boost Release 1.75] 19 20* `boost::none` is `constexpr`-declared. 21 22* Fixed [@https://github.com/boostorg/optional/issues/78 issue #78]. 23 24[heading Boost Release 1.73] 25 26* Fixed [@https://github.com/boostorg/optional/issues/78 issue #78]. 27* `boost::none` is now declared as an inline variable (on compilers that support it): there is only one instance of `boost::none` across all translation units. 28* Fixed a number of compilation errors in GCC 4.4.7 in `optional<T>` for trivial `T`s. Thanks to Robert Leahy for the fix. For details see [@https://github.com/boostorg/optional/pull/80 pr #78]. 29* Now surpressing warning `-Wweak-vtables`. 30 31[heading Boost Release 1.69] 32 33* Remove deprecation mark from `reset()` method (without arguments). 34* Fixed [@https://github.com/boostorg/optional/issues/59 issue #59]. 35* Fixed bug with initialization of certain wrapper types in clang with -std=c++03. See [@https://github.com/boostorg/optional/pull/64 pr #64]. 36 37[heading Boost Release 1.68] 38 39* Added member function `has_value()` for compatibility with `std::optional` ([@https://github.com/boostorg/optional/issues/52 issue #52]). 40* Added member function `map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> U`. 41* Added member function `flat_map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> optonal<U>`. 42 43 44[heading Boost Release 1.67] 45 46* Fixed [@https://github.com/boostorg/optional/issues/46 issue #46]. 47* Fixed `-Wzero-as-null-pointer-constant` warnings. 48 49 50[heading Boost Release 1.66] 51 52* 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. 53* Changed the implementation of `operator==` to get rid of the `-Wmaybe-uninitialized` false-positive warning from GCC. 54 55[heading Boost Release 1.63] 56* 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. 57* Syntax `o = {}` now correctly un-initializes optional, just like in `std::optional`. 58* Fixed [@https://svn.boost.org/trac/boost/ticket/12203 Trac #12203]. 59* Fixed [@https://svn.boost.org/trac/boost/ticket/12563 Trac #12563]. 60 61 62[heading Boost Release 1.62] 63 64* Fixed [@https://svn.boost.org/trac/boost/ticket/12179 Trac #12179]. 65 66 67[heading Boost Release 1.61] 68 69* Now `boost::optional` is specialized for reference parameters. This addresses a couple of issues: 70 * the `sizeof` of optional reference is that of a pointer, 71 * some bugs connected to copying optional references are gone, 72 * all run-time bugs caused by incorrect reference binding on some compilers are now turned into compile-time errors, 73 * you can swap optional references: it is like swapping pointers: shalow, underlying objects are not affected, 74 * optional references to abstract types work. 75* Documented nested typedefs ([@https://svn.boost.org/trac/boost/ticket/5193 Trac #5193]). 76* 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>`. 77* Fixed [@https://svn.boost.org/trac/boost/ticket/10445 Trac #10445]. 78 79 80[heading Boost Release 1.60] 81 82* 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]. 83 84 85[heading Boost Release 1.59] 86 87* For C++03 compilers, added 0-argument overload for member function `emplace()`, and therewith removed the dependency on `<boost/utility/in_place_factory.hpp>`. 88* Fixed [@https://svn.boost.org/trac/boost/ticket/11241 Trac #11241]. 89 90[heading Boost Release 1.58] 91 92* `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. 93* 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]. 94* IOStream operators are now mentioned in documentation. 95* 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]. 96* 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]). 97* Value accessors now work correctly on rvalues of `optional<T&>` ([@https://svn.boost.org/trac/boost/ticket/10839 Trac #10839]). 98 99 100[heading Boost Release 1.57] 101 102* [@https://github.com/boostorg/optional/pull/9 Git pull #9]: ['"Supply `<string>` to fix C++03 compile error on `logic_error("...")`"]. 103 104 105[heading Boost Release 1.56] 106 107* Added support for rvalue references. Now `optional<T>` works with moveable but non-copyable `T`'s, 108* Improved `swap` (now uses move operations), 109* Added function `emplace()`. This is the last of the requests from [@https://svn.boost.org/trac/boost/ticket/1841 Trac #1841], 110* `optional` is moveable, including conditional `noexcept` specifications, which make it `move_if_noexcept`-friendly, 111* Using explicit operator bool() on platforms that support it ([@https://svn.boost.org/trac/boost/ticket/4227 Trac #4227]) (breaking change), 112* Forward declaration of `operator<<(ostream&, optional const&)` to prevent inadvertent incorrect serialization of optional objects, 113* Removed deprecated function `reset()` from examples ([@https://svn.boost.org/trac/boost/ticket/9005 Trac #9005]), 114* Equality comparison with `boost::none` does not require that `T` be EqualityComparable, 115* Optional rvalue references are explicitly disallowed, 116* Binding temporaries to optional references is explicitly disallowed (breaking change), 117* More ways to access the contained value, functions `value()`, `value_or()`, `value_or_eval()`, 118* Updated and reorganized documentation, added tutorial and quick guide sections. 119 120 121 122[endsect][/ relnotes] 123