-
Now
boost::optional
is specialized for reference
parameters. This way the sizeof
of optional reference is that of a pointer, and a number of bugs is avoided.
-
Changed the implementation of
boost::none
again. Now it is a const object with internal linkage (as any other tag).
This fixes Trac
#11203.
-
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 Trac
#11241.
-
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.