-
Breaking change: Added specializations
for
std::hash<boost::opitonal<T>>.
This fixes 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.
-
Fixed issue
#98.
-
Fixed 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.
-
Fixed MSVC warning C4702.
-
boost::none is constexpr-declared.
-
Fixed issue
#78.
-
Fixed 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 Ts.
Thanks to Robert Leahy for the fix. For details see pr
#78.
-
Now surpressing warning
-Wweak-vtables.
-
Remove deprecation mark from
reset() method (without arguments).
-
Fixed issue
#59.
-
Fixed bug with initialization of certain wrapper types in clang with -std=c++03.
See pr #64.
-
Added member function
has_value() for compatibility with std::optional (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 -> optonal<U>.
-
Fixed issue
#46.
-
Fixed
-Wzero-as-null-pointer-constant warnings.
-
On newer compilers
optional
is now trivially-copyable for scalar Ts.
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.
-
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 Trac #12203.
-
Fixed Trac #12563.
-
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: shalow,
underlying objects are not affected,
-
optional references to abstract types work.
-
Documented nested typedefs (Trac
#5193).
-
Made the perfect-forwarding constructor SFINAE-friendly, which fixes Trac #12002.
However, this only works in the newer platforms that correctly implement
C++11
<type_traits>.
-
Fixed Trac #10445.
-
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.