|
Boost-Commit : |
From: matias.capeletto_at_[hidden]
Date: 2008-02-14 14:35:02
Author: matias
Date: 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
New Revision: 43257
URL: http://svn.boost.org/trac/boost/changeset/43257
Log:
optional docs new version
Removed:
branches/release/libs/optional/doc/html/images/callouts/1.png
branches/release/libs/optional/doc/html/images/callouts/10.png
branches/release/libs/optional/doc/html/images/callouts/11.png
branches/release/libs/optional/doc/html/images/callouts/12.png
branches/release/libs/optional/doc/html/images/callouts/13.png
branches/release/libs/optional/doc/html/images/callouts/14.png
branches/release/libs/optional/doc/html/images/callouts/15.png
branches/release/libs/optional/doc/html/images/callouts/2.png
branches/release/libs/optional/doc/html/images/callouts/3.png
branches/release/libs/optional/doc/html/images/callouts/4.png
branches/release/libs/optional/doc/html/images/callouts/5.png
branches/release/libs/optional/doc/html/images/callouts/6.png
branches/release/libs/optional/doc/html/images/callouts/7.png
branches/release/libs/optional/doc/html/images/callouts/8.png
branches/release/libs/optional/doc/html/images/callouts/9.png
branches/release/libs/optional/doc/html/images/caution.png
branches/release/libs/optional/doc/html/images/home.png
branches/release/libs/optional/doc/html/images/important.png
branches/release/libs/optional/doc/html/images/next.png
branches/release/libs/optional/doc/html/images/note.png
branches/release/libs/optional/doc/html/images/prev.png
branches/release/libs/optional/doc/html/images/tip.png
branches/release/libs/optional/doc/html/images/up.png
branches/release/libs/optional/doc/html/images/warning.png
branches/release/libs/optional/doc/optional.html
Properties modified:
branches/release/libs/optional/doc/html/HTML.manifest (props changed)
Text files modified:
branches/release/libs/optional/doc/Jamfile.v2 | 6 ++-
branches/release/libs/optional/doc/html/boost_optional/a_note_about_optional_bool_.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/acknowledgments.html | 30 +++++++++-------
branches/release/libs/optional/doc/html/boost_optional/dependencies_and_portability.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/detailed_semantics.html | 74 ++++++++++++++++++++++-----------------
branches/release/libs/optional/doc/html/boost_optional/development.html | 45 +++++++++++------------
branches/release/libs/optional/doc/html/boost_optional/examples.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/exception_safety_guarantees.html | 28 ++++++++------
branches/release/libs/optional/doc/html/boost_optional/implementation_notes.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/in_place_factories.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/optional_references.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/rebinding_semantics_for_assignment_of_optional_references.html | 28 ++++++++------
branches/release/libs/optional/doc/html/boost_optional/synopsis.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/boost_optional/type_requirements.html | 26 ++++++++-----
branches/release/libs/optional/doc/html/index.html | 41 +++++++++++++++-------
branches/release/libs/optional/doc/optional.qbk | 5 --
branches/release/libs/optional/doc/reference.qbk | 1
branches/release/libs/optional/index.html | 6 +-
18 files changed, 268 insertions(+), 204 deletions(-)
Modified: branches/release/libs/optional/doc/Jamfile.v2
==============================================================================
--- branches/release/libs/optional/doc/Jamfile.v2 (original)
+++ branches/release/libs/optional/doc/Jamfile.v2 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -21,8 +21,10 @@
:
optional
:
- <xsl:param>toc.max.depth=1
- <xsl:param>toc.section.depth=1
+ <xsl:param>boost.root=../../../..
+ <xsl:param>boost.libraries=../../../libraries.htm
+ <xsl:param>toc.max.depth=2
+ <xsl:param>toc.section.depth=2
<xsl:param>chunk.section.depth=1
;
Modified: branches/release/libs/optional/doc/html/boost_optional/a_note_about_optional_bool_.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/a_note_about_optional_bool_.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/a_note_about_optional_bool_.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -12,17 +12,17 @@
Guarantees">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="in_place_factories.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="exception_safety_guarantees.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="in_place_factories.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -74,11 +74,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="in_place_factories.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="exception_safety_guarantees.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="in_place_factories.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/acknowledgments.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/acknowledgments.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/acknowledgments.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -10,24 +10,24 @@
and Portability">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="dependencies_and_portability.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
+<a accesskey="p" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_optional.acknowledgments"></a>Acknowledgments
</h2></div></div></div>
<a name="boost_optional.acknowledgments.pre_formal_review"></a><h4>
-<a name="id2644860"></a>
+<a name="id2645003"></a>
<a href="acknowledgments.html#boost_optional.acknowledgments.pre_formal_review">Pre-formal
review</a>
</h4>
@@ -66,7 +66,7 @@
</li>
</ul></div>
<a name="boost_optional.acknowledgments.post_formal_review"></a><h4>
-<a name="id2644931"></a>
+<a name="id2645073"></a>
<a href="acknowledgments.html#boost_optional.acknowledgments.post_formal_review">Post-formal
review</a>
</h4>
@@ -112,11 +112,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="dependencies_and_portability.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
+<a accesskey="p" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/dependencies_and_portability.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/dependencies_and_portability.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/dependencies_and_portability.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -11,17 +11,17 @@
<link rel="next" href="acknowledgments.html" title="Acknowledgments">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="implementation_notes.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="implementation_notes.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -36,11 +36,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="implementation_notes.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="implementation_notes.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/detailed_semantics.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/detailed_semantics.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/detailed_semantics.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -10,17 +10,17 @@
<link rel="next" href="examples.html" title="Examples">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="synopsis.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="examples.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="synopsis.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="examples.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -29,36 +29,42 @@
<p>
Because <code class="computeroutput"><span class="identifier">T</span></code> might be of reference
type, in the sequel, those entries whose semantic depends on <code class="computeroutput"><span class="identifier">T</span></code> being of reference type or not will be
- distinguished using the following convention: * If the entry reads: <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span></code><span class="emphasis"><em>(not a ref)</em></span><code class="computeroutput"><span class="special">></span></code>, the description corresponds only to the
- case where <code class="computeroutput"><span class="identifier">T</span></code> is not of reference
- type. * If the entry reads: <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span></code>,
- the description corresponds only to the case where <code class="computeroutput"><span class="identifier">T</span></code>
- is of reference type. * If the entry reads: <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code>,
- the description is the same for both cases.
+ distinguished using the following convention:
</p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ If the entry reads: <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span></code><span class="emphasis"><em>(not
+ a ref)</em></span><code class="computeroutput"><span class="special">></span></code>, the description
+ corresponds only to the case where <code class="computeroutput"><span class="identifier">T</span></code>
+ is not of reference type.
+ </li>
+<li>
+ If the entry reads: <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span></code>,
+ the description corresponds only to the case where <code class="computeroutput"><span class="identifier">T</span></code>
+ is of reference type.
+ </li>
+<li>
+ If the entry reads: <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code>,
+ the description is the same for both cases.
+ </li>
+</ul></div>
<div class="note"><table border="0" summary="Note">
<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../images/note.png"></td>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
-<tr><td align="left" valign="top">
-<p>
- </p>
-<p>
- The following section contains various <code class="computeroutput"><span class="identifier">assert</span><span class="special">()</span></code> which are used only to show the postconditions
- as sample code. It is not implied that the type <code class="computeroutput"><span class="identifier">T</span></code>
- must support each particular expression but that if the expression is supported,
- the implied condition holds.
- </p>
-<p>
- </p>
-</td></tr>
+<tr><td align="left" valign="top"><p>
+ The following section contains various <code class="computeroutput"><span class="identifier">assert</span><span class="special">()</span></code> which are used only to show the postconditions
+ as sample code. It is not implied that the type <code class="computeroutput"><span class="identifier">T</span></code>
+ must support each particular expression but that if the expression is supported,
+ the implied condition holds.
+ </p></td></tr>
</table></div>
<p>
<span class="inlinemediaobject"><img src="../images/space.png" alt="space"></span>
</p>
<a name="boost_optional.detailed_semantics.optional_class_member_functions"></a><h4>
-<a name="id2620116"></a>
+<a name="id2620257"></a>
<a href="detailed_semantics.html#boost_optional.detailed_semantics.optional_class_member_functions">optional
class member functions</a>
</h4>
@@ -1334,7 +1340,7 @@
<span class="inlinemediaobject"><img src="../images/space.png" alt="space"></span>
</p>
<a name="boost_optional.detailed_semantics.free_functions"></a><h4>
-<a name="id2633284"></a>
+<a name="id2633426"></a>
<a href="detailed_semantics.html#boost_optional.detailed_semantics.free_functions">Free functions</a>
</h4>
<p>
@@ -1693,11 +1699,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="synopsis.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="examples.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="synopsis.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="examples.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/development.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/development.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/development.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -10,17 +10,17 @@
<link rel="next" href="synopsis.html" title="Synopsis">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -292,7 +292,7 @@
itself which are supported by a special interface.
</p>
<a name="boost_optional.development.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_untitialized_optional_objects__the_operators___and___gt_"></a><h5>
-<a name="id2615242"></a>
+<a name="id2615375"></a>
<a href="development.html#boost_optional.development.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_untitialized_optional_objects__the_operators___and___gt_">Lexically-hinted
Value Access in the presence of possibly untitialized optional objects: The
operators * and -></a>
@@ -357,7 +357,7 @@
incarnated by pointers.
</p>
<a name="boost_optional.development.the_interface.optional_lt_t_gt__as_a_model_of_optionalpointee"></a><h5>
-<a name="id2615580"></a>
+<a name="id2615714"></a>
<a href="development.html#boost_optional.development.the_interface.optional_lt_t_gt__as_a_model_of_optionalpointee">Optional<T>
as a model of OptionalPointee</a>
</h5>
@@ -369,19 +369,12 @@
</p>
<div class="warning"><table border="0" summary="Warning">
<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../images/warning.png"></td>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/html/images/warning.png"></td>
<th align="left">Warning</th>
</tr>
-<tr><td align="left" valign="top">
-<p>
- </p>
-<p>
- However, it is particularly important to note that <code class="computeroutput"><span class="identifier">optional</span><span class="special"><></span></code> objects are not pointers. <span class="underline"><code class="computeroutput"><span class="identifier">optional</span><span class="special"><></span></code> is not, and does not model, a
- pointer</span>.
- </p>
-<p>
- </p>
-</td></tr>
+<tr><td align="left" valign="top"><p>
+ However, it is particularly important to note that <code class="computeroutput"><span class="identifier">optional</span><span class="special"><></span></code> objects are not pointers. <span class="underline"><code class="computeroutput"><span class="identifier">optional</span><span class="special"><></span></code> is not, and does not model, a pointer</span>.
+ </p></td></tr>
</table></div>
<p>
For instance, <code class="computeroutput"><span class="identifier">optional</span><span class="special"><></span></code>
@@ -405,11 +398,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="synopsis.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/examples.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/examples.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/examples.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -10,17 +10,17 @@
<link rel="next" href="optional_references.html" title="Optional references">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="detailed_semantics.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="detailed_semantics.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -141,11 +141,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="detailed_semantics.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="detailed_semantics.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/exception_safety_guarantees.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/exception_safety_guarantees.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/exception_safety_guarantees.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -12,17 +12,17 @@
<link rel="next" href="type_requirements.html" title="Type requirements">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="a_note_about_optional_bool_.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="type_requirements.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="type_requirements.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -116,7 +116,7 @@
<span class="special">}</span>
</pre>
<a name="boost_optional.exception_safety_guarantees.swap"></a><h4>
-<a name="id2644335"></a>
+<a name="id2644478"></a>
<a href="exception_safety_guarantees.html#boost_optional.exception_safety_guarantees.swap">Swap</a>
</h4>
<p>
@@ -130,11 +130,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="a_note_about_optional_bool_.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="type_requirements.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="type_requirements.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/implementation_notes.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/implementation_notes.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/implementation_notes.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -11,17 +11,17 @@
and Portability">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="type_requirements.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="type_requirements.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -42,11 +42,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="type_requirements.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="type_requirements.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/in_place_factories.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/in_place_factories.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/in_place_factories.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -12,17 +12,17 @@
optional<bool>">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="a_note_about_optional_bool_.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -190,11 +190,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="a_note_about_optional_bool_.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="a_note_about_optional_bool_.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/optional_references.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/optional_references.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/optional_references.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -11,17 +11,17 @@
semantics for assignment of optional references">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="examples.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="examples.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -72,11 +72,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="examples.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="examples.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/rebinding_semantics_for_assignment_of_optional_references.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/rebinding_semantics_for_assignment_of_optional_references.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/rebinding_semantics_for_assignment_of_optional_references.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -11,17 +11,17 @@
<link rel="next" href="in_place_factories.html" title="In-Place Factories">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="optional_references.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="in_place_factories.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="in_place_factories.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -75,7 +75,7 @@
<span class="identifier">assert</span><span class="special">(</span><span class="identifier">b</span><span class="special">==</span><span class="number">3</span><span class="special">);</span>
</pre>
<a name="boost_optional.rebinding_semantics_for_assignment_of_optional_references.rationale"></a><h4>
-<a name="id2639932"></a>
+<a name="id2640074"></a>
<a href="rebinding_semantics_for_assignment_of_optional_references.html#boost_optional.rebinding_semantics_for_assignment_of_optional_references.rationale">Rationale</a>
</h4>
<p>
@@ -141,11 +141,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="optional_references.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="in_place_factories.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="optional_references.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="in_place_factories.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/synopsis.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/synopsis.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/synopsis.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -10,17 +10,17 @@
<link rel="next" href="detailed_semantics.html" title="Detailed Semantics">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="development.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="development.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -137,11 +137,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="development.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="development.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: branches/release/libs/optional/doc/html/boost_optional/type_requirements.html
==============================================================================
--- branches/release/libs/optional/doc/html/boost_optional/type_requirements.html (original)
+++ branches/release/libs/optional/doc/html/boost_optional/type_requirements.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -11,17 +11,17 @@
<link rel="next" href="implementation_notes.html" title="Implementation Notes">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="exception_safety_guarantees.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="implementation_notes.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation_notes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -40,11 +40,15 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><small>Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</small></td>
+<td align="right"><div class="copyright-footer">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="exception_safety_guarantees.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="implementation_notes.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation_notes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>
Deleted: branches/release/libs/optional/doc/html/images/callouts/1.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/10.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/11.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/12.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/13.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/14.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/15.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/2.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/3.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/4.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/5.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/6.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/7.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/8.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/callouts/9.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/caution.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/home.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/important.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/next.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/note.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/prev.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/tip.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/up.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/optional/doc/html/images/warning.png
==============================================================================
Binary file. No diff available.
Modified: branches/release/libs/optional/doc/html/index.html
==============================================================================
--- branches/release/libs/optional/doc/html/index.html (original)
+++ branches/release/libs/optional/doc/html/index.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -8,16 +8,16 @@
<link rel="next" href="boost_optional/development.html" title="Development">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%">
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../boost.png"></td>
-<td align="center">Home</td>
-<td align="center">Libraries</td>
-<td align="center">People</td>
-<td align="center">FAQ</td>
-<td align="center">More</td>
-</table>
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
<hr>
-<div class="spirit-nav"><a accesskey="n" href="boost_optional/development.html"><img src="images/next.png" alt="Next"></a></div>
+<div class="spirit-nav"><a accesskey="n" href="boost_optional/development.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
<div class="chapter" lang="en">
<div class="titlepage"><div>
<div><h2 class="title">
@@ -27,7 +27,7 @@
</h3></div></div>
<div><p class="copyright">Copyright © 2003 -2007 Fernando Luis Cacciola Carballal</p></div>
<div><div class="legalnotice">
-<a name="id2604804"></a><p>
+<a name="id2604939"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
</p>
@@ -38,9 +38,24 @@
<dl>
<dt><span class="section">Motivation</span></dt>
<dt><span class="section">Development</span></dt>
+<dd><dl>
+<dt><span class="section">The models</span></dt>
+<dt><span class="section">The semantics</span></dt>
+<dt><span class="section">The Interface</span></dt>
+</dl></dd>
<dt><span class="section">Synopsis</span></dt>
<dt><span class="section">Detailed Semantics</span></dt>
<dt><span class="section">Examples</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.optional_return_values">Optional
+ return values</a></span></dt>
+<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.optional_local_variables">Optional
+ local variables</a></span></dt>
+<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.optional_data_members">Optional
+ data members</a></span></dt>
+<dt><span class="section"><a href="boost_optional/examples.html#boost_optional.examples.bypassing_expensive_unnecessary_default_construction">Bypassing
+ expensive unnecessary default construction</a></span></dt>
+</dl></dd>
<dt><span class="section">Optional references</span></dt>
<dt><span class="section"><a href="boost_optional/rebinding_semantics_for_assignment_of_optional_references.html">Rebinding
semantics for assignment of optional references</a></span></dt>
@@ -159,10 +174,10 @@
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><small><p>Last revised: May 29, 2007 at 06:31:03 GMT</p></small></td>
-<td align="right"><small></small></td>
+<td align="left"><p><small>Last revised: February 12, 2008 at 22:47:14 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
-<div class="spirit-nav"><a accesskey="n" href="boost_optional/development.html"><img src="images/next.png" alt="Next"></a></div>
+<div class="spirit-nav"><a accesskey="n" href="boost_optional/development.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
</body>
</html>
Deleted: branches/release/libs/optional/doc/optional.html
==============================================================================
--- branches/release/libs/optional/doc/optional.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
+++ (empty file)
@@ -1,1803 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//SoftQuad Software//DTD HoTMetaL PRO 5.0::19981217::extensions to HTML 4.0//EN" "hmpro5.dtd">
-
-<HTML>
-
-<HEAD>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
-<LINK REL="stylesheet" TYPE="text/css" HREF="../../../boost.css">
-<TITLE>Header </TITLE>
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080">
-<H2><IMG SRC="../../../boost.png" WIDTH="276" HEIGHT="86">Header <<A
-HREF="../../../boost/optional/optional.hpp">boost/optional/optional.hpp</A>> </H2>
-
-<H2>Contents</H2>
-<DL CLASS="page-index">
- <DT>Motivation</DT>
- <DT>Development</DT>
- <DT>Synopsis</DT>
- <DT>Semantics</DT>
- <DT>Examples</DT>
- <DT>Optional references</DT>
- <DT>Rebinding semantics for assignment of optional references</DT>
- <DT>none_t and none</DT>
- <DT>In-Place Factories</DT>
- <DT>A note about optional<bool></DT>
- <DT>Exception Safety Guarantees</DT>
- <DT>Type requirements</DT>
- <DT>Implementation Notes</DT>
- <DT>Dependencies and Portability</DT>
- <DT>Acknowledgment</DT>
-</DL>
-
-<HR>
-
-<H2><A NAME="mot"></A>Motivation</H2>
-
-<P>Consider these functions which should return a value but which might not have
- a value to return:</P>
-<pre>(A) double sqrt(double n );
-(B) char get_async_input();
-(C) point polygon::get_any_point_effectively_inside();</pre>
-<P>There are different approaches to the issue of not having a value to return.</P>
-<P>A typical approach is to consider the existence of a valid return value as
- a postcondition, so that if the function cannot compute the value to return,
- it has either undefined behavior (and can use assert in a debug build)
- or uses a runtime check and throws an exception if the postcondition is violated.
- This is a reasonable choice for example, for function (A), because the
- lack of a proper return value is directly related to an invalid parameter (out
- of domain argument), so it is appropriate to require the callee to supply only
- parameters in a valid domain for execution to continue normally.</P>
-<P>However, function (B), because of its asynchronous nature, does not fail just
- because it can't find a value to return; so it is incorrect to consider
- such a situation an error and assert or throw an exception. This function must
- return, and somehow, must tell the callee that it is not returning a meaningful
- value.</P>
-<P>A similar situation occurs with function (C): it is conceptually an error to
- ask a <i>null-area</i> polygon to return a point inside itself, but in many
- applications, it is just impractical for performance reasons to treat this as
- an error (because detecting that the polygon has no area might be too expensive
- to be required to be tested previously), and either an arbitrary point (typically
- at infinity) is returned, or some efficient way to tell the callee that there
- is no such point is used.</P>
-<P>There are various mechanisms to let functions communicate that the returned
- value is not valid. One such mechanism, which is quite common since it has zero
- or negligible overhead, is to use a special value which is reserved to communicate
- this. Classical examples of such special values are EOF, string::npos, points
- at infinity, etc...</P>
-<P>When those values exist, i.e. the return type can hold all meaningful values
- <i>plus</i> the <i>signal</i> value, this mechanism is quite appropriate and
- well known. Unfortunately, there are cases when such values do not exist. In
- these cases, the usual alternative is either to use a wider type, such as 'int'
- in place of 'char'; or a compound type, such as std::pair<point,bool>.
-</P>
-<P>Returning a std::pair<T,bool>, thus attaching a boolean flag to the result
- which indicates if the result is meaningful, has the advantage that can be turned
- into a consistent idiom since the first element of the pair can be whatever
- the function would conceptually return. For example, the last two functions
- could have the following interface:</P>
-<pre>std::pair<char,bool> get_async_input();
-std::pair<point,bool> polygon::get_any_point_effectively_inside();</pre>
-<p>These functions use a consistent interface for dealing with possibly inexistent
- results:</p>
-<pre>std::pair<point,bool> p = poly.get_any_point_effectively_inside();
-if ( p.second )
- flood_fill(p.first);
-</pre>
-
-<P>However, not only is this quite a burden syntactically, it is also error
- prone since the user can easily use the function result (first element of the
- pair) without ever checking if it has a valid value.</P>
-<P>Clearly, we need a better idiom.</P>
-
-<H2><A NAME="dev"></A>Development</H2>
-
-<h3><u>The models:</u></h3>
-<P>In C++, we can <i>declare</i> an object (a variable) of type T, and we can give this variable
- an <i>initial value</i> (through an <i>initializer</i>. (c.f. 8.5)).<br>
- When a declaration includes a non-empty initializer (an initial value is given), it is said that
- the object has been <i><b>initialized</b></i>.<br>
- If the declaration uses an empty initializer (no initial value is given),
- and neither default nor value initialization applies, it is said that the object is
- <i><b>uninitialized</b></i>. Its actual value exist but has an
- <i>indeterminate initial value</i> (c.f. 8.5.9).<br>
- <code>optional<T></code> intends to formalize the notion of initialization
-(or lack of it)
- allowing a program to test whether an object has been initialized and stating that access to
- the value of an uninitialized object is undefined behavior. That is,
- when a variable is declared as optional<T> and no initial value is given,
- the variable is <i>formally</i> uninitialized. A formally uninitialized optional object has conceptually
- no value at all and this situation can be tested at runtime. It is formally <i>
-undefined behavior</i>
- to try to access the value of an uninitialized optional. An uninitialized optional can be <i>assigned</i> a value, in which case its initialization state changes to initialized. Furthermore, given the formal
- treatment of initialization states in optional objects, it is even possible to reset an optional to <i>uninitialized</i>.</P>
-<P>In C++ there is no formal notion of uninitialized objects, which
- means that objects always have an initial value even if indeterminate.<br>
- As discussed on the previous section, this has a drawback because you need additional
- information to tell if an object has been effectively initialized.<br>
- One of the typical ways in which this has been historically
- dealt with is via a special value: EOF,npos,-1, etc... This is equivalent to adding
- the special value to the set of possible values of a given type. This super set of
- T plus some <i>nil_t</i>—were nil_t is some stateless POD-can be modeled in modern
- languages as a <b>discriminated union</b> of <code>T</code> and <code>nil_t</code>.
- Discriminated unions are often called <i>variants</i>. A variant has a <i>current type</i>,
- which in our case is either <code>T</code> or <code>nil_t</code>.<br>
- Using the Boost.Variant library, this model can be implemented
- in terms of <code>boost::variant<T,nil_t></code>.<br>
- There is precedent for a discriminated union as a model for an optional value: the
- Haskell <b>Maybe</b> built-in type constructor.
-Thus, a discriminated union <code>T+nil_t</code> serves as a conceptual foundation.</p>
-<p>A <code>variant<T,nil_t></code> follows naturally from the traditional idiom of extending
-the range of possible values adding an additional sentinel value with the special meaning of <i>Nothing. </i>
-However, this additional <i>Nothing</i> value is largely irrelevant for our purpose
- since our goal is to formalize the notion of uninitialized objects and, while a special extended value <i>can</i> be used to convey that meaning, it is not strictly
-necessary in order to do so.</p>
-<p>The observation made in the last paragraph about the irrelevant nature of the additional <code>nil_t</code> with respect to
-<u>purpose</u> of optional<T> suggests
-an alternative model: a <i>container</i> that either has a value of T or nothing.
-</p>
-<p>As of this writing I don't know of any precedent for a variable-size fixed-capacity (of 1)
-stack-based container model for optional values, yet I believe this is the consequence of
-the lack of practical implementations of such a container rather than an inherent shortcoming
-of the container model.</p>
-<p>In any event, both the discriminated-union or the single-element container models serve as a conceptual
-ground for a class representing optional—i.e. possibly uninitialized—objects.<br>
-For instance, these models show the <i>exact</i> semantics required for a wrapper of optional values:</p>
-<p>Discriminated-union:</p>
-<blockquote>
-<li><b>deep-copy</b> semantics: copies of the variant implies copies of the value.</li>
-<li><b>deep-relational</b> semantics: comparisons between variants matches both current types and values</li>
-<li>If the variant's current type is T, it is modeling an <i>initialized</i> optional.</li>
-<li>If the variant's current type is not T, it is modeling an <i>uninitialized</i> optional.</li>
-<li>Testing if the variant's current type is T models testing if the optional is initialized</li>
-<li>Trying to extract a T from a variant when its current type is not T, models the undefined
-behavior
-of trying to access the value of an uninitialized optional</li>
-</blockquote>
-<p>Single-element container:</p>
-<blockquote>
-<li><b>deep-copy</b> semantics: copies of the container implies copies of the value.</li>
-<li><b>deep-relational</b> semantics: comparisons between containers compare container size and if match, contained value</li>
-<li>If the container is not empty (contains an object of type T), it is modeling an <i>initialized</i> optional.</li>
-<li>If the container is empty, it is modeling an <i>uninitialized</i> optional.</li>
-<li>Testing if the container is empty models testing if the optional is initialized</li>
-<li>Trying to extract a T from an empty container models the undefined behavior
-of trying to access the value of an uninitialized optional</li>
-</blockquote>
-
-<h3><u>The semantics:</u></h3>
-<p>Objects of type <code>optional<T></code> are intended to be used in places where objects of type T would
-but which might be uninitialized. Hence, <code>optional<T></code>'s purpose is to formalize the
-additional possibly uninitialized state.<br>
-From the perspective of this role, <code>optional<T></code> can have the same operational semantics of T
-plus the additional semantics corresponding to this special state.<br>
-As such, <code>optional<T></code> could be thought of as a <i>supertype</i> of T. Of course,
-we can't do that in C++, so we need to compose the desired semantics using a different mechanism.<br>
-Doing it the other way around, that is, making <code>optional<T></code> a <i>subtype</i> of T is not only
-conceptually wrong but also impractical: it is not allowed to derive from a non-class type, such as a
-built-in type.</p>
-
-<p>We can draw from the purpose of optional<T> the required basic semantics:</p>
-
-<blockquote>
-<p><b>Default Construction:</b> To introduce a formally uninitialized wrapped
-object.</p>
-
-<p><b>Direct Value Construction via copy:</b> To introduce a formally
-initialized wrapped object whose value is obtained as a copy of some object.</p>
-
-<p><b>Deep Copy Construction:</b> To obtain a new yet equivalent wrapped
-object.</p>
-
-<p><b>Direct Value Assignment (upon initialized):</b> To assign a value to the wrapped object.</p>
-
-<p><b>Direct Value Assignment (upon uninitialized):</b> To initialize the wrapped object
-with a value obtained
-as a copy of some object.</p>
-
-<p><b>Assignment (upon initialized):</b> To assign to the wrapped object the value
-of another wrapped object.</p>
-
-<p><b>Assignment (upon uninitialized):</b> To initialize the wrapped object
-with value of another wrapped object.</p>
-
-<p><b>Deep Relational Operations (when supported by the type T):</b> To compare
-wrapped object values taking into account the presence of uninitialized
-states.</p>
-
-<p><b>Value access:</b> To unwrap the wrapped object.</p>
-
-<p><b>Initialization state query:</b> To determine if the object is formally
-initialized or not.</p>
-
-<p><b>Swap:</b> To exchange wrapped objects. (with whatever exception safety
-guarantees are provided by T's swap).</p>
-
-<p><b>De-initialization:</b> To release the wrapped object (if any) and leave
-the wrapper in the uninitialized state.</p>
-
-</blockquote>
-
-<p>Additional operations are useful, such as converting constructors and
-converting assignments, in-place construction and assignment, and safe value
-access via a pointer to the wrapped object or null.</p>
-<h3><u>The Interface:</u></h3>
-<p>Since the purpose of optional is to allow us to use objects with a formal
-uninitialized additional state, the interface could try to follow the interface
-of the underlying T type as much as possible. In order to choose the proper
-degree of adoption of the native T interface, the following must be noted: <br>
-Even if all the operations supported by an instance of type T are defined for
-the entire range of values for such a type, an optional<T> extends such a set of
-values with a new value for which most (otherwise valid) operations are not
-defined in terms of T.<br>
-Furthermore, since optional<T> itself is merely a T wrapper (modeling a T
-supertype), any attempt to define such operations upon uninitialized optionals
-will be totally artificial w.r.t. T.<br>
-This library chooses an interface which follows from T's interface only for
-those operations which are well defined (w.r.t the type T) even if any of the
-operands are uninitialized. These operations include: construction,
-copy-construction, assignment, swap and relational operations.<br>
-For the value access operations, which are undefined (w.r.t the type T) when the
-operand is uninitialized, a different interface is chosen (which will be
-explained next).<br>
-Also, the presence of the possibly uninitialized state requires additional
-operations not provided by T itself which are supported by a special interface.</p>
-<h3>Lexically-hinted Value Access in the presence of possibly untitialized
-optional objects: The operators * and -></h3>
-<p>A relevant feature of a pointer is that it can have a <b>null
- pointer value</b>. This is a <i>special</i> value which is used to indicate that the
- pointer is not referring to any object at all. In other words, null pointer
- values convey the notion of inexistent objects.</P>
-<P>This meaning of the null pointer value allowed pointers to became a <i>de facto</i> standard
- for handling optional objects because all you have to do to refer to a value which you
- don't really have is to use a null pointer value of the appropriate type.
- Pointers have been used for decades—from the days of C APIs to modern C++ libraries—to
- <i>refer</i> to optional (that is, possibly inexistent) objects; particularly
- as optional arguments to a function, but also quite often as optional data members.</P>
-<P>The possible presence of a null pointer value makes the operations that access the
- pointee's value possibly undefined, therefore, expressions which use dereference
- and access operators, such as: <code>( *p = 2 )</code> and <code>( p->foo())</code>,
- implicitly convey the notion of optionality, and this information is tied to
- the <i>syntax</i> of the expressions. That is, the presence of operators * and -> tell by
- themselves—without any additional context—that the expression will be undefined unless
- the implied pointee actually exist.</P>
-<P>Such a <i>de facto</i> idiom for referring to optional objects can be formalized in the form of a
-concept: the OptionalPointee concept.<br>
-This concept captures the syntactic usage of operators *, -> and conversion to bool to convey
-the notion of optionality.</P>
-<P>However, pointers are good to <u>refer</u> to optional objects, but not particularly good
-to handle the optional objects in all other respects, such as initializing or moving/copying
-them. The problem resides in the shallow-copy of pointer semantics: if you need to
- effectively move or copy the object, pointers alone are not enough. The problem
- is that copies of pointers do not imply copies of pointees. For example, as
- was discussed in the motivation, pointers alone cannot be used to return optional
- objects from a function because the object must move outside from the function and
- into the caller's context.<br>
- A solution to the shallow-copy problem that is often used is to resort to dynamic
- allocation and use a smart pointer to automatically handle the details of this.
- For example, if a function is to optionally return an object X, it can use shared_ptr<X>
- as the return value. However, this requires dynamic allocation of X. If X is
- a built-in or small POD, this technique is very poor in terms of required resources.
- Optional objects are essentially values so it is very convenient to be able to use automatic
- storage and deep-copy semantics to manipulate optional values just as we do with ordinary
- values. Pointers do not have this semantics, so are inappropriate for the initialization and
- transport of optional values, yet are quite convenient for handling the access to the
- possible undefined value because of the idiomatic aid present in the OptionalPointee
- concept incarnated by pointers.
-</p>
-<h4>Optional<T> as a model of OptionalPointee</h4>
-<P>For value access operations optional<> uses operators * and -> to lexically
-warn about the possibly uninitialized state appealing to the familiar pointer
-semantics w.r.t. to null pointers.<br>
-<u><b>However, it is particularly important to note that optional<> objects are not pointers. optional<>
-is not, and does not model, a pointer</b></u><b>.</b>
-<P>For instance, optional<> does not have shallow-copy so does not alias: two different optionals
- never refer to the <i>same</i> value unless T itself is a reference (but may have <i>equivalent</i> values).<br>
- The difference between an optional<T> and a pointer must be kept in mind, particularly
- because the semantics of relational operators are different: since optional<T>
- is a value-wrapper, relational operators are deep: they compare optional values;
- but relational operators for pointers are shallow: they do not compare pointee values.<br>
- As a result, you might be able to replace optional<T> by T* on some situations but
- not always. Specifically, on generic code written for both, you cannot use relational
- operators directly, and must use the template functions
- equal_pointees() and
- less_pointees() instead.
-<HR>
-
-<H2><A NAME="synopsis">Synopsis</A></H2>
-
-<PRE>namespace boost {
-
-template<class T>
-class optional
-{
- public :
-
- <i><u>(If T is of reference type, the parameters and results by reference are by value)</u></i>
-
- optional () ;
-
- optional ( none_t ) ;
-
- optional ( T const& v ) ;
-
- optional ( bool condition, T const& v ) ; <u><i>[new in 1.34]</u></i>
-
- optional ( optional const& rhs ) ;
-
- template<class U> explicit optional ( optional<U> const& rhs ) ;
-
- template<InPlaceFactory> explicit optional ( InPlaceFactory const& f ) ;
-
- template<TypedInPlaceFactory> explicit optional ( TypedInPlaceFactory const& f ) ;
-
- optional& operator = ( none_t ) ;
-
- optional& operator = ( T const& v ) ;
-
- optional& operator = ( optional const& rhs ) ;
-
- template<class U> optional& operator = ( optional<U> const& rhs ) ;
-
- template<InPlaceFactory> optional& operator = ( InPlaceFactory const& f ) ;
-
- template<TypedInPlaceFactory> optional& operator = ( TypedInPlaceFactory const& f ) ;
-
- T const& get() const ;
- T& get() ;
-
- T const& get_value_or( T const& default ) const ; <u><i>[new in 1.34]</u></i>
-
- T const* operator ->() const ;
- T* operator ->() ;
-
- T const& operator *() const ;
- T& operator *() ;
-
- T const* get_ptr() const ;
- T* get_ptr() ;
-
- operator <i>unspecified-bool-type</i>() const ;
-
- bool operator!() const ;
-
- <i><u>deprecated methods</u></i>
-
- void reset() ; (deprecated)
- void reset ( T const& ) ; (deprecated)
- bool is_initialized() const ; (deprecated)
-
-} ;
-
-template<class T> inline bool operator == ( optional<T> const& x, optional<T> const& y ) ;
-
-template<class T> inline bool operator != ( optional<T> const& x, optional<T> const& y ) ;
-
-template<class T> inline bool operator < ( optional<T> const& x, optional<T> const& y ) ;
-
-template<class T> inline bool operator > ( optional<T> const& x, optional<T> const& y ) ;
-
-template<class T> inline bool operator <= ( optional<T> const& x, optional<T> const& y ) ;
-
-template<class T> inline bool operator >= ( optional<T> const& x, optional<T> const& y ) ;
-
-template<class T> inline bool operator == ( optional<T> const& x, T const& n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator != ( optional<T> const& x, T const& n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator < ( optional<T> const& x, T const& n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator > ( optional<T> const& x, T const& n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator <= ( optional<T> const& x, T const& n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator >= ( optional<T> const& x, T const& n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator == ( T const& n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator != ( T const& n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator < ( T const& n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator > ( T const& n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator <= ( T const& n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator >= ( T const& n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator == ( optional<T> const& x, none_t n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator != ( optional<T> const& x, none_t n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator < ( optional<T> const& x, none_t n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator > ( optional<T> const& x, none_t n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator <= ( optional<T> const& x, none_t n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator >= ( optional<T> const& x, none_t n ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator == ( none_t n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator != ( none_t n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator < ( none_t n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator > ( none_t n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator <= ( none_t n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline bool operator >= ( none_t n, optional<T> const& y ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline optional<T> make_optional ( T const& v ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline optional<T> make_optional ( bool condition, T const& v ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline T const& get_optional_value_or ( optional<T> const& opt, T const& default ) ; <u><i>[new in 1.34]</u></i>
-
-template<class T> inline T const& get ( optional<T> const& opt ) ;
-
-template<class T> inline T& get ( optional<T> & opt ) ;
-
-template<class T> inline T const* get ( optional<T> const* opt ) ;
-
-template<class T> inline T* get ( optional<T>* opt ) ;
-
-template<class T> inline T const* get_pointer ( optional<T> const& opt ) ;
-
-template<class T> inline T* get_pointer ( optional<T> & opt ) ;
-
-template<class T> inline void swap( optional<T>& x, optional<T>& y ) ;
-
-} // namespace boost
-</PRE>
-
-<HR>
-
-<h2><A NAME="semantics">Detailed Semantics</a></h2>
-
-<p><b><u>NOTES: </u></b></p>
-
-<p><b>Because T might be of reference type, in the sequel, those entries whose
-semantic depends on T being of reference type or not will be distinguished using
-the following convention:<br>
-If the entry reads: optional<T (not a ref)>, the description corresponds only to
-the case where T is not of reference type.<br>
-If the entry reads: optional<T&>, the description corresponds only to the case
-where T is of reference type. <br>
-If the entry reads: optional<T>, the description is the same for both cases.</b></p>
-
-<p><i>The following section contains various assert() which are used only to
-show the postconditions as sample code. It is not implied that the type T must
-support each particular expression but that if the expression is supported, the
-implied condition holds.</i></p>
-
-<hr>
-
-<pre>optional<T>::optional();</pre>
-<blockquote>
-<p><b>Effect:</b> Default-Constructs an <b>optional</b>.</p>
-<p><b>Postconditions:</b> <b>*this</b> is <u>uninitialized</u>.</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> T's default constructor <u><i>is not</i></u> called.</p>
-<p><b>Example:</b></p>
- <blockquote>
- <pre>optional<T> def ;
-assert ( !def ) ;</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T>::optional( none_t );</pre>
-<blockquote>
-<p><b>Effect:</b> Constructs an <b>optional</b> uninitialized.</p>
-<p><b>Postconditions:</b> <b>*this</b> is <u>uninitialized</u>.</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b></p>
-<blockquote>
-<p>T's default constructor <u><i>is not</i></u> called.<br>
-The
-expression <code>boost::none</code> denotes an instance of <code>boost::none_t</code> that can be
-used as the parameter.</p>
-</blockquote>
-<p><b>Example:</b></p>
- <blockquote>
-<pre>
-#include <boost/none.hpp>
-optional<int> n(boost::none) ;
-assert ( !n ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T <i>(not a ref)</i>>::optional( T const& v )</pre>
-<blockquote>
-<p><b>Effect:</b> Directly-Constructs an <b>optional</b>.</p>
-<p><b>Postconditions:</b> <b>*this</b> is <u>initialized</u> and its value is a <i>copy</i> of 'v'.</p>
-<p><b>Throws:</b> Whatever T::T( T const& ) throws.</p>
-<p><b>Notes: </b> T::T( T const& ) is called.</p>
-<p><b>Exception Safety:</b> Exceptions can only be thrown during T::T( T const& );
-in that case, this constructor has no effect.
-</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-T v;
-optional<T> opt(v);
-assert ( *opt == v ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T&>::optional( T& ref )</pre>
-<blockquote>
-<p><b>Effect:</b> Directly-Constructs an <b>optional</b>.</p>
-<p><b>Postconditions:</b> <b>*this</b> is <u>initialized</u> and its value is an
-instance of an internal type wrapping the reference 'ref'.</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-T v;
-T& vref = v ;
-optional<T&> opt(vref);
-assert ( *opt == v ) ;
-++ v ; // mutate referee
-assert (*opt == v);
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T <i>(not a ref)</i>>::optional( bool condition, T const& v ) ;
-optional<T&> ::optional( bool condition, T& v ) ;
-</pre>
-
-<blockquote>
-<p>If <i>condition</i> is <code>true</code>, same as:</p>
-<pre>optional<T <i>(not a ref)</i>>::optional( T const& v )
-optional<T&> ::optional( T& v )
-</pre>
-<p>otherwise, same as:</p>
-<pre>
-optional<T <i>(not a ref)</i>>::optional()
-optional<T&> ::optional()
-</pre>
-</blockquote>
-
-<HR>
-
-<pre>optional<T <i>(not a ref)</i>>::optional( optional const& rhs );</pre>
-<blockquote>
-<p><b>Effect:</b> Copy-Constructs an <b>optional</b>.</p>
-<p><b>Postconditions:</b> If <b>rhs</b> is initialized, <b>*this</b> is initialized
-and its value is a <i>copy</i> of the value of <b>rhs</b>; else <b>*this</b>
-is uninitialized.</p>
-<p><b>Throws:</b> Whatever T::T( T const& ) throws.</p>
-<p><b>Notes:</b> If <b>rhs</b> is initialized, T::T(T const& ) is called.</p>
-<p><b>Exception Safety:</b> Exceptions can only be thrown during T::T( T const& );
-in that case, this constructor has no effect.
-</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-optional<T> uninit ;
-assert (!uninit);
-
-optional<T> uinit2 ( uninit ) ;
-assert ( uninit2 == uninit );
-
-optional<T> init( T(2) );
-assert ( *init == T(2) ) ;
-
-optional<T> init2 ( init ) ;
-assert ( init2 == init ) ;
-</pre>
-
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T&>::optional( optional const& rhs );</pre>
-<blockquote>
-<p><b>Effect:</b> Copy-Constructs an <b>optional</b>.</p>
-<p><b>Postconditions:</b> If <b>rhs</b> is initialized, <b>*this</b> is initialized
-and its value is another reference to the same object referenced by <b>*rhs</b>; else <b>*this</b>
-is uninitialized.</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> If <b>rhs</b> is initialized, both <b>*this</b> and <b>*rhs</b> will
-reefer to the same object<b> </b>(they alias).</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-optional<T&> uninit ;
-assert (!uninit);
-
-optional<T&> uinit2 ( uninit ) ;
-assert ( uninit2 == uninit );
-
-T v = 2 ; T& ref = v ;
-optional<T> init(ref);
-assert ( *init == v ) ;
-
-optional<T> init2 ( init ) ;
-assert ( *init2 == v ) ;
-
-v = 3 ;
-
-assert ( *init == 3 ) ;
-assert ( *init2 == 3 ) ;
-
-
-</pre>
-
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>template<U> explicit optional<T <i>(not a ref)</i>>::optional( optional<U> const& rhs );</pre>
-<blockquote>
-<p><b>Effect:</b> Copy-Constructs an <b>optional</b>.</p>
-<p><b>Postconditions:</b> If <b>rhs</b> is initialized, <b>*this</b> is initialized
- and its value is a <i>copy</i> of the value of <b>rhs</b> <i>converted</i>
- to type T; else <b>*this</b> is uninitialized.
-</p>
-<p><b>Throws:</b> Whatever T::T( U const& ) throws.</p>
-<p><b>Notes:</b> T::T( U const& ) is called if <b>rhs</b> is initialized, which requires
-a valid conversion from U to T.
-</p>
-<p><b>Exception Safety:</b> Exceptions can only be thrown during T::T( U const& );
-in that case, this constructor has no effect.
-</p>
-<p><b>Example:</b></p>
-<blockquote>
-
-<pre>
-optional<double> x(123.4);
-assert ( *x == 123.4 ) ;
-
-optional<int> y(x) ;
-assert( *y == 123 ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>template<<i>InPlaceFactory</i>> explicit optional<T <i>(not a ref)</i>>::optional( <i>InPlaceFactory</i> const& f );</pre>
-
-<pre>template<<i>TypedInPlaceFactory</i>> explicit optional<T <i>(not a ref)</i>>::optional( <i>TypedInPlaceFactory</i> const& f );</pre>
-<blockquote>
-<p><b>Effect:</b> Constructs an <b>optional</b> with a value of T obtained from
-the factory.</p>
-<p><b>Postconditions:</b> <b>*this</b> is <u>initialized</u> and its value is
-<i>directly given</i> from the factory 'f' (i.e., the value<u> is not copied</u>).</p>
-<p><b>Throws:</b> Whatever the T constructor called by the factory throws.</p>
-<p><b>Notes:</b> See In-Place Factories</p>
-<p><b>Exception Safety:</b> Exceptions can only be thrown during the call to the
-T constructor used by the factory;
-in that case, this constructor has no effect.
-</p>
-<p><b>Example:</b></p>
-<blockquote>
-
-<pre>
-class C { C ( char, double, std::string ) ; } ;
-
-C v('A',123.4,"hello");
-
-optional<C> x( in_place ('A', 123.4, "hello") ); // InPlaceFactory used
-optional<C> y( in_place<C>('A', 123.4, "hello") ); // TypedInPlaceFactory used
-
-assert ( *x == v ) ;
-assert ( *y == v ) ;
-
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional& optional<T</i>>::operator= ( none_t n ) ;</pre>
-<blockquote>
-<p><b>Effect:</b> Same as opeator=(optional const& rhs), when rhs is default-constructed (uninitialized).</p>
-<p><b>Postconditions:</b> <b>*this</b> is uninitialized</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-#include <boost/none.hpp>
-
-optional<int> def ;
-optional<int> opt(123) ;
-
-opt = boost::none ;
-
-assert ( opt == def ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional& optional<T <i>(not a ref)</i>>::operator= ( T const& rhs ) ;</pre>
-<blockquote>
-<p><b>Effect:</b> Assigns the value 'rhs' to an <b>optional</b>.</p>
-<p><b>Postconditions:</b> <b>*this</b> is initialized
-and its value is a <i>copy</i> of <b>rhs.</b></p>
-<p><b>Throws:</b> Whatever T::operator=( T const& ) or T::T(T const&) throws.</p>
-<p><b>Notes:</b> If <b>*this</b> was initialized, T's assignment operator is
-used, otherwise, its copy-constructor is used.</p>
-<p><b>Exception Safety:</b> In the event of an exception, the initialization
-state of <b>*this</b> is unchanged and its value unspecified as far as optional
-is concerned (it is up to T's operator=()) [If <b>*this</b> is initially
-uninitialized and T's <i>copy constructor</i> fails, <b>*this</b> is left
-properly uninitialized]</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-T x;
-optional<T> def ;
-optional<T> opt(x) ;
-
-T y;
-def = y ;
-assert ( *def == y ) ;
-opt = y ;
-assert ( *opt == y ) ;</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T&>& optional<T&>::operator= ( T& const& rhs ) ;</pre>
-<blockquote>
-<p><b>Effect:</b> (Re)binds thee wrapped reference.</p>
-<p><b>Postconditions:</b> <b>*this</b> is initialized
-and it references the same object referenced by <b>rhs.</b></p>
-<p><b>Notes:</b> If <b>*this</b> was initialized, is is <i>rebound</i> to the
-new object. See here for details on this behavior.</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>
-int a = 1 ;
-int b = 2 ;
-T& ra = a ;
-T& rb = b ;
-optional<int&> def ;
-optional<int&> opt(ra) ;
-
-def = rb ; // binds 'def' to 'b' through 'rb'
-assert ( *def == b ) ;
-*def = a ; // changes the value of 'b' to a copy of the value of 'a'
-assert ( b == a ) ;
-int c = 3;
-int& rc = c ;
-opt = rc ; // REBINDS to 'c' through 'rc'
-c = 4 ;
-assert ( *opt == 4 ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional& optional<T <i>(not a ref)</i>>::operator= ( optional const& rhs ) ;</pre>
-<blockquote>
-<p><b>Effect:</b> Assigns another <b>optional</b> to an <b>optional</b>.</p>
-<p><b>Postconditions:</b> If <b>rhs</b> is initialized, <b>*this</b> is initialized
-and its value is a <i>copy</i> of the value of <b>rhs</b>; else <b>*this</b>
-is uninitialized.
-</p>
-<p><b>Throws:</b> Whatever T::operator( T const&) or T::T( T const& ) throws.</p>
-<p><b>Notes:</b> If both<b> *this</b> and <b>rhs</b> are initially initialized,
-T's <i>assignment</i> <i>operator</i> is used. If <b>*this</b> is initially initialized but <b>
-rhs</b> is uninitialized, T's <i>destructor</i> is called. If <b>*this</b> is initially
-uninitialized but rhs is initialized, T's <i>copy constructor</i> is called.
-</p>
-<p><b>Exception Safety:</b> In the event of an exception, the initialization
-state of <b>*this</b> is unchanged and its value unspecified as far as optional
-is concerned (it is up to T's operator=()) [If <b>*this</b> is initially
-uninitialized and T's <i>copy constructor</i> fails, <b>*this</b> is left
-properly uninitialized]</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T v;
-optional<T> opt(v);
-optional<T> def ;
-
-opt = def ;
-assert ( !def ) ;
-// previous value (copy of 'v') destroyed from within 'opt'.
-
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T&> & optional<T&>::operator= ( optional<T&> const& rhs ) ;</pre>
-<blockquote>
-<p><b>Effect:</b> (Re)binds thee wrapped reference.</p>
-<p><b>Postconditions:</b> If <b>*rhs</b> is initialized, *<b>this</b> is initialized
-and it references the same object referenced by <b>*rhs</b>; otherwise, <b>*this</b>
-is uninitialized (and references no object).</p>
-<p><b>Notes:</b> If <b>*this</b> was initialized and so is <b>*rhs</b>, <b>this</b>
-is is <i>rebound</i> to the new object. See here for details on this
-behavior.</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>int a = 1 ;
-int b = 2 ;
-T& ra = a ;
-T& rb = b ;
-optional<int&> def ;
-optional<int&> ora(ra) ;
-optional<int&> orb(rb) ;
-
-def = orb ; // binds 'def' to 'b' through 'rb' wrapped within 'orb'
-assert ( *def == b ) ;
-*def = ora ; // changes the value of 'b' to a copy of the value of 'a'
-assert ( b == a ) ;
-int c = 3;
-int& rc = c ;
-optional<int&> orc(rc) ;
-ora = orc ; // REBINDS ora to 'c' through 'rc'
-c = 4 ;
-assert ( *ora == 4 ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>template<U> optional& optional<T <i>(not a ref)</i>>::operator= ( optional<U> const& rhs ) ;</pre>
-<blockquote>
-<p><b>Effect:</b> Assigns another <i>convertible</i> <b>optional</b> to an <b>optional</b>.</p>
-<p><b>Postconditions:</b> If <b>rhs</b> is initialized, <b>*this</b> is initialized
-and its value is a <i>copy</i> of the value of <b>rhs</b> <i>converted</i>
-to type T; else <b>*this</b> is uninitialized.
-</p>
-<p><b>Throws:</b> Whatever T::operator=( U const& ) or T::T( U const& ) throws.</p>
-<p><b>Notes:</b> If both<b> *this</b> and <b>rhs</b> are initially initialized,
-T's <i>assignment</i> <i>operator</i> (from U) is used. If <b>*this</b> is initially initialized but <b>
-rhs</b> is uninitialized, T's <i>destructor</i> is called. If <b>*this</b> is initially
-uninitialized but rhs is initialized, T's <i>converting constructor</i> (from U) is called.
-</p>
-<p><b>Exception Safety:</b> In the event of an exception, the initialization
-state of <b>*this</b> is unchanged and its value unspecified as far as optional
-is concerned (it is up to T's operator=()) [If <b>*this</b> is initially
-uninitialized and T's <i>converting constructor</i> fails, <b>*this</b> is left
-properly uninitialized]</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T v;
-optional<T> opt0(v);
-optional<U> opt1;
-
-opt1 = opt0 ;
-assert ( *opt1 == static_cast<U>(v) ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-<pre>void optional<T <i>(not a ref)</i>>::reset( T const& v ) ;</pre>
-<blockquote>
-<p><b>Deprecated:</b> same as operator= ( T const& v) ;</p>
-</blockquote>
-
-<HR>
-<pre>void optional<T>::reset() ;</pre>
-<blockquote>
-<p><b>Deprecated: </b>Same as operator=( none_t n);</p>
-</blockquote>
-
-<HR>
-
-<pre>T const& optional<T <i>(not a ref)</i>>::operator*() const ;
-T& optional<T<i> (not a ref)</i>>::operator*();</pre>
-
-<pre>T const& optional<T <i>(not a ref)</i>>::get() const ;
-T& optional<T <i>(not a ref)</i>>::get() ;
-
-inline T const& get ( optional<T<i> (not a ref)</i>> const& ) ;
-inline T& get ( optional<T <i>(not a ref)</i>> &) ;
-</pre>
-<blockquote>
-<p><b>Requirements: *this</b> is initialized</p>
-<p><b>Returns:</b> A reference to the contained value</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> The requirement is asserted via BOOST_ASSERT().</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T v ;
-optional<T> opt ( v );
-T const& u = *opt;
-assert ( u == v ) ;
-T w ;
-*opt = w ;
-assert ( *opt == w ) ;
-</pre>
- </blockquote>
- <pre></pre>
-</blockquote>
-
-<HR>
-
-
-<pre>T const& optional<T&>::operator*() const ;
-T & optional<T<i>&</i>>::operator*();</pre>
-
-<pre>T const& optional<T&>::get() const ;
-T& optional<T&>::get() ;
-
-inline T const& get ( optional<T<i>&</i>> const& ) ;
-inline T& get ( optional<T&> &) ;
-</pre>
-<blockquote>
-<p><b>Requirements: *this</b> is initialized</p>
-<p><b>Returns:</b> <u>The</u> reference contained.</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> The requirement is asserted via BOOST_ASSERT().</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T v ;
-T& vref = v ;
-optional<T&> opt ( vref );
-T const& vref2 = *opt;
-assert ( vref2 == v ) ;
-++ v ;
-assert ( *opt == v ) ;</pre>
- </blockquote>
-</blockquote>
-
-<HR>
-
-<pre>T const& optional<T>::get_value_or( T const& default) const ;
-T& optional<T>::get_value_or( T& default ) ;
-
-inline T const& get_optional_value_or ( optional<T> const& o, T const& default ) ;
-inline T& get_optional_value_or ( optional<T>& o, T& default ) ;
-</pre>
-<blockquote>
-<p><b>Returns:</b> A reference to the contained value (which can be itself a reference), if any, or <code>default</code></p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T v, z ;
-optional<T> def;
-T const& y = def.get_value_or(z);
-assert ( y == z ) ;
-
-optional<T> opt ( v );
-T const& u = get_optional_value_or(opt,z);
-assert ( u == v ) ;
-assert ( u != z ) ;
-</pre>
- </blockquote>
- <pre></pre>
-</blockquote>
-
-<HR>
-
-<pre>T const* optional<T>::get_ptr() const ;
-T* optional<T>::get_ptr() ;
-
-inline T const* get_pointer ( optional<T> const& ) ;
-inline T* get_pointer ( optional<T> &) ;
-</pre>
-<blockquote>
-<p><b>Returns:</b> If <b>*this</b> is initialized, a pointer to the contained
-value; else 0 (<i>null</i>).
-</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> If T is a reference type, the pointer is to the referenced object</p>
-<p><b>Notes:</b> The contained value is permanently stored within *this, so
-you should not hold nor delete this pointer.
-</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>int v=123;
-optional<int> opt(v);
-optional<int> const copt(v);
-int* p = opt.get_ptr() ;
-int const* cp = copt.get_ptr();
-assert ( p == get_pointer(opt) );
-assert ( cp == get_pointer(copt) ) ;
-
-int& rv = v ;
-optional<int&> optr(rv);
-
-*(optr.get_ptr()) = 456 ;
-
-assert ( v == 456 );
-
-
-</pre>
-</blockquote>
-</blockquote>
-
-
-<HR>
-
-
-<pre>T const* optional<T>::operator ->() const ;
-T* optional<T>::operator ->() ;
-</pre>
-<blockquote>
-<p><b>Requirements: *this</b> is initialized.</p>
-<p><b>Returns:</b> A pointer to the contained value.</p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> If T is a reference type, the pointer is to the referenced object</p>
-<p><b>Notes:</b> The requirement is asserted via BOOST_ASSERT().</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>struct X { int mdata ; } ;
-X x ;
-optional<X> opt (x);
-opt->mdata = 2 ;
-
-X& rx = x ;
-
-optional<X&> optr (rx);
-optr->mdata = 4 ;
-
-assert ( x.mdata = 4 )
-
-</pre>
-</blockquote>
-</blockquote>
-
-
-<HR>
-
-
-<pre>optional<T>::operator <i>unspecified-bool-type</i>() const ;</pre>
-<blockquote>
-<p><b>Returns:</b> An unspecified value which if used on a boolean context is equivalent to (get() != 0)</p>
-<p><b>Throws:</b> Nothing.</p>
-<blockquote>
- <pre>optional<T> def ;
-assert ( def == 0 );
-optional<T> opt ( v ) ;
-assert ( opt );
-assert ( opt != 0 );
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-
-<pre> bool optional<T>::operator!() ;</pre>
-<blockquote>
-<p><b>Returns:</b> If <b>*this</b> is uninitialized, <code>true</code>; else <code>false.</code></p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> This operator is provided for those compilers which can't use
-the <i>unspecified-bool-type</i> operator in certain boolean contexts.
-</p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>optional<T> opt ;
-assert ( !opt );
-*opt = some_T ;
-
-// Notice the "double-bang" idiom here.
-assert ( !!opt ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-
-<HR>
-
-
-<pre>bool optional<T>::is_initialized() const ;</pre>
-<blockquote>
-<p><b>Returns:</b> <i>true</i> is the <b>optional</b> is initialized, <i>false</i>
-otherwise.</p>
-<p><b>Throws:</b> Nothing.</p>
-<blockquote>
- <pre>optional<T> def ;
-assert ( !def.is_initialized() );
-optional<T> opt ( v ) ;
-assert ( opt.is_initialized() );</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-<pre>optional<T <i>(not a ref)</i>> make_optional( T const& v )</pre>
-<blockquote>
-<p><b>Returns:</b> optional<T>(v) for the <i>deduced</i> type <code>T</code> of <code>v</code>.</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>template<class T> void foo ( optional<T> const& opt ) ;
-
-foo ( make_optional(1+1) ) ; // Creates an optional<int>
-</blockquote>
-</blockquote>
-<HR>
-
-<pre>optional<T <i>(not a ref)</i>> make_optional( bool condition, T const& v )</pre>
-<blockquote>
-<p><b>Returns:</b> optional<T>(condition,v) for the <i>deduced</i> type <code>T</code> of <code>v</code>.</p>
-<p><b>Example:</b></p>
-<blockquote>
-<pre>optional<double> calculate_foo()
-{
- double val = compute_foo();
- return make_optional(is_not_nan_and_finite(val),val);
-}
-
-optional<double> v = calculate_foo();
-if ( !v )
- error("foo wasn't computed");
-</blockquote>
-</blockquote>
-
-<HR>
-
-
-<pre>bool operator == ( optional<T> const& x, optional<T> const& y );</pre>
-<blockquote>
-<p><b>Returns:</b> If both <b>x</b> and <b>y</b> are initialied, <code>(*x == *y)</code>.
-If only x or y is initialized, <code>false</code>. If both are uninitialized, <code>true</code>. </p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> Pointers have shallow relational operators while <b>optional</b> has
-deep relational operators. Do not use operator == directly in generic code
-which expect to be given either an optional<T> or a pointer;
-use equal_pointees() instead </p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T x(12);
-T y(12);
-T z(21);
-optional<T> def0 ;
-optional<T> def1 ;
-optional<T> optX(x);
-optional<T> optY(y);
-optional<T> optZ(z);
-
-// Identity always hold
-assert ( def0 == def0 );
-assert ( optX == optX );
-
-// Both uninitialized compare equal
-assert ( def0 == def1 );
-
-// Only one initialized compare unequal.
-assert ( def0 != optX );
-
-// Both initialized compare as (*lhs == *rhs)
-assert ( optX == optY ) ;
-assert ( optX != optZ ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-
-
-<pre>bool operator < ( optional<T> const& x, optional<T> const& y );</pre>
-<blockquote>
-<p><b>Returns:</b> If <b>y</b> is not initialized, <code>false</code>.
-If <b>y</b> is initialized and <b>x</b> is not initialized, <code>true</code>.
-If both <b>x</b> and <b>y</b> are initialized, <code>(*x < *y)</code>. </p>
-<p><b>Throws:</b> Nothing.</p>
-<p><b>Notes:</b> Pointers have shallow relational operators while <b>optional</b> has
-deep relational operators. Do not use operator < directly in generic code
-which expect to be given either an optional<T> or a pointer;
-use less_pointees() instead </p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T x(12);
-T y(34);
-optional<T> def ;
-optional<T> optX(x);
-optional<T> optY(y);
-
-// Identity always hold
-assert ( !(def < def) );
-assert ( optX == optX );
-
-// Both uninitialized compare equal
-assert ( def0 == def1 );
-
-// Only one initialized compare unequal.
-assert ( def0 != optX );
-
-// Both initialized compare as (*lhs == *rhs)
-assert ( optX == optY ) ;
-assert ( optX != optZ ) ;
-</pre>
-</blockquote>
-</blockquote>
-
-<HR>
-<pre>bool operator != ( optional<T> const& x, optional<T> const& y );
-</pre>
-<blockquote>
- <p><b>Returns:</b> !( x == y );</p>
- <p><b>Throws:</b> Nothing.</p>
-</blockquote>
-
-<HR>
-<pre>bool operator > ( optional<T> const& x, optional<T> const& y );
-</pre>
-<blockquote>
- <p><b>Returns:</b> ( y < x );</p>
- <p><b>Throws:</b> Nothing.</p>
-</blockquote>
-
-<HR>
-<pre>bool operator <= ( optional<T> const& x, optional<T> const& y );
-</pre>
-<blockquote>
- <p><b>Returns:</b> !( y<x );</p>
- <p><b>Throws:</b> Nothing.</p>
-</blockquote>
-
-<HR>
-<pre>bool operator >= ( optional<T> const& x, optional<T> const& y );
-</pre>
-<blockquote>
- <p><b>Returns:</b> !( x<y );</p>
- <p><b>Throws:</b> Nothing.</p>
-</blockquote>
-
-<HR>
-<pre>
-bool operator == ( optional<T> const& x, T const& n );
-bool operator != ( optional<T> const& x, T const& n );
-bool operator < ( optional<T> const& x, T const& n );
-bool operator > ( optional<T> const& x, T const& n );
-bool operator <= ( optional<T> const& x, T const& n );
-bool operator >= ( optional<T> const& x, T const& n );
-bool operator == ( T const& n, optional<T> const& y );
-bool operator != ( T const& n, optional<T> const& y );
-bool operator < ( T const& n, optional<T> const& y );
-bool operator > ( T const& n, optional<T> const& y );
-bool operator <= ( T const& n, optional<T> const& y );
-bool operator >= ( T const& n, optional<T> const& y );
-</pre>
-<blockquote>
- <p><b>Returns:</b> The result obtained by replacing the argument 'n' by optional<T>(n).</p>
-</blockquote>
-
-<HR>
-<pre>
-bool operator == ( optional<T> const& x, none_t n );
-bool operator != ( optional<T> const& x, none_t n );
-bool operator < ( optional<T> const& x, none_t n );
-bool operator > ( optional<T> const& x, none_t n );
-bool operator <= ( optional<T> const& x, none_t n );
-bool operator >= ( optional<T> const& x, none_t n );
-bool operator == ( none_t n, optional<T> const& y );
-bool operator != ( none_t n, optional<T> const& y );
-bool operator < ( none_t n, optional<T> const& y );
-bool operator > ( none_t n, optional<T> const& y );
-bool operator <= ( none_t n, optional<T> const& y );
-bool operator >= ( none_t n, optional<T> const& y );
-</pre>
-<blockquote>
- <p><b>Returns:</b> The result obtained by replacing the argument 'n' by optional<T>().</p>
-</blockquote>
-<HR>
-
-<pre>void swap ( optional<T>& x, optional<T>& y );</pre>
-
-<blockquote>
-<p><b>Effect:</b> If both <b>x</b> and <b>y</b> are initialized, calls <code>swap(*x,*y)</code> using std::swap.<br>
-If only one is initialized, say x, calls: <code>y = *x; x = boost:none;</code><br>
-If none is initialized, does nothing. </p>
-<p><b>Postconditions:</b> The states of x and y interchanged.</p>
-<p><b>Throws:</b> If both are initialized, whatever swap(T&,T&) throws.
-If only one is initialized, whatever T::T ( T const& ) throws. </p>
-<p><b>Notes:</b> If both are initialized, swap(T&,T&) is used <i>unqualified</i> but with std::swap introduced in scope.<br>
-If only one is initialized, T::~T() and T::T( T const& ) is called. </p>
-<p><b>Exception Safety:</b> If both are initialized, this operation has the exception
-safety guarantees of swap(T&,T&).<br>
-If only one is initialized, it has the same <b>basic</b> guarantee as optional<T>::operator=( T const& ). </p>
-<p><b>Example:</b></p>
-<blockquote>
- <pre>T x(12);
-T y(21);
-optional<T> def0 ;
-optional<T> def1 ;
-optional<T> optX(x);
-optional<T> optY(y);
-
-boost::swap(def0,def1); // no-op
-
-boost::swap(def0,optX);
-assert ( *def0 == x );
-assert ( !optX );
-
-boost::swap(def0,optX); // Get back to original values
-
-boost::swap(optX,optY);
-assert ( *optX == y );
-assert ( *optY == x );
-
-</pre>
-</blockquote>
-</blockquote>
-<HR>
-
-<H2><A NAME="examples">Examples</A></H2>
-
-<h3>Optional return values</h3>
-<PRE>optional<char> get_async_input()
-{
- if ( !queue.empty() )
- return optional<char>(queue.top());
- else return optional<char>(); // uninitialized
-}
-
-void receive_async_message()
-{
- optional<char> rcv ;
- // The safe boolean conversion from 'rcv' is used here.
- while ( (rcv = get_async_input()) && !timeout() )
- output(*rcv);
-}
-</pre>
-
-<h3>Optional local variables</h3>
-<pre>optional<string> name ;
-if ( database.open() )
-{
- name = database.lookup(employer_name) ;
-}
-else
-{
- if ( can_ask_user )
- name = user.ask(employer_name) ;
-}
-
-if ( name )
- print(*name);
-else print("employer's name not found!");
-</pre>
-
-<h3>Optional data members</h3>
-<pre>class figure
-{
- public:
-
- figure()
- {
- // data member 'm_clipping_rect' is uninitialized at this point.
- }
-
- void clip_in_rect ( rect const& rect )
- {
- ....
- m_clipping_rect = rect ; // initialized here.
- }
-
- void draw ( canvas& cvs )
- {
- if ( m_clipping_rect )
- do_clipping(*m_clipping_rect);
-
- cvs.drawXXX(..);
- }
-
- // this can return NULL.
- rect const* get_clipping_rect() { return get_pointer(m_clipping_rect); }
-
- private :
-
- optional<rect> m_clipping_rect ;
-
-};
-</pre>
-<h3>Bypassing expensive unnecessary default construction</h3>
-<pre>class ExpensiveCtor { ... } ;
-class Fred
-{
- Fred() : mLargeVector(10000) {}
-
- std::vector< optional<ExpensiveCtor> > mLargeVector ;
-} ;
-</pre>
-
-<HR>
-
-<H2><A NAME="ref">Optional references</A></H2>
-<p>This library allows the template parameter T to be of reference type: T&, and
-to some extent, T const&.</p>
-
-<p>However, since references are not real objects some restrictions apply and
-some operations are not available in this case:</p>
-
-<ul>
- <li>Converting constructors</li>
- <li>Converting assignment</li>
- <li>InPlace construction</li>
- <li>InPlace assignment</li>
-</ul>
-<p>Also, even though optional<T&> treats it wrapped pseudo-object much as a real
-value, a true real reference is stored, thus aliasing can ocurr: </p>
-
-<ul>
- <li>Copies of optional<T&> copies the reference, but all copied references
- will nonetheless reefer to the same object.</li>
- <li>Value-access provides access to the referenced object rather
- than the reference itself.</li>
- <li>Pointer-access provides a pointer to the referenced object rather
- than a pointer to the reference itself.</li>
-</ul>
-
-<HR>
-<h2><A NAME="refassign">Rebinding semantics for assignment of optional
-references</a></h2>
-<p>If you assign to an <i>uninitialized</i> optional<T&> the effect is to bind (for the first time) to the object.
-Clearly, there is no other choice.</p>
-<pre>int x = 1 ;
-int& rx = x ;
-optional<int&> ora ;
-optional<int&> orb(rx) ;
-ora = orb ; // now 'ora' is bound to 'x' through 'rx'
-*ora = 2 ; // Changes value of 'x' through 'ora'
-assert(x==2);
-</pre>
-<p>If you assign to a bare C++ reference, the assignment is forwarded to the
-referenced object; it's value changes but the reference is never rebound.</p>
-<pre>int a = 1 ;
-int& ra = a ;
-int b = 2 ;
-int& rb = b ;
-ra = rb ; // Changes the VALUE of 'a' to that of 'b'
-assert(a==b);
-b = 3 ;
-assert(ra!=b); // 'ra' is not rebound to 'b'
-</pre>
-<p>Now, if you assign to an <i>initialized</i> optional<T&>, the effect is to <b>rebind</b> to the new object instead of assigning the referee. This is unlike
-bare C++ references.</p>
-<pre>int a = 1 ;
-int b = 2 ;
-int& ra = a ;
-int& rb = b ;
-optional<int&> ora(ra) ;
-optional<int&> orb(rb) ;
-ora = orb ; // 'ora' is <b>rebound</b> to 'b'
-*ora = 3 ; // Changes value of 'b' (not 'a')
-assert(a==1);
-assert(b==3);
-</pre>
-<h3>Rationale:</h3>
-<p>Rebinding semantics for the assignment of <i>initialized</i> optional
-references has been chosen to provide<b><i> </i>consistency among initialization
-states<i> </i></b>even at the expense of lack of consistency with the semantics of bare
-C++ references.<br>
-It is true that optional<U> strives to behave as much as possible as U does
-whenever it is initialized; but in the case when U is T&, doing so would result
-in inconsistent behavior w.r.t to the lvalue initialization state.</p>
-<p>Consider the following code :</p>
-<pre>
-int x = 1 ;
-int& rx = x ;
-void foo ( optional<int&> & outer )
-{
- optional<int&> b(rx);
- outer = b ;
-}
-</pre>
-<p>What should the assignment to 'outer' do?<br>
-If 'outer' is <i>uninitialized</i>, the answer is clear: it should bind to 'x' (so we now have
-a second reference to 'x').<br>
-But what if 'outer' is already <i>initialized?</i><br>
-The assignment could change the value of the
-referenced object (whatever that is), but doing that would be inconsistent with the uninitialized case
-and then you wouldn't be able to reason at compile time about all the references to x since
-the appearance of a new reference to it would depend on wheter the lvalue ('outer')
-is initialized or not.</p>
-<p>Arguably, if rebinding the reference to another object is wrong for your code, then is
-likely that binding it for the fist time via assignment instead of intialization is also wrong.
-In that case, you can always just assign the value to the referenced object directly via
-the access operator <code>*opt=value</code>.</p>
-<p>If rebinding is wrong but first-time binding
-isn't (via assignment), you can always work around the rebinding semantics using a discriminator:</p>
-<pre>
-if ( !opt )
- opt = value ; // first-time binding
-else *opt = value ; // assign to referee without rebinding
-</pre>
-
-<HR>
-
-<H2><A NAME="none">none_t and none</A></H2>
-<p>optional<T> supports uninitialized states with a convenient syntax via a constant of
-the <i>implementation-defined</i> type <code>boost::none_t</code>, identified as <code>boost::none</code>.</p>
-<p>Starting with Boost version 1.34.0, both <code>boost::none_t</code> and <code>boost::none</code> are
-included in <code>boost/none.hpp</code>, which is automatically included by <code>boost/optional/optional.hpp</code>
-</p>
-<p>This contant is similar in purpose to NULL, except that is not a <i>null pointer value</i>. You can use it to initialize
-an optional<T> instance, which has the same effect of a default constructor, and you can assign it which has the
-effect of reseting the optional<T> instance. You can also use it in relational operators to make the predicate expression
-more clear.</p>
-<p>Here are some typical examples:</p>
-<pre>
-#include "boost/optional/optional.hpp" // boost/none.hpp is included automatically
-
-boost::optional<int> foo ( int a )
-{
- return some_condition(a) ? boost::make_optional(a) : boost::none ;
-
- // NOTE: in real code you can just use this: make_optional(some_condition(a), a )
-}
-
-boost::optional<int> opt = boost::none ;
-
-if ( opt == boost::none )
- opt = foo(123);
-
-opt = boost::none ;
-
-</pre>
-
-<HR>
-
-<H2><A NAME="inplace">In-Place Factories</A></H2>
-<p>
-One of the typical problems with wrappers and containers is that their
-interfaces usually provide an operation to initialize or assign the contained
-object as a copy of some other object. This not only requires the underlying
-type to be Copy Constructible, but also requires the existence of a fully
-constructed object, often temporary, just to follow the copy from:</p>
-<pre>struct X
-{
- X ( int, std:::string ) ;
-} ;</pre>
-<pre>class W
-{
- X wrapped_ ;
-
-public:
-
- W ( X const& x ) : wrapped_(x) {}
-} ;</pre>
-<pre>void foo()
-{
- // Temporary object created.
- W ( X(123,"hello") ) ;
-}
-</pre>
-<p>A solution to this problem is to support direct construction of the contained
-object right in the container's storage.<br>
-In this scheme, the user only needs to supply the arguments to the constructor
-to use in the wrapped object construction.</p>
-<pre>class W
-{
- X wrapped_ ;
-
-public:
-
- W ( X const& x ) : wrapped_(x) {}
- W ( int a0, std::string a1) : wrapped_(a0,a1) {}
-} ;</pre>
-<pre>void foo()
-{
- // Wrapped object constructed in-place
- // No temporary created.
- W (123,"hello") ;
-}
-</pre>
-<p>A limitation of this method is that it doesn't scale well to wrapped objects with multiple
-constructors nor to generic code were the constructor overloads are unknown.</p>
-<p>The solution presented in this library is the family of <b>InPlaceFactories</b> and <b>TypedInPlaceFactories</b>.<br>
-These factories are a family of classes which encapsulate an increasing number of arbitrary
-constructor parameters and supply a method to construct an object of a given type using those
-parameters at an address specified by the user via placement new.</p>
-<p> For example, one member of this family looks like:</p>
-<pre>template<class T,class A0, class A1>
-class TypedInPlaceFactory2
-{
- A0 m_a0 ; A1 m_a1 ;
-
-public:
-
- TypedInPlaceFactory2( A0 const& a0, A1 const& a1 ) : m_a0(a0), m_a1(a1) {}
-
- void construct ( void* p ) { new (p) T(m_a0,m_a1) ; }
-} ;
-</pre>
-<p>A wrapper class aware of this can use it as:</p>
-<pre>class W
-{
- X wrapped_ ;
-
-public:
-
- W ( X const& x ) : wrapped_(x) {}
- W ( TypedInPlaceFactory2 const& fac ) { fac.construct(&wrapped_) ; }
-} ;</pre>
-<pre>void foo()
-{
- // Wrapped object constructed in-place via a TypedInPlaceFactory.
- // No temporary created.
- W ( TypedInPlaceFactory2<X,int,std::string&rt;(123,"hello")) ;
-}
-</pre>
-<p>The factories are divided in two groups:<ul>
- <li><u>TypedInPlaceFactories</u>: those which take the target type as a primary template parameter.</li>
- <li><u>InPlaceFactories</u>: those with a template <code>construct(void*)</code> member function taking the target type.</li>
- </ul>
-<p>Within each group, all the family members differ only in the number of parameters allowed.</p>
-<p></p>
-<p>This library provides an overloaded set of helper template functions to construct these factories
-without requiring unnecessary template parameters:</p>
-<pre>template<class A0,...,class AN>
-InPlaceFactory<i>N </i><A0,...,AN> <b>in_place</b> ( A0 const& a0, ..., AN const& aN) ;
-
-template<class T,class A0,...,class AN>
-TypedInPlaceFactory<i>N </i><T,A0,...,AN> <b>in_place</b> ( T const& a0, A0 const& a0, ..., AN const& aN) ;</pre>
-
-<p>In-place factories can be used generically by the wrapper and user as follows:</p>
-<pre>class W
-{
- X wrapped_ ;
-
-public:
-
- W ( X const& x ) : wrapped_(x) {}
-
- template<class InPlaceFactory></class>
- W ( InPlaceFactory const& fac ) { fac.template <X>construct(&wrapped_) ; }
-
-} ;</pre>
-<pre>void foo()
-{
- // Wrapped object constructed in-place via a InPlaceFactory.
- // No temporary created.
- W ( in_place(123,"hello") ) ;
-}
-</pre>
-<p>The factories are implemented in the headers: in_place_factory.hpp and typed_in_place_factory.hpp </p>
-
-<HR>
-
-<H2><A NAME="bool">A note about optional<bool></A></H2>
-<p><code>optional<bool></code> should be used with special caution and consideration.</p>
-<p>First, it is functionally similar to a tristate boolean (false,maybe,true) —such as boost::tribool—except that in a tristate boolean,
-the <i>maybe</i> state <u>represents a valid value</u>, unlike the corresponding state
-of an uninitialized optional<bool>.<br>
-It should be carefully considered if an optional<bool> instead of a tribool is really needed</p>
-<p>Second, optional<> provides a simple way to test initialization state: an implicit conversion to a type that evaluates as a 'bool' in a boolean context.<br>
-Using optional<bool> can lead to subtle errors due to this implicit conversion:</p>
-<pre>void foo ( bool v ) ;
-void bar()
-{
- optional<bool> v = try();
-
- // The following intended to pass the <b>value</b> of 'v' to foo():
- foo(v);
- // But instead, the <i>initialization state</i> is passed
- // due to a typo: it should have been foo(<b>*</b>v).
-}
-</pre>
-<p>The only implicit conversion is to bool, and it is <i>safe</i> in the sense that typical
-integral promotions don't apply (i.e. if foo() takes an 'int' instead, it won't compile). <HR>
-
-<H2><A NAME="exsafety">Exception Safety Guarantees</A></H2>
-
-<H3><u>Assignment:</u></H3>
-<p><i>IMPORTANT NOTE: This changed in 1.33.1 with respect to previous versions</i></p>
-<p>Because of the current implementation (see Implementation Notes), all
-of the assignment methods:</p>
-<ul>
- <li> <code>optional<T>::operator= ( optional<T> const& ) </code>
- </li>
- <li> <code>optional<T>::operator= ( T const& ) </code></li>
- <li> <code>template<class U> optional<T>::operator= ( optional<U> const& ) </code>
- </li>
- <li> <code>template<class InPlaceFactory> optional<T>::operator= (
- InPlaceFactory const& ) </code></li>
- <li> <code>template<class TypedInPlaceFactory> optional<T>::operator= (
- TypedInPlaceFactory const& ) </code></li>
-</ul>
-<p>cannot offer any <i>exception safety guarantee</i> beyond that provided by <code>T::operator=( T const& )</code></p>
-<p>On the other hand, the <i>uninitializing</i> methods:</p>
-<ul>
- <li><code>optional<T>::operator= ( detail::none_t ) </code></li>
-</ul>
-<p>Provides the no-throw guarantee (assuming a no-throw T::~T()) becuse it only destroys the stored object.</p>
-
-<H3><u>Swap:</u></H3>
-<p><code>void swap( optional<T>&, optional<T>& )</code> has the same exception guarantee as <code>swap(T&,T&)</code> when both optionals are initialized.<br>
-If only one of the optionals is initialized, it gives the same exception guarantee as <code>T::operator=( T const& )</code> (since <code>optional<T>::operator=( none_t )</code> doesn't throw).<br>
-If none of the optionals is initialized, it has no-throw guarantee since it is a no-op. </p>
-
-<HR>
-
-<H2><A NAME="requirements">Type requirements</A></H2>
-<p>In general, T must be Copy Constructible and have a no-throw destructor. The copy-constructible requirement is not needed
-if InPlaceFactories are used.<br>
-T <u>is not</u> required to be Default Constructible </p>
-
-<HR>
-
-<H2><A NAME="impl">Implementation Notes</A></H2>
-<p>optional<T> is currently implemented
- using a custom aligned storage facility built from <code>alignment_of</code> and <code>type_with_alignment</code> (both from Type Traits).
- It uses a separate boolean flag to indicate the initialization state.</p>
-<p>Placement new with T's copy constructor and T's destructor
- is explicitly used to initialize and destroy optional values. This allows T's default constructor to be effectively by-passed.</p>
-<p>If assignment is used and the lvalue optional is uninitialized, T's copy constructor is used. However, if it is already initialized, T's assignment operator is used. This prevents optional from offering any exception guarantee stronger than the one offered by the type T itself</p>
-
-<HR>
-
-<H2><A NAME="porta">Dependencies and Portability</A></H2>
-
-<p>The implementation uses <code>type_traits/alignment_of.hpp</code> and <code>type_traits/type_with_alignment.hpp</code></p>
-
-<HR>
-
-<H2><A NAME="credits">Acknowledgments</A></H2>
-<p>Pre-formal review:</p>
-<blockquote>
-<p>Peter Dimov suggested the name 'optional', and was the first to point out the
- need for aligned storage<br>
- Douglas Gregor developed 'type_with_alignment', and later Eric Friedman coded
- 'aligned_storage', which are the core of the optional class implementation.<br>
- Andrei Alexandrescu and Brian Parker also worked with aligned storage techniques
- and their work influenced the current implementation.<br>
- Gennadiy Rozental made extensive and important comments which shaped the design.<br>
- Vesa Karvonen and Douglas Gregor made quite useful comparisons between optional,
- variant and any; and made other relevant comments. Douglas Gregor and Peter
- Dimov commented on comparisons and evaluation in boolean contexts.<br>
- Eric Friedman helped understand the issues involved with aligned storage, move/copy
- operations and exception safety.<br>
- Many others have participated with useful comments: Aleksey Gurotov, Kevlin
- Henney, David Abrahams, and others I can't recall. </p>
-</blockquote>
-<p>Post-formal review:</p>
-<blockquote>
- <p>William Kempf carefully considered the originally proposed interface and
- suggested the new interface which is currently used. He also started and fueled
- the discussion about the analogy optional<>/smart pointer and about
- relational operators.<br>
- Peter Dimov, Joel de Guzman, David Abrahams, Tanton Gibbs and Ian Hanson focused
- on the relational semantics of optional (originally undefined); concluding
- with the fact that the pointer-like interface doesn't make it a pointer so
- it shall have deep relational operators.<br>
- Augustus Saunders also explored the different relational semantics between
- optional<> and a pointer and developed the OptionalPointee concept as
- an aid against potential conflicts on generic code.<br>
- Joel de Guzman noticed that optional<> can be seen as an API on top
- of variant<T,nil_t>.<br>
- Dave Gomboc explained the meaning and usage of the Haskell analog to optional<>:
- the Maybe type constructor (analogy originally pointed out by David Sankel).<br>
- Other comments were posted by Vincent Finn, Anthony Williams, Ed Brey, Rob
- Stewart, and others.<br>
- Joel de Guzman made the case for the support of references and helped with
- the proper semantics.<br>
- Mat Marcus shown the virtues of a value-oriented interface, influencing the
- current design, and contributed the idea of "none".</p>
-</blockquote>
-<HR>
-
-<P>Revised March 27, 2007</P>
-<p>© Copyright Fernando Luis Cacciola Carballal, 2003-2007</p>
-<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)</p>
-<P>Developed by <A HREF="mailto:fernando_cacciola_at_[hidden]">Fernando Cacciola</A>,
-the latest version of this file can be found at <A
-HREF="http://www.boost.org">www.boost.org</A>, and the boost discussion lists</P>
-</pre></BODY>
-</HTML>
\ No newline at end of file
Modified: branches/release/libs/optional/doc/optional.qbk
==============================================================================
--- branches/release/libs/optional/doc/optional.qbk (original)
+++ branches/release/libs/optional/doc/optional.qbk 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -40,11 +40,6 @@
[/ Icons ]
-[def __NOTE__ [$images/note.png]]
-[def __ALERT__ [$images/caution.png]]
-[def __DETAIL__ [$images/note.png]]
-[def __TIP__ [$images/tip.png]]
-[def __QUESTION_MARK__ [$images/question.png]]
[def __SPACE__ [$images/space.png]]
[def __GO_TO__ [$images/callouts/R.png]]
Modified: branches/release/libs/optional/doc/reference.qbk
==============================================================================
--- branches/release/libs/optional/doc/reference.qbk (original)
+++ branches/release/libs/optional/doc/reference.qbk 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -126,6 +126,7 @@
Because `T` might be of reference type, in the sequel, those entries whose
semantic depends on `T` being of reference type or not will be distinguished
using the following convention:
+
* If the entry reads: `optional<T`['(not a ref)]`>`, the description
corresponds only to the case where `T` is not of reference type.
* If the entry reads: `optional<T&>`, the description corresponds only to
Modified: branches/release/libs/optional/index.html
==============================================================================
--- branches/release/libs/optional/index.html (original)
+++ branches/release/libs/optional/index.html 2008-02-14 14:35:00 EST (Thu, 14 Feb 2008)
@@ -1,11 +1,11 @@
<html>
<head>
-<meta http-equiv="refresh" content="0; URL=doc/optional.html">
+<meta http-equiv="refresh" content="0; URL=doc/html/index.html">
</head>
<body>
Automatic redirection failed, please go to
-doc/optional.html. <hr>
-<p>© Copyright Beman Dawes, 2001</p>
+doc/html/index.html. <hr>
+<p>� Copyright Beman Dawes, 2001</p>
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy
at www.boost.org/LICENSE_1_0.txt)</p>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk