-
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 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 Trac
#10399
-
It is no longer possible to assign
optional<U> to optional<T> when U
is not assignable or convertible to T
(Trac #11087).
-
Value accessors now work correctly on rvalues of
optional<T&> (Trac
#10839).
-
Git pull #9:
"Supply
<string>
to fix C++03 compile error on logic_error("...")".
-
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
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 (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 (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.