Changed the implementation of <codeclass="computeroutput"><spanclass="identifier">boost</span><spanclass="special">::</span><spanclass="identifier">none</span></code>:
now it is a constant with internal linkage. This addresses <ahref="https://svn.boost.org/trac/boost/ticket/11203"target="_top">Trac
#11203</a>.
</li>
<liclass="listitem">
Now <codeclass="computeroutput"><spanclass="identifier">boost</span><spanclass="special">::</span><spanclass="identifier">optional</span></code> is specialized for reference
parameters. This way the <codeclass="computeroutput"><spanclass="keyword">sizeof</span></code>
of optional reference is that of a pointer, and a number of bugs is avoided.
For C++03 compilers, added 0-argument overload for member function <codeclass="computeroutput"><spanclass="identifier">emplace</span><spanclass="special">()</span></code>,
and therewith removed the dependency on <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">utility</span><spanclass="special">/</span><spanclass="identifier">in_place_factory</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code>.
<codeclass="computeroutput"><spanclass="identifier">boost</span><spanclass="special">::</span><spanclass="identifier">none_t</span></code> is no longer convertible from
literal <codeclass="computeroutput"><spanclass="number">0</span></code>. This avoids a bug
where <codeclass="computeroutput"><spanclass="identifier">optional</span><spanclass="special"><</span><spanclass="identifier">rational</span><spanclass="special"><</span><spanclass="keyword">int</span><spanclass="special">>></span><spanclass="identifier">oi</span><spanclass="special">=</span><spanclass="number">0</span><spanclass="special">;</span></code> would
initialize an optional object with no contained value.
Improved the trick that prevents streaming out <codeclass="computeroutput"><spanclass="identifier">optional</span></code>
without header <codeclass="computeroutput"><spanclass="identifier">optional_io</span><spanclass="special">.</span><spanclass="identifier">hpp</span></code>
by using safe-bool idiom. This addresses <ahref="https://svn.boost.org/trac/boost/ticket/10825"target="_top">Trac
Added a way to manually disable move semantics: just define macro <codeclass="computeroutput"><spanclass="identifier">BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES</span></code>.
This can be used to work around <ahref="https://svn.boost.org/trac/boost/ticket/10399"target="_top">Trac
It is no longer possible to assign <codeclass="computeroutput"><spanclass="identifier">optional</span><spanclass="special"><</span><spanclass="identifier">U</span><spanclass="special">></span></code> to <codeclass="computeroutput"><spanclass="identifier">optional</span><spanclass="special"><</span><spanclass="identifier">T</span><spanclass="special">></span></code> when <codeclass="computeroutput"><spanclass="identifier">U</span></code>
Value accessors now work correctly on rvalues of <codeclass="computeroutput"><spanclass="identifier">optional</span><spanclass="special"><</span><spanclass="identifier">T</span><spanclass="special">&></span></code> (<ahref="https://svn.boost.org/trac/boost/ticket/10839"target="_top">Trac
to fix C++03 compile error on <codeclass="computeroutput"><spanclass="identifier">logic_error</span><spanclass="special">(</span><spanclass="string">"..."</span><spanclass="special">)</span></code>"</em></span>.
Added support for rvalue references. Now <codeclass="computeroutput"><spanclass="identifier">optional</span><spanclass="special"><</span><spanclass="identifier">T</span><spanclass="special">></span></code> works with moveable but non-copyable
Added function <codeclass="computeroutput"><spanclass="identifier">emplace</span><spanclass="special">()</span></code>. This is the last of the requests from
which make it <codeclass="computeroutput"><spanclass="identifier">move_if_noexcept</span></code>-friendly,
</li>
<liclass="listitem">
Using explicit operator bool() on platforms that support it (<ahref="https://svn.boost.org/trac/boost/ticket/4227"target="_top">Trac
#4227</a>) (breaking change),
</li>
<liclass="listitem">
Forward declaration of <codeclass="computeroutput"><spanclass="keyword">operator</span><spanclass="special"><<(</span><spanclass="identifier">ostream</span><spanclass="special">&,</span><spanclass="identifier">optional</span>
to prevent inadvertent incorrect serialization of optional objects,
</li>
<liclass="listitem">
Removed deprecated function <codeclass="computeroutput"><spanclass="identifier">reset</span><spanclass="special">()</span></code> from examples (<ahref="https://svn.boost.org/trac/boost/ticket/9005"target="_top">Trac
#9005</a>),
</li>
<liclass="listitem">
Equality comparison with <codeclass="computeroutput"><spanclass="identifier">boost</span><spanclass="special">::</span><spanclass="identifier">none</span></code>
does not require that <codeclass="computeroutput"><spanclass="identifier">T</span></code>
be EqualityComparable,
</li>
<liclass="listitem">
Optional rvalue references are explicitly disallowed,
</li>
<liclass="listitem">
Binding temporaries to optional references is explicitly disallowed (breaking
change),
</li>
<liclass="listitem">
More ways to access the contained value, functions <codeclass="computeroutput"><spanclass="identifier">value</span><spanclass="special">()</span></code>, <codeclass="computeroutput"><spanclass="identifier">value_or</span><spanclass="special">()</span></code>, <codeclass="computeroutput"><spanclass="identifier">value_or_eval</span><spanclass="special">()</span></code>,
</li>
<liclass="listitem">
Updated and reorganized documentation, added tutorial and quick guide sections.
<tdalign="right"><divclass="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p>