1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
[/
Boost.Optional
Copyright (c) 2015 - 2023 Andrzej Krzemienski
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
]
[section:relnotes Release Notes]
[heading Boost Release 1.87]
* *Breaking change.* Dropped support for C++03. C++11 is now the required minimum; at least some C++11 features.
* Dropped dependency on Boost.Utility.
* Dropped dependency on Boost.Predef.
* Dropped dependency on Boost.StaticAssert.
* Dropped dependency on Boost.Move.
* A bit faster implementation of some relational operations.
* *Warning.* In the future releases we intend to introduce the range interface
into `optional`, so that `std::ranges::range<optional<T>>` will be `true`.
This may affect the overload resolution in programs that make decisions based
on predicates such as `std::ranges::range`.
* Tags `in_place_init` and `in_place_init_if` become `inline constexpr` and therewith leave smaller footprint in the executable. This addresses [@https://github.com/boostorg/optional/issues/103 issue #103].
[heading Boost Release 1.85]
* Fixed the implementation for trivial types. Now it is slower, because it always initializes the `T`, but it avoids undefined behavior when `optional<T>` is copied. This fixes [@https://github.com/boostorg/optional/issues/108 issue #108].
* Fixed some `-Wmaybe-uninitialized` warnings in GCC 12. Thanks to Christian Mazakas for the fix.
* Dropped dependency on Boost.Detail.
[heading Boost Release 1.83]
* Deprecated support for C++03 and earlier, C++11 will be required in release 1.86.
[heading Boost Release 1.80]
* [*Breaking change:] Added specializations for `std::hash<boost::optional<T>>`. This fixes [@https://github.com/boostorg/optional/issues/55 issue #55]. You may get compiler errors when your program provides specializations for `std::hash<boost::optional<T>>`. If this happens, define macro `BOOST_OPTIONAL_CONFIG_DO_NOT_SPECIALIZE_STD_HASH` to suppress the specializations of `std::hash` in this library.
[heading Boost Release 1.79]
* Fixed [@https://github.com/boostorg/optional/issues/98 issue #98].
* Fixed [@https://github.com/boostorg/optional/issues/92 issue #92].
* Added support for `BOOST_NO_IOSTREAM`.
* Now aligned storage uses `unsigned char` rather than `char` to avoid UB.
* Now using cv-unqualified `value_type` with placement `new` to avoid UB.
[heading Boost Release 1.76]
* Fixed MSVC warning C4702.
[heading Boost Release 1.75]
* `boost::none` is `constexpr`-declared.
* Fixed [@https://github.com/boostorg/optional/issues/78 issue #78].
[heading Boost Release 1.73]
* Fixed [@https://github.com/boostorg/optional/issues/78 issue #78].
* `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.
* 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].
* Now suppressing warning `-Wweak-vtables`.
[heading Boost Release 1.69]
* Remove deprecation mark from `reset()` method (without arguments).
* Fixed [@https://github.com/boostorg/optional/issues/59 issue #59].
* Fixed bug with initialization of certain wrapper types in clang with -std=c++03. See [@https://github.com/boostorg/optional/pull/64 pr #64].
[heading Boost Release 1.68]
* Added member function `has_value()` for compatibility with `std::optional` ([@https://github.com/boostorg/optional/issues/52 issue #52]).
* Added member function `map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> U`.
* Added member function `flat_map()` for transforming `optional<T>` into `optional<U>` using a function of type `T -> optional<U>`.
[heading Boost Release 1.67]
* Fixed [@https://github.com/boostorg/optional/issues/46 issue #46].
* Fixed `-Wzero-as-null-pointer-constant` warnings.
[heading Boost Release 1.66]
* 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.
* Changed the implementation of `operator==` to get rid of the `-Wmaybe-uninitialized` false-positive warning from GCC.
[heading Boost Release 1.63]
* 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.
* Syntax `o = {}` now correctly un-initializes optional, just like in `std::optional`.
* Fixed [@https://svn.boost.org/trac/boost/ticket/12203 Trac #12203].
* Fixed [@https://svn.boost.org/trac/boost/ticket/12563 Trac #12563].
[heading Boost Release 1.62]
* Fixed [@https://svn.boost.org/trac/boost/ticket/12179 Trac #12179].
[heading Boost Release 1.61]
* Now `boost::optional` is specialized for reference parameters. This addresses a couple of issues:
* the `sizeof` of optional reference is that of a pointer,
* some bugs connected to copying optional references are gone,
* all run-time bugs caused by incorrect reference binding on some compilers are now turned into compile-time errors,
* you can swap optional references: it is like swapping pointers: shallow, underlying objects are not affected,
* optional references to abstract types work.
* Documented nested typedefs ([@https://svn.boost.org/trac/boost/ticket/5193 Trac #5193]).
* 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>`.
* Fixed [@https://svn.boost.org/trac/boost/ticket/10445 Trac #10445].
[heading Boost Release 1.60]
* 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].
[heading Boost Release 1.59]
* For C++03 compilers, added 0-argument overload for member function `emplace()`, and therewith removed the dependency on `<boost/utility/in_place_factory.hpp>`.
* Fixed [@https://svn.boost.org/trac/boost/ticket/11241 Trac #11241].
[heading Boost Release 1.58]
* `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.
* 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].
* IOStream operators are now mentioned in documentation.
* 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].
* 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]).
* Value accessors now work correctly on rvalues of `optional<T&>` ([@https://svn.boost.org/trac/boost/ticket/10839 Trac #10839]).
[heading Boost Release 1.57]
* [@https://github.com/boostorg/optional/pull/9 Git pull #9]: ['"Supply `<string>` to fix C++03 compile error on `logic_error("...")`"].
[heading Boost Release 1.56]
* Added support for rvalue references. Now `optional<T>` works with moveable but non-copyable `T`'s,
* Improved `swap` (now uses move operations),
* Added function `emplace()`. This is the last of the requests from [@https://svn.boost.org/trac/boost/ticket/1841 Trac #1841],
* `optional` is moveable, including conditional `noexcept` specifications, which make it `move_if_noexcept`-friendly,
* Using explicit operator bool() on platforms that support it ([@https://svn.boost.org/trac/boost/ticket/4227 Trac #4227]) (breaking change),
* Forward declaration of `operator<<(ostream&, optional const&)` to prevent inadvertent incorrect serialization of optional objects,
* Removed deprecated function `reset()` from examples ([@https://svn.boost.org/trac/boost/ticket/9005 Trac #9005]),
* Equality comparison with `boost::none` does not require that `T` be EqualityComparable,
* Optional rvalue references are explicitly disallowed,
* Binding temporaries to optional references is explicitly disallowed (breaking change),
* More ways to access the contained value, functions `value()`, `value_or()`, `value_or_eval()`,
* Updated and reorganized documentation, added tutorial and quick guide sections.
[endsect][/ relnotes]
|