- 
          Deprecated support for C++03 and earlier, C++11 will be required in release
          1.86.
        
 
 
- 
          Breaking change: Added specializations
          for 
std::hash<boost::optional<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 suppressing 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 -> optional<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: shallow,
                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.