diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2015-04-08 03:09:47 +0000 |
---|---|---|
committer | <> | 2015-05-05 14:37:32 +0000 |
commit | f2541bb90af059680aa7036f315f052175999355 (patch) | |
tree | a5b214744b256f07e1dc2bd7273035a7808c659f /libs/optional/doc/html | |
parent | ed232fdd34968697a68783b3195b1da4226915b5 (diff) | |
download | boost-tarball-master.tar.gz |
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_58_0.tar.bz2.HEADboost_1_58_0master
Diffstat (limited to 'libs/optional/doc/html')
38 files changed, 3442 insertions, 2354 deletions
diff --git a/libs/optional/doc/html/boost_optional/acknowledgements.html b/libs/optional/doc/html/boost_optional/acknowledgements.html index 659795dbb..d025d5075 100644 --- a/libs/optional/doc/html/boost_optional/acknowledgements.html +++ b/libs/optional/doc/html/boost_optional/acknowledgements.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> <link rel="home" href="../index.html" title="Boost.Optional"> <link rel="up" href="../index.html" title="Boost.Optional"> -<link rel="prev" href="dependencies_and_portability/optional_reference_binding.html" title="Optional Reference Binding"> +<link rel="prev" href="relnotes.html" title="Release Notes"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> @@ -19,7 +19,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a> +<a accesskey="p" href="relnotes.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a> </div> <div class="section"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> @@ -116,7 +116,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -124,7 +124,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a> +<a accesskey="p" href="relnotes.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/dependencies_and_portability.html b/libs/optional/doc/html/boost_optional/dependencies_and_portability.html index b99d3b1d6..7c3063717 100644 --- a/libs/optional/doc/html/boost_optional/dependencies_and_portability.html +++ b/libs/optional/doc/html/boost_optional/dependencies_and_portability.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> <link rel="home" href="../index.html" title="Boost.Optional"> <link rel="up" href="../index.html" title="Boost.Optional"> -<link rel="prev" href="reference/detailed_semantics.html" title="Detailed Semantics"> +<link rel="prev" href="reference/header__boost_optional_hpp_.html" title="Header <boost/optional.hpp>"> <link rel="next" href="dependencies_and_portability/optional_reference_binding.html" title="Optional Reference Binding"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -20,7 +20,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="reference/detailed_semantics.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="reference/header__boost_optional_hpp_.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> @@ -75,7 +75,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -83,7 +83,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="reference/detailed_semantics.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="reference/header__boost_optional_hpp_.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/dependencies_and_portability/optional_reference_binding.html b/libs/optional/doc/html/boost_optional/dependencies_and_portability/optional_reference_binding.html index b27d9c1f1..bb9f5d6ec 100644 --- a/libs/optional/doc/html/boost_optional/dependencies_and_portability/optional_reference_binding.html +++ b/libs/optional/doc/html/boost_optional/dependencies_and_portability/optional_reference_binding.html @@ -7,7 +7,7 @@ <link rel="home" href="../../index.html" title="Boost.Optional"> <link rel="up" href="../dependencies_and_portability.html" title="Dependencies and Portability"> <link rel="prev" href="../dependencies_and_portability.html" title="Dependencies and Portability"> -<link rel="next" href="../acknowledgements.html" title="Acknowledgements"> +<link rel="next" href="../relnotes.html" title="Release Notes"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> @@ -20,7 +20,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../acknowledgements.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../relnotes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> @@ -86,7 +86,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -94,7 +94,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../acknowledgements.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../relnotes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/quick_start.html b/libs/optional/doc/html/boost_optional/quick_start.html index 18ee7c297..d6b1c3964 100644 --- a/libs/optional/doc/html/boost_optional/quick_start.html +++ b/libs/optional/doc/html/boost_optional/quick_start.html @@ -155,7 +155,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/quick_start/bypassing_unnecessary_default_construction.html b/libs/optional/doc/html/boost_optional/quick_start/bypassing_unnecessary_default_construction.html index ed964cf30..1d75a3f5b 100644 --- a/libs/optional/doc/html/boost_optional/quick_start/bypassing_unnecessary_default_construction.html +++ b/libs/optional/doc/html/boost_optional/quick_start/bypassing_unnecessary_default_construction.html @@ -61,7 +61,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/quick_start/optional_automatic_variables.html b/libs/optional/doc/html/boost_optional/quick_start/optional_automatic_variables.html index 8d22f8642..bde643c72 100644 --- a/libs/optional/doc/html/boost_optional/quick_start/optional_automatic_variables.html +++ b/libs/optional/doc/html/boost_optional/quick_start/optional_automatic_variables.html @@ -61,7 +61,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/quick_start/optional_data_members.html b/libs/optional/doc/html/boost_optional/quick_start/optional_data_members.html index abb558914..1a1a3b078 100644 --- a/libs/optional/doc/html/boost_optional/quick_start/optional_data_members.html +++ b/libs/optional/doc/html/boost_optional/quick_start/optional_data_members.html @@ -80,7 +80,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/quick_start/storage_in_containers.html b/libs/optional/doc/html/boost_optional/quick_start/storage_in_containers.html index f13f5a77d..295fcce18 100644 --- a/libs/optional/doc/html/boost_optional/quick_start/storage_in_containers.html +++ b/libs/optional/doc/html/boost_optional/quick_start/storage_in_containers.html @@ -50,7 +50,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/reference/detailed_semantics.html b/libs/optional/doc/html/boost_optional/reference/detailed_semantics.html deleted file mode 100644 index dfbfc871f..000000000 --- a/libs/optional/doc/html/boost_optional/reference/detailed_semantics.html +++ /dev/null @@ -1,2098 +0,0 @@ -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> -<title>Detailed Semantics</title> -<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> -<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> -<link rel="home" href="../../index.html" title="Boost.Optional"> -<link rel="up" href="../../optional/reference.html" title="Reference"> -<link rel="prev" href="../../optional/reference.html" title="Reference"> -<link rel="next" href="../dependencies_and_portability.html" title="Dependencies and Portability"> -</head> -<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> -<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"><a href="../../../../../../index.html">Home</a></td> -<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> -<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> -<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> -<td align="center"><a href="../../../../../../more/index.htm">More</a></td> -</tr></table> -<hr> -<div class="spirit-nav"> -<a accesskey="p" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> -</div> -<div class="section"> -<div class="titlepage"><div><div><h3 class="title"> -<a name="boost_optional.reference.detailed_semantics"></a><a class="link" href="detailed_semantics.html" title="Detailed Semantics">Detailed - Semantics</a> -</h3></div></div></div> -<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: - </p> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - 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 class="listitem"> - 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 class="listitem"> - 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="../../../../../../doc/src/images/note.png"></td> -<th align="left">Note</th> -</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> -<h5> -<a name="boost_optional.reference.detailed_semantics.h0"></a> - <span class="phrase"><a name="boost_optional.reference.detailed_semantics.optional_class_member_functions"></a></span><a class="link" href="detailed_semantics.html#boost_optional.reference.detailed_semantics.optional_class_member_functions">optional - class member functions</a> - </h5> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">optional</span><span class="special">()</span> - <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Default-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">uninitialized</span>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> T's default constructor <span class="underline">is not</span> called. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">def</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_none_t"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Constructs an <code class="computeroutput"><span class="identifier">optional</span></code> uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">uninitialized</span>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code>'s - default constructor <span class="underline">is not</span> called. - The expression <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">none</span></code> - denotes an instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">none_t</span></code> - that can be used as the parameter. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">none</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">n</span><span class="special">(</span><span class="identifier">none</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">n</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_copy_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> - is <code class="computeroutput"><span class="keyword">true</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Directly-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> - and its value is a <span class="emphasis"><em>copy</em></span> of <code class="computeroutput"><span class="identifier">v</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> is called. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">);</span></code> - in that case, this constructor has no effect. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">ref</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Directly-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> - and its value is an instance of an internal type wrapping the reference - <code class="computeroutput"><span class="identifier">ref</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">T</span><span class="special">&</span> <span class="identifier">vref</span> <span class="special">=</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">vref</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -<span class="special">++</span> <span class="identifier">v</span> <span class="special">;</span> <span class="comment">// mutate referee</span> -<span class="identifier">assert</span> <span class="special">(*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span><span class="special">);</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_move_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> - <span class="identifier">v</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> - is <code class="computeroutput"><span class="keyword">true</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Directly-Move-Constructs an - <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> - and its value is move-constructed from <code class="computeroutput"><span class="identifier">v</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> - throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> - is called. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> - <span class="special">);</span></code> in that case, the state of - <code class="computeroutput"><span class="identifier">v</span></code> is determined by exception - safety guarantees for <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span><span class="special">&&)</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v1</span><span class="special">,</span> <span class="identifier">v2</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">v1</span><span class="special">));</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v2</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> - <span class="identifier">ref</span> <span class="special">)</span> - <span class="special">=</span> <span class="keyword">delete</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> This constructor is deleted - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_bool_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> - <span class="special">::</span><span class="identifier">optional</span><span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> - <span class="identifier">T</span><span class="special">&</span> - <span class="identifier">v</span> <span class="special">)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - If condition is true, same as: - </li></ul></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> - <span class="special">::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> - <span class="identifier">v</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - otherwise, same as: - </li></ul></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">()</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> - <span class="special">::</span><span class="identifier">optional</span><span class="special">()</span></code> - </p></blockquote></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">rhs</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_copy_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> - is <code class="computeroutput"><span class="keyword">true</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Copy-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If rhs is initialized, - <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is a <span class="emphasis"><em>copy</em></span> of the value - of <code class="computeroutput"><span class="identifier">rhs</span></code>; else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If rhs is initialized, <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> - is called. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">);</span></code> - in that case, this constructor has no effect. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">uninit</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">uninit</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init</span><span class="special">(</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">init</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">init</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Copy-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is another reference to the same object - referenced by <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; - else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, both <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - and <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> - will refer to the same object (they alias). - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">uninit</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">uninit</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> - -<span class="identifier">T</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">ref</span> <span class="special">=</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init</span><span class="special">(</span><span class="identifier">ref</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">init</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">v</span> <span class="special">=</span> <span class="number">3</span> <span class="special">;</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init2</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_move_constructor_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> - <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span></code><span class="emphasis"><em>see below</em></span><code class="computeroutput"><span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> - is <code class="computeroutput"><span class="keyword">true</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Move-constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is move constructed from <code class="computeroutput"><span class="identifier">rhs</span></code>; - else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> - throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Remarks:</strong></span> The expression inside <code class="computeroutput"><span class="keyword">noexcept</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_nothrow_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="special">&&</span> - <span class="special">)</span></code> is called. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> - <span class="special">);</span></code> in that case, <code class="computeroutput"><span class="identifier">rhs</span></code> remains initialized and the value - of <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> - is determined by exception safety of <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span><span class="special">&&)</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">uninit</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">uninit</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">init</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">uniqye_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="keyword">new</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">init</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">init</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="keyword">nullptr</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">init2</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span> <span class="special">&&</span> - <span class="identifier">rhs</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Move-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is another reference to the same object - referenced by <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; - else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, both <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - and <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> - will refer to the same object (they alias). - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">uninit</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">uninit</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> - -<span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">v</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">init</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">init</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> - -<span class="special">*</span><span class="identifier">v</span> <span class="special">=</span> <span class="number">3</span> <span class="special">;</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init2</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Copy-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is a <span class="emphasis"><em>copy</em></span> of the value - of rhs converted to type <code class="computeroutput"><span class="identifier">T</span></code>; - else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> is called if <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, which requires a valid conversion from <code class="computeroutput"><span class="identifier">U</span></code> to <code class="computeroutput"><span class="identifier">T</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">);</span></code> - in that case, this constructor has no effect. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">x</span><span class="special">(</span><span class="number">123.4</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">==</span> <span class="number">123.4</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">y</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span><span class="special">(</span> <span class="special">*</span><span class="identifier">y</span> <span class="special">==</span> <span class="number">123</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_move_constructor_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> - <span class="identifier">rhs</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Move-constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is move-constructed from <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">)</span></code> - throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">)</span></code> - is called if <code class="computeroutput"><span class="identifier">rhs</span></code> is initialized, - which requires a valid conversion from <code class="computeroutput"><span class="identifier">U</span></code> - to <code class="computeroutput"><span class="identifier">T</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> - <span class="special">);</span></code> in that case, <code class="computeroutput"><span class="identifier">rhs</span></code> remains initialized and the value - of <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> - is determined by exception safety guarantee of <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">)</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">x</span><span class="special">(</span><span class="number">123.4</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">==</span> <span class="number">123.4</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">y</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">))</span> <span class="special">;</span> -<span class="identifier">assert</span><span class="special">(</span> <span class="special">*</span><span class="identifier">y</span> <span class="special">==</span> <span class="number">123</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_constructor_factory"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">InPlaceFactory</span><span class="special">></span> - <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">TypedInPlaceFactory</span><span class="special">></span> - <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Constructs an <code class="computeroutput"><span class="identifier">optional</span></code> with a value of <code class="computeroutput"><span class="identifier">T</span></code> obtained from the factory. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> - and its value is <span class="emphasis"><em>directly given</em></span> from the factory - <code class="computeroutput"><span class="identifier">f</span></code> (i.e., the value <span class="underline">is not copied</span>). - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever the <code class="computeroutput"><span class="identifier">T</span></code> - constructor called by the factory throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> See <a class="link" href="../tutorial/in_place_factories.html" title="In-Place Factories">In-Place - Factories</a> - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during the call to the <code class="computeroutput"><span class="identifier">T</span></code> - constructor used by the factory; in that case, this constructor has no - effect. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">C</span> <span class="special">{</span> <span class="identifier">C</span> <span class="special">(</span> <span class="keyword">char</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">)</span> <span class="special">;</span> <span class="special">}</span> <span class="special">;</span> - -<span class="identifier">C</span> <span class="identifier">v</span><span class="special">(</span><span class="char">'A'</span><span class="special">,</span><span class="number">123.4</span><span class="special">,</span><span class="string">"hello"</span><span class="special">);</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">C</span><span class="special">></span> <span class="identifier">x</span><span class="special">(</span> <span class="identifier">in_place</span> <span class="special">(</span><span class="char">'A'</span><span class="special">,</span> <span class="number">123.4</span><span class="special">,</span> <span class="string">"hello"</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// InPlaceFactory used</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">C</span><span class="special">></span> <span class="identifier">y</span><span class="special">(</span> <span class="identifier">in_place</span><span class="special"><</span><span class="identifier">C</span><span class="special">>(</span><span class="char">'A'</span><span class="special">,</span> <span class="number">123.4</span><span class="special">,</span> <span class="string">"hello"</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// TypedInPlaceFactory used</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">y</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_equal_none_t"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized destroys its contained - value. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_equal_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">rhs</span> <span class="special">)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Assigns the value <code class="computeroutput"><span class="identifier">rhs</span></code> to an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and its value is a - <span class="emphasis"><em>copy</em></span> of <code class="computeroutput"><span class="identifier">rhs</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&)</span></code> - throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - assignment operator is used, otherwise, its copy-constructor is used. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> In the event of an - exception, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is unchanged and its value unspecified - as far as <code class="computeroutput"><span class="identifier">optional</span></code> is - concerned (it is up to <code class="computeroutput"><span class="identifier">T</span></code>'s - <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>). - If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initially uninitialized and <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>copy constructor</em></span> fails, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is left properly uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">x</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span> - -<span class="identifier">T</span> <span class="identifier">y</span><span class="special">;</span> -<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">y</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">y</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> - <span class="identifier">rhs</span> <span class="special">)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> (Re)binds the wrapped reference. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and it references - the same object referenced by <code class="computeroutput"><span class="identifier">rhs</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized, it is <span class="emphasis"><em>rebound</em></span> - to the new object. See <a class="link" href="../tutorial/rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding semantics for assignment of optional references">here</a> - for details on this behavior. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span> -<span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> -<span class="identifier">T</span><span class="special">&</span> <span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span> -<span class="identifier">T</span><span class="special">&</span> <span class="identifier">rb</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">ra</span><span class="special">)</span> <span class="special">;</span> - -<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">rb</span> <span class="special">;</span> <span class="comment">// binds 'def' to 'b' through 'rb'</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">)</span> <span class="special">;</span> -<span class="special">*</span><span class="identifier">def</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span> <span class="comment">// changes the value of 'b' to a copy of the value of 'a'</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">b</span> <span class="special">==</span> <span class="identifier">a</span> <span class="special">)</span> <span class="special">;</span> -<span class="keyword">int</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> -<span class="keyword">int</span><span class="special">&</span> <span class="identifier">rc</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">;</span> -<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">rc</span> <span class="special">;</span> <span class="comment">// REBINDS to 'c' through 'rc'</span> -<span class="identifier">c</span> <span class="special">=</span> <span class="number">4</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="number">4</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_move_equal_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">rhs</span> - <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Moves the value <code class="computeroutput"><span class="identifier">rhs</span></code> to an <code class="computeroutput"><span class="identifier">optional</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and its value is moved - from <code class="computeroutput"><span class="identifier">rhs</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> - or <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&&)</span></code> - throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - move-assignment operator is used, otherwise, its move-constructor is - used. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> In the event of an - exception, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is unchanged and its value unspecified - as far as <code class="computeroutput"><span class="identifier">optional</span></code> is - concerned (it is up to <code class="computeroutput"><span class="identifier">T</span></code>'s - <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>). - If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initially uninitialized and <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>move constructor</em></span> fails, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is left properly uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">x</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span> - -<span class="identifier">T</span> <span class="identifier">y1</span><span class="special">,</span> <span class="identifier">y2</span><span class="special">,</span> <span class="identifier">yR</span><span class="special">;</span> -<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">y1</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">yR</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">y2</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">yR</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> - <span class="identifier">rhs</span> <span class="special">)</span> - <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> This assignment operator is deleted. - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_equal_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">rhs</span> <span class="special">)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - is <a href="../../../../../utility/CopyConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></a> and <code class="computeroutput"><span class="identifier">CopyAssignable</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> - <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> -<li class="listitem"> - If <code class="computeroutput"><span class="special">!*</span><span class="keyword">this</span> - <span class="special">&&</span> <span class="special">!</span><span class="identifier">rhs</span></code> no effect, otherwise - </li> -<li class="listitem"> - if <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> - <span class="special">&&</span> <span class="special">!</span><span class="identifier">rhs</span></code>, destroys the contained value - by calling <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>, otherwise - </li> -<li class="listitem"> - if <code class="computeroutput"><span class="special">!*</span><span class="keyword">this</span> - <span class="special">&&</span> <span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>, initializes the contained value - as if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> - with <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>, - otherwise - </li> -<li class="listitem"> - (if <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> - <span class="special">&&</span> <span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>) assigns <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> to the contained value. - </li> -</ul></div> - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>; - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> If any exception is - thrown, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">rhs</span></code> - remains unchanged. If an exception is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s copy constructor, no effect. If - an exception is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s - copy assignment, the state of its contained value is as defined by the - exception safety guarantee of <code class="computeroutput"><span class="identifier">T</span></code>'s - copy assignment. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> - -<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">def</span> <span class="special">)</span> <span class="special">;</span> -<span class="comment">// previous value (copy of 'v') destroyed from within 'opt'.</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> - <span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> (Re)binds thee wrapped reference. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and it references - the same object referenced by <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; otherwise, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized (and references - no object). - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized and so is <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>, - <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is <span class="emphasis"><em>rebound</em></span> to the new object. See <a class="link" href="../tutorial/rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding semantics for assignment of optional references">here</a> - for details on this behavior. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span> -<span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> -<span class="identifier">T</span><span class="special">&</span> <span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span> -<span class="identifier">T</span><span class="special">&</span> <span class="identifier">rb</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">ora</span><span class="special">(</span><span class="identifier">ra</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">orb</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span> <span class="special">;</span> - -<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">orb</span> <span class="special">;</span> <span class="comment">// binds 'def' to 'b' through 'rb' wrapped within 'orb'</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">)</span> <span class="special">;</span> -<span class="special">*</span><span class="identifier">def</span> <span class="special">=</span> <span class="identifier">ora</span> <span class="special">;</span> <span class="comment">// changes the value of 'b' to a copy of the value of 'a'</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">b</span> <span class="special">==</span> <span class="identifier">a</span> <span class="special">)</span> <span class="special">;</span> -<span class="keyword">int</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> -<span class="keyword">int</span><span class="special">&</span> <span class="identifier">rc</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">orc</span><span class="special">(</span><span class="identifier">rc</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">ora</span> <span class="special">=</span> <span class="identifier">orc</span> <span class="special">;</span> <span class="comment">// REBINDS ora to 'c' through 'rc'</span> -<span class="identifier">c</span> <span class="special">=</span> <span class="number">4</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">ora</span> <span class="special">==</span> <span class="number">4</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_move_equal_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> - <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span></code><span class="emphasis"><em>see below</em></span><code class="computeroutput"><span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - is <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> - and <code class="computeroutput"><span class="identifier">MoveAssignable</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> - <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> -<li class="listitem"> - If <code class="computeroutput"><span class="special">!*</span><span class="keyword">this</span> - <span class="special">&&</span> <span class="special">!</span><span class="identifier">rhs</span></code> no effect, otherwise - </li> -<li class="listitem"> - if <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> - <span class="special">&&</span> <span class="special">!</span><span class="identifier">rhs</span></code>, destroys the contained value - by calling <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>, otherwise - </li> -<li class="listitem"> - if <code class="computeroutput"><span class="special">!*</span><span class="keyword">this</span> - <span class="special">&&</span> <span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>, initializes the contained value - as if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> - with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code>, - otherwise - </li> -<li class="listitem"> - (if <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> - <span class="special">&&</span> <span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>) assigns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code> to the contained value. - </li> -</ul></div> - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>; - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Remarks:</strong></span> The expression inside <code class="computeroutput"><span class="keyword">noexcept</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_nothrow_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span> <span class="special">&&</span> - <span class="identifier">is_nothrow_move_assignable</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> If any exception is - thrown, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">rhs</span></code> - remains unchanged. If an exception is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s move constructor, the state of - <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> - is determined by the exception safety guarantee of <code class="computeroutput"><span class="identifier">T</span></code>'s - move constructor. If an exception is thrown during the call to T's move-assignment, - the state of <code class="computeroutput"><span class="special">**</span><span class="keyword">this</span></code> - and <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> - is determined by the exception safety guarantee of T's move assignment. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> - -<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">def</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> - <span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>&&</span> <span class="identifier">rhs</span> - <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Same as <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> - <span class="special">)</span></code>. - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_equal_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Assigns another convertible - optional to an optional. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is a <span class="emphasis"><em>copy</em></span> of the value - of <code class="computeroutput"><span class="identifier">rhs</span></code> <span class="emphasis"><em>converted</em></span> - to type <code class="computeroutput"><span class="identifier">T</span></code>; else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If both <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and rhs are initially initialized, - <code class="computeroutput"><span class="identifier">T</span></code>'s <span class="emphasis"><em>assignment - operator</em></span> (from <code class="computeroutput"><span class="identifier">U</span></code>) - is used. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initially initialized but <code class="computeroutput"><span class="identifier">rhs</span></code> - is uninitialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>destructor</em></span> is called. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initially uninitialized but rhs - is initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>converting constructor</em></span> (from <code class="computeroutput"><span class="identifier">U</span></code>) - is called. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> In the event of an - exception, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is unchanged and its value unspecified - as far as optional is concerned (it is up to <code class="computeroutput"><span class="identifier">T</span></code>'s - <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>). - If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initially uninitialized and <code class="computeroutput"><span class="identifier">T</span></code>'s - converting constructor fails, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is left properly uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt0</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">opt1</span><span class="special">;</span> - -<span class="identifier">opt1</span> <span class="special">=</span> <span class="identifier">opt0</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt1</span> <span class="special">==</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_move_equal_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> - <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Move-assigns another convertible - optional to an optional. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> - is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initialized and its value is moved from the value of <code class="computeroutput"><span class="identifier">rhs</span></code>; else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">)</span></code> - or <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> - <span class="special">)</span></code> throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> If both <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">rhs</span></code> - are initially initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>assignment operator</em></span> (from <code class="computeroutput"><span class="identifier">U</span><span class="special">&&</span></code>) is used. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initially initialized but <code class="computeroutput"><span class="identifier">rhs</span></code> - is uninitialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>destructor</em></span> is called. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initially uninitialized but <code class="computeroutput"><span class="identifier">rhs</span></code> is initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s - <span class="emphasis"><em>converting constructor</em></span> (from <code class="computeroutput"><span class="identifier">U</span><span class="special">&&</span></code>) is called. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> In the event of an - exception, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is unchanged and its value unspecified - as far as optional is concerned (it is up to <code class="computeroutput"><span class="identifier">T</span></code>'s - <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>). - If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is initially uninitialized and <code class="computeroutput"><span class="identifier">T</span></code>'s - converting constructor fails, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is left properly uninitialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt0</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">opt1</span><span class="special">;</span> - -<span class="identifier">opt1</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">opt0</span><span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt0</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt1</span> <span class="special">)</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt1</span> <span class="special">==</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_emplace"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">void</span> <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><span class="identifier">emplace</span><span class="special">(</span> <span class="identifier">Args</span><span class="special">...&&</span> - <span class="identifier">args</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> The compiler supports rvalue - references and variadic templates. - </li> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized calls <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">=</span> <span class="identifier">none</span></code>. - Then initializes in-place the contained value as if direct-initializing - an object of type <code class="computeroutput"><span class="identifier">T</span></code> with - <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">Args</span><span class="special">>(</span><span class="identifier">args</span><span class="special">)...</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever the selected <code class="computeroutput"><span class="identifier">T</span></code>'s constructor throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - need not be <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> - or <code class="computeroutput"><span class="identifier">MoveAssignable</span></code>. On - compilers that do not support variadic templates, the signature falls - back to single-argument: <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Arg</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">emplace</span><span class="special">(</span><span class="identifier">Arg</span><span class="special">&&</span> <span class="identifier">arg</span><span class="special">)</span></code>. On compilers that do not support rvalue - references, the signature falls back to two overloads: taking <code class="computeroutput"><span class="keyword">const</span></code> and non-<code class="computeroutput"><span class="keyword">const</span></code> - lvalue reference. - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> If an exception is - thrown during the initialization of <code class="computeroutput"><span class="identifier">T</span></code>, - <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - is <span class="emphasis"><em>uninitialized</em></span>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">;</span> -<span class="identifier">opt</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> <span class="comment">// create in-place using ctor T(int)</span> -<span class="identifier">opt</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">();</span> <span class="comment">// destroy previous and default-construct another T</span> -<span class="identifier">opt</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> <span class="comment">// destroy and copy-construct in-place (no assignment called)</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_equal_factory"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">InPlaceFactory</span><span class="special">></span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> - <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><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">InPlaceFactory</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">f</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">TypedInPlaceFactory</span><span class="special">></span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> - <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><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">TypedInPlaceFactory</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">f</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effect:</strong></span> Assigns an <code class="computeroutput"><span class="identifier">optional</span></code> - with a value of <code class="computeroutput"><span class="identifier">T</span></code> obtained - from the factory. - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> - and its value is <span class="emphasis"><em>directly given</em></span> from the factory - <code class="computeroutput"><span class="identifier">f</span></code> (i.e., the value <span class="underline">is not copied</span>). - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Whatever the <code class="computeroutput"><span class="identifier">T</span></code> - constructor called by the factory throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> See <a class="link" href="../tutorial/in_place_factories.html" title="In-Place Factories">In-Place - Factories</a> - </li> -<li class="listitem"> - <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only - be thrown during the call to the <code class="computeroutput"><span class="identifier">T</span></code> - constructor used by the factory; in that case, the <code class="computeroutput"><span class="identifier">optional</span></code> - object will be reset to be <span class="emphasis"><em>uninitialized</em></span>. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_reset_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">void</span> <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><span class="identifier">reset</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Deprecated:</strong></span> same as <code class="computeroutput"><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">v</span><span class="special">)</span> - <span class="special">;</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_reset"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">reset</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Deprecated:</strong></span> Same as <code class="computeroutput"><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">none_t</span> - <span class="special">);</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_get"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <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><span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> - <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><span class="identifier">get</span><span class="special">()</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">get</span> <span class="special">(</span> - <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> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <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> - <span class="special">&)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> A reference to the contained - value - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The requirement is asserted via - <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">get</span><span class="special">()</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">get</span> <span class="special">(</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> - <span class="keyword">const</span><span class="special">&</span> - <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="special">&)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <span class="underline">The</span> - reference contained. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The requirement is asserted via - <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_asterisk"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <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><span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> - <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><span class="keyword">operator</span><span class="special">*()</span> <span class="special">&;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> A reference to the contained - value - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The requirement is asserted via - <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. - On compilers that do not support ref-qualifiers on member functions these - two overloads are replaced with the classical two: a <code class="computeroutput"><span class="keyword">const</span></code> - and non-<code class="computeroutput"><span class="keyword">const</span></code> member functions. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">);</span> -<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">opt</span><span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">u</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">T</span> <span class="identifier">w</span> <span class="special">;</span> -<span class="special">*</span><span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">w</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">w</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_asterisk_move"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&&</span> - <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><span class="keyword">operator</span><span class="special">*()</span> <span class="special">&&;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> contains a value. - </li> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">val</span><span class="special">);</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The requirement is asserted via - <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. - On compilers that do not support ref-qualifiers on member functions this - overload is not present. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="special">&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">*()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="special">&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">*()</span> <span class="special">&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="special">&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">*()</span> <span class="special">&&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <span class="underline">The</span> - reference contained. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The requirement is asserted via - <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. - On compilers that do not support ref-qualifiers on member functions these - three overloads are replaced with the classical two: a <code class="computeroutput"><span class="keyword">const</span></code> and non-<code class="computeroutput"><span class="keyword">const</span></code> - member functions. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">T</span><span class="special">&</span> <span class="identifier">vref</span> <span class="special">=</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">vref</span> <span class="special">);</span> -<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">vref2</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">opt</span><span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">vref2</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -<span class="special">++</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">()</span> <span class="special">&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">return</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="special">?</span> <span class="special">*</span><span class="identifier">val</span> <span class="special">:</span> <span class="keyword">throw</span> <span class="identifier">bad_optional_access</span><span class="special">();</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - ref-qualifiers on member functions these two overloads are replaced with - the classical two: a <code class="computeroutput"><span class="keyword">const</span></code> - and non-<code class="computeroutput"><span class="keyword">const</span></code> member functions. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o0</span><span class="special">,</span> <span class="identifier">o1</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span><span class="special">.</span><span class="identifier">value</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">);</span> - -<span class="keyword">try</span> <span class="special">{</span> - <span class="identifier">o0</span><span class="special">.</span><span class="identifier">value</span><span class="special">();</span> <span class="comment">// throws</span> - <span class="identifier">assert</span> <span class="special">(</span> <span class="keyword">false</span> <span class="special">);</span> -<span class="special">}</span> -<span class="keyword">catch</span><span class="special">(</span><span class="identifier">bad_optional_access</span><span class="special">&)</span> <span class="special">{</span> - <span class="identifier">assert</span> <span class="special">(</span> <span class="keyword">true</span> <span class="special">);</span> -<span class="special">}</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_value_move"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&&</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">()</span> <span class="special">&&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">return</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="special">?</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">val</span><span class="special">)</span> <span class="special">:</span> <span class="keyword">throw</span> - <span class="identifier">bad_optional_access</span><span class="special">();</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - ref-qualifiers on member functions this overload is not present. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_value_or"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or</span><span class="special">(</span><span class="identifier">U</span> <span class="special">&&</span> - <span class="identifier">v</span><span class="special">)</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">if</span> <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="special">**</span><span class="keyword">this</span><span class="special">;</span> <span class="keyword">else</span> <span class="keyword">return</span> - <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">);</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Remarks:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code> - is not <a href="../../../../../utility/CopyConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></a> or <code class="computeroutput"><span class="identifier">U</span> <span class="special">&&</span></code> - is not convertible to <code class="computeroutput"><span class="identifier">T</span></code>, - the program is ill-formed. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - ref-qualifiers on member functions this overload is replaced with the - <code class="computeroutput"><span class="keyword">const</span></code>-qualified member function. - On compilers without rvalue reference support the type of <code class="computeroutput"><span class="identifier">v</span></code> becomes <code class="computeroutput"><span class="identifier">U</span> - <span class="keyword">const</span><span class="special">&</span></code>. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_value_or_move"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or</span><span class="special">(</span><span class="identifier">U</span> <span class="special">&&</span> - <span class="identifier">v</span><span class="special">)</span> - <span class="special">&&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">if</span> <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(**</span><span class="keyword">this</span><span class="special">);</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">);</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Remarks:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code> - is not <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> - or <code class="computeroutput"><span class="identifier">U</span> <span class="special">&&</span></code> - is not convertible to <code class="computeroutput"><span class="identifier">T</span></code>, - the program is ill-formed. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - ref-qualifiers on member functions this overload is not present. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_value_or_call"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - is <a href="../../../../../utility/CopyConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></a> and <code class="computeroutput"><span class="identifier">F</span></code> models a <a href="http://www.sgi.com/tech/stl/Generator.html" target="_top"><code class="computeroutput"><span class="identifier">Generator</span></code></a> whose result type - is convertible to <code class="computeroutput"><span class="identifier">T</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> <code class="computeroutput"><span class="keyword">if</span> - <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="special">**</span><span class="keyword">this</span><span class="special">;</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - ref-qualifiers on member functions this overload is replaced with the - <code class="computeroutput"><span class="keyword">const</span></code>-qualified member function. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">complain_and_0</span><span class="special">()</span> -<span class="special">{</span> - <span class="identifier">clog</span> <span class="special"><<</span> <span class="string">"no value returned, using default"</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> - <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> -<span class="special">}</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">o1</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">oN</span> <span class="special">=</span> <span class="identifier">none</span><span class="special">;</span> - -<span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">o1</span><span class="special">.</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">complain_and_0</span><span class="special">);</span> <span class="comment">// fun not called</span> -<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">1</span><span class="special">);</span> - -<span class="keyword">int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="identifier">oN</span><span class="special">.</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">complain_and_0</span><span class="special">);</span> <span class="comment">// fun called</span> -<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">0</span><span class="special">);</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_value_or_call_move"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">&&</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - is <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> - and <code class="computeroutput"><span class="identifier">F</span></code> models a <a href="http://www.sgi.com/tech/stl/Generator.html" target="_top"><code class="computeroutput"><span class="identifier">Generator</span></code></a> - whose result type is convertible to <code class="computeroutput"><span class="identifier">T</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> <code class="computeroutput"><span class="keyword">if</span> - <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(**</span><span class="keyword">this</span><span class="special">);</span> <span class="keyword">else</span> <span class="keyword">return</span> - <span class="identifier">f</span><span class="special">();</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - ref-qualifiers on member functions this overload is not present. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_get_value_or_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <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><span class="identifier">get_value_or</span><span class="special">(</span> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> - <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><span class="identifier">get_value_or</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> - <span class="keyword">default</span> <span class="special">)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> - <span class="keyword">const</span><span class="special">&</span> - <span class="identifier">get_optional_value_or</span> <span class="special">(</span> - <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> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get_optional_value_or</span> - <span class="special">(</span> <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> - <span class="identifier">o</span><span class="special">,</span> - <span class="identifier">T</span><span class="special">&</span> - <span class="keyword">default</span> <span class="special">)</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Deprecated:</strong></span> Use <code class="computeroutput"><span class="identifier">value_or</span><span class="special">()</span></code> instead. - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> A reference to the contained - value, if any, or <code class="computeroutput"><span class="keyword">default</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span><span class="special">;</span> -<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">def</span><span class="special">.</span><span class="identifier">get_value_or</span><span class="special">(</span><span class="identifier">z</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">y</span> <span class="special">==</span> <span class="identifier">z</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">);</span> -<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">get_optional_value_or</span><span class="special">(</span><span class="identifier">opt</span><span class="special">,</span><span class="identifier">z</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">u</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">u</span> <span class="special">!=</span> <span class="identifier">z</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_get_ptr"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <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><span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span> - <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><span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> - <span class="keyword">const</span><span class="special">*</span> - <span class="identifier">get_pointer</span> <span class="special">(</span> - <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> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_pointer</span> - <span class="special">(</span> <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> - <span class="special">&)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized, a pointer to the - contained value; else <code class="computeroutput"><span class="number">0</span></code> (<span class="emphasis"><em>null</em></span>). - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The contained value is permanently - stored within <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, - so you should not hold nor delete this pointer - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span> <span class="identifier">copt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> -<span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">opt</span><span class="special">.</span><span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span> -<span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">cp</span> <span class="special">=</span> <span class="identifier">copt</span><span class="special">.</span><span class="identifier">get_ptr</span><span class="special">();</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">p</span> <span class="special">==</span> <span class="identifier">get_pointer</span><span class="special">(</span><span class="identifier">opt</span><span class="special">)</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">cp</span> <span class="special">==</span> <span class="identifier">get_pointer</span><span class="special">(</span><span class="identifier">copt</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_arrow"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <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><span class="keyword">operator</span> <span class="special">->()</span> - <span class="keyword">const</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span> - <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><span class="keyword">operator</span> - <span class="special">->()</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized. - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> A pointer to the contained - value. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> Nothing. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> The requirement is asserted via - <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">X</span> <span class="special">{</span> <span class="keyword">int</span> <span class="identifier">mdata</span> <span class="special">;</span> <span class="special">}</span> <span class="special">;</span> -<span class="identifier">X</span> <span class="identifier">x</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">X</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span><span class="identifier">x</span><span class="special">);</span> -<span class="identifier">opt</span><span class="special">-></span><span class="identifier">mdata</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_bool"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">explicit</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="keyword">operator</span> - <span class="keyword">bool</span><span class="special">()</span> - <span class="keyword">const</span> <span class="keyword">noexcept</span> - <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">!=</span> <span class="number">0</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> On compilers that do not support - explicit conversion operators this falls back to safe-bool idiom. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">def</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt</span> <span class="special">!=</span> <span class="number">0</span> <span class="special">);</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_operator_not"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">noexcept</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized, <code class="computeroutput"><span class="keyword">true</span></code>; - else <code class="computeroutput"><span class="keyword">false</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> This operator is provided for - those compilers which can't use the <span class="emphasis"><em>unspecified-bool-type operator</em></span> - in certain boolean contexts. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">opt</span> <span class="special">);</span> -<span class="special">*</span><span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">some_T</span> <span class="special">;</span> - -<span class="comment">// Notice the "double-bang" idiom here.</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!!</span><span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_optional_is_initialized"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_initialized</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Deprecated:</strong></span> Same as <code class="computeroutput"><span class="keyword">explicit</span> - <span class="keyword">operator</span> <span class="keyword">bool</span> - <span class="special">()</span> <span class="special">;</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<h5> -<a name="boost_optional.reference.detailed_semantics.h1"></a> - <span class="phrase"><a name="boost_optional.reference.detailed_semantics.free_functions"></a></span><a class="link" href="detailed_semantics.html#boost_optional.reference.detailed_semantics.free_functions">Free - functions</a> - </h5> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_make_optional_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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> <span class="identifier">make_optional</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">v</span><span class="special">)</span></code> for the <span class="emphasis"><em>deduced</em></span> - type <code class="computeroutput"><span class="identifier">T</span></code> of <code class="computeroutput"><span class="identifier">v</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">foo</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> - -<span class="identifier">foo</span> <span class="special">(</span> <span class="identifier">make_optional</span><span class="special">(</span><span class="number">1</span><span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> <span class="comment">// Creates an optional<int></span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_make_optional_bool_value"></a><div class="blockquote"><blockquote class="blockquote"><p> - <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> <span class="identifier">make_optional</span><span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">condition</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code> for the <span class="emphasis"><em>deduced</em></span> - type <code class="computeroutput"><span class="identifier">T</span></code> of <code class="computeroutput"><span class="identifier">v</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">calculate_foo</span><span class="special">()</span> -<span class="special">{</span> - <span class="keyword">double</span> <span class="identifier">val</span> <span class="special">=</span> <span class="identifier">compute_foo</span><span class="special">();</span> - <span class="keyword">return</span> <span class="identifier">make_optional</span><span class="special">(</span><span class="identifier">is_not_nan_and_finite</span><span class="special">(</span><span class="identifier">val</span><span class="special">),</span><span class="identifier">val</span><span class="special">);</span> -<span class="special">}</span> - -<span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">calculate_foo</span><span class="special">();</span> -<span class="keyword">if</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">v</span> <span class="special">)</span> - <span class="identifier">error</span><span class="special">(</span><span class="string">"foo wasn't computed"</span><span class="special">);</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - shall meet requirements of <a href="http://www.sgi.com/tech/stl/EqualityComparable.html" target="_top"><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></a>. - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> If both <code class="computeroutput"><span class="identifier">x</span></code> - and <code class="computeroutput"><span class="identifier">y</span></code> are initialized, - <code class="computeroutput"><span class="special">(*</span><span class="identifier">x</span> - <span class="special">==</span> <span class="special">*</span><span class="identifier">y</span><span class="special">)</span></code>. - If only <code class="computeroutput"><span class="identifier">x</span></code> or <code class="computeroutput"><span class="identifier">y</span></code> is initialized, <code class="computeroutput"><span class="keyword">false</span></code>. - If both are uninitialized, <code class="computeroutput"><span class="keyword">true</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> Pointers have shallow relational - operators while <code class="computeroutput"><span class="identifier">optional</span></code> - has deep relational operators. Do not use <code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code> directly in generic code which expect - to be given either an <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> or a pointer; use <a href="../../../../../utility/OptionalPointee.html#equal" target="_top"><code class="computeroutput"><span class="identifier">equal_pointees</span><span class="special">()</span></code></a> - instead - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">oN</span><span class="special">,</span> <span class="identifier">oN_</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o1</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">1</span><span class="special">)),</span> <span class="identifier">o1_</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">1</span><span class="special">));</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o2</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">));</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">==</span> <span class="identifier">oN</span> <span class="special">);</span> <span class="comment">// Identity implies equality</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">o1</span> <span class="special">);</span> <span class="comment">//</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">==</span> <span class="identifier">oN_</span> <span class="special">);</span> <span class="comment">// Both uninitialized compare equal</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">!=</span> <span class="identifier">o1</span> <span class="special">);</span> <span class="comment">// Initialized unequal to initialized.</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">o1_</span> <span class="special">);</span> <span class="comment">// Both initialized compare as (*lhs == *rhs)</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">!=</span> <span class="identifier">o2</span> <span class="special">);</span> <span class="comment">//</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_less_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special"><</span> <span class="special">(</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> Expression <code class="computeroutput"><span class="special">*</span><span class="identifier">x</span> <span class="special"><</span> <span class="special">*</span><span class="identifier">y</span></code> - shall be well-formed and its result shall be convertible to <code class="computeroutput"><span class="keyword">bool</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">(!</span><span class="identifier">y</span><span class="special">)</span> <span class="special">?</span> <span class="keyword">false</span> <span class="special">:</span> <span class="special">(!</span><span class="identifier">x</span><span class="special">)</span> <span class="special">?</span> <span class="keyword">true</span> - <span class="special">:</span> <span class="special">*</span><span class="identifier">x</span> <span class="special"><</span> <span class="special">*</span><span class="identifier">y</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> Pointers have shallow relational - operators while <code class="computeroutput"><span class="identifier">optional</span></code> - has deep relational operators. Do not use <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> directly in generic code which expect - to be given either an <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> or a pointer; use <a href="../../../../../utility/OptionalPointee.html#less" target="_top"><code class="computeroutput"><span class="identifier">less_pointees</span><span class="special">()</span></code></a> - instead. <code class="computeroutput"><span class="identifier">T</span></code> need not be - <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a>. Only single - <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> - is required. Other relational operations are defined in terms of this - one. If <code class="computeroutput"><span class="identifier">T</span></code>'s <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> - satisfies the axioms of <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a> (transitivity, - antisymmetry and irreflexivity), <code class="computeroutput"><span class="identifier">optinal</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> is <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a>. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">oN</span><span class="special">,</span> <span class="identifier">oN_</span><span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o0</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">0</span><span class="special">));</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o1</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">1</span><span class="special">));</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN</span> <span class="special"><</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// Identity implies equivalence</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o1</span> <span class="special"><</span> <span class="identifier">o1</span><span class="special">)</span> <span class="special">);</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN</span> <span class="special"><</span> <span class="identifier">oN_</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// Two uninitialized are equivalent</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN_</span> <span class="special"><</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special"><</span> <span class="identifier">o0</span> <span class="special">);</span> <span class="comment">// Uninitialized is less than initialized</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o0</span> <span class="special"><</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> - -<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special"><</span> <span class="identifier">o2</span> <span class="special">)</span> <span class="special">;</span> <span class="comment">// Two initialized compare as (*lhs < *rhs)</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o2</span> <span class="special"><</span> <span class="identifier">o1</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o2</span> <span class="special"><</span> <span class="identifier">o2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> -</pre> - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_not_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> - <span class="identifier">x</span> <span class="special">==</span> - <span class="identifier">y</span> <span class="special">);</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_greater_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">></span> <span class="special">(</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">(</span> - <span class="identifier">y</span> <span class="special"><</span> - <span class="identifier">x</span> <span class="special">);</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_less_or_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special"><=</span> <span class="special">(</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> - <span class="identifier">y</span> <span class="special"><</span> - <span class="identifier">x</span> <span class="special">);</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_greater_or_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">>=</span> <span class="special">(</span> - <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> - <span class="identifier">x</span> <span class="special"><</span> - <span class="identifier">y</span> <span class="special">);</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_equal_optional_none"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> - <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">==</span> <span class="special">(</span> <span class="identifier">none_t</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">!</span><span class="identifier">x</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> - need not meet requirements of <a href="http://www.sgi.com/tech/stl/EqualityComparable.html" target="_top"><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></a>. - </li> -</ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_operator_compare_not_equal_optional_none"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> - <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> - <span class="special">!=</span> <span class="special">(</span> <span class="identifier">none_t</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> - <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> - <span class="identifier">x</span> <span class="special">==</span> - <span class="identifier">y</span> <span class="special">);</span></code> - </li></ul></div> -<p> - <span class="inlinemediaobject"><img src="../../images/space.png" alt="space"></span> - </p> -<a name="reference_swap_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> - <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span> - <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">y</span> - <span class="special">)</span> <span class="special">;</span></code> - </p></blockquote></div> -<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> -<li class="listitem"> - <span class="bold"><strong>Requires:</strong></span> Lvalues of type <code class="computeroutput"><span class="identifier">T</span></code> shall be swappable and <code class="computeroutput"><span class="identifier">T</span></code> shall be <code class="computeroutput"><span class="identifier">MoveConstructible</span></code>. - </li> -<li class="listitem"> - <span class="bold"><strong>Effects:</strong></span> - <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> -<li class="listitem"> - If <code class="computeroutput"><span class="special">!*</span><span class="keyword">this</span> - <span class="special">&&</span> <span class="special">!</span><span class="identifier">rhs</span></code>, no effect, otherwise - </li> -<li class="listitem"> - if <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> - <span class="special">&&</span> <span class="special">!</span><span class="identifier">rhs</span></code>, initializes the contained - value of <code class="computeroutput"><span class="identifier">rhs</span></code> as - if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> - with the expression <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*(*</span><span class="keyword">this</span><span class="special">))</span></code>, followed by <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> does not contain a value and - <code class="computeroutput"><span class="identifier">rhs</span></code> contains a - value, otherwise - </li> -<li class="listitem"> - if <code class="computeroutput"><span class="special">!*</span><span class="keyword">this</span> - <span class="special">&&</span> <span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>, initializes the contained value - of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> - as if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> - with the expression <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code>, followed by <code class="computeroutput"><span class="identifier">rhs</span><span class="special">.</span><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> contains a value and <code class="computeroutput"><span class="identifier">rhs</span></code> does not contain a value, - otherwise - </li> -<li class="listitem"> - (if <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> - <span class="special">&&</span> <span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code>) calls <code class="computeroutput"><span class="identifier">swap</span><span class="special">(*(*</span><span class="keyword">this</span><span class="special">),</span> <span class="special">*</span><span class="identifier">rhs</span><span class="special">)</span></code>. - </li> -</ul></div> - </li> -<li class="listitem"> - <span class="bold"><strong>Postconditions:</strong></span> The states of <code class="computeroutput"><span class="identifier">x</span></code> and <code class="computeroutput"><span class="identifier">y</span></code> - interchanged. - </li> -<li class="listitem"> - <span class="bold"><strong>Throws:</strong></span> If both are initialized, whatever - <code class="computeroutput"><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&,</span><span class="identifier">T</span><span class="special">&)</span></code> - throws. If only one is initialized, whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> - throws. - </li> -<li class="listitem"> - <span class="bold"><strong>Example:</strong></span> -<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">x</span><span class="special">(</span><span class="number">12</span><span class="special">);</span> -<span class="identifier">T</span> <span class="identifier">y</span><span class="special">(</span><span class="number">21</span><span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def0</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def1</span> <span class="special">;</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">optX</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> -<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">optY</span><span class="special">(</span><span class="identifier">y</span><span class="special">);</span> - -<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">def0</span><span class="special">,</span><span class="identifier">def1</span><span class="special">);</span> <span class="comment">// no-op</span> - -<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">def0</span><span class="special">,</span><span class="identifier">optX</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def0</span> <span class="special">==</span> <span class="identifier">x</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">optX</span> <span class="special">);</span> - -<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">def0</span><span class="special">,</span><span class="identifier">optX</span><span class="special">);</span> <span class="comment">// Get back to original values</span> - -<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">optX</span><span class="special">,</span><span class="identifier">optY</span><span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">optX</span> <span class="special">==</span> <span class="identifier">y</span> <span class="special">);</span> -<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">optY</span> <span class="special">==</span> <span class="identifier">x</span> <span class="special">);</span> -</pre> - </li> -</ul></div> -</div> -<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> -<td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> - Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) - </p> -</div></td> -</tr></table> -<hr> -<div class="spirit-nav"> -<a accesskey="p" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> -</div> -</body> -</html> diff --git a/libs/optional/doc/html/boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html new file mode 100644 index 000000000..e0d8ba9ca --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html @@ -0,0 +1,63 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Header <boost/optional/bad_optional_access.hpp></title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../../optional/reference.html" title="Reference"> +<link rel="prev" href="../../optional/reference.html" title="Reference"> +<link rel="next" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html" title="Detailed semantics"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_optional.reference.header__boost_optional_bad_optional_access_hpp_"></a><a class="link" href="header__boost_optional_bad_optional_access_hpp_.html" title="Header <boost/optional/bad_optional_access.hpp>">Header + <boost/optional/bad_optional_access.hpp></a> +</h3></div></div></div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.header__boost_optional_bad_optional_access_hpp_.synopsis"></a><a class="link" href="header__boost_optional_bad_optional_access_hpp_.html#boost_optional.reference.header__boost_optional_bad_optional_access_hpp_.synopsis" title="Synopsis">Synopsis</a> +</h4></div></div></div> +<p> +</p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">bad_optional_access</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="identifier">bad_optional_access</span><span class="special">();</span> <a class="link" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html#reference_bad_optional_access_constructor"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="special">};</span> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<p> + </p> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/reference/header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html new file mode 100644 index 000000000..2b69cac08 --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html @@ -0,0 +1,60 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Detailed semantics</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Boost.Optional"> +<link rel="up" href="../header__boost_optional_bad_optional_access_hpp_.html" title="Header <boost/optional/bad_optional_access.hpp>"> +<link rel="prev" href="../header__boost_optional_bad_optional_access_hpp_.html" title="Header <boost/optional/bad_optional_access.hpp>"> +<link rel="next" href="../io_header.html" title="Header <boost/optional/optional_io.hpp>"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../header__boost_optional_bad_optional_access_hpp_.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../header__boost_optional_bad_optional_access_hpp_.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../io_header.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.header__boost_optional_bad_optional_access_hpp_.detailed_semantics"></a><a class="link" href="detailed_semantics.html" title="Detailed semantics">Detailed + semantics</a> +</h4></div></div></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<p> + <a name="reference_bad_optional_access_constructor"></a><code class="computeroutput"><span class="identifier">bad_optional_access</span><span class="special">();</span></code> + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Constructs an object of class + <code class="computeroutput"><span class="identifier">bad_optional_access</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="identifier">what</span><span class="special">()</span></code> returns an implementation-defined + NTBS. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../header__boost_optional_bad_optional_access_hpp_.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../header__boost_optional_bad_optional_access_hpp_.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../io_header.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/reference/header__boost_optional_hpp_.html b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_hpp_.html new file mode 100644 index 000000000..19ed6cf5a --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_hpp_.html @@ -0,0 +1,47 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Header <boost/optional.hpp></title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../../optional/reference.html" title="Reference"> +<link rel="prev" href="header__boost_optional_optional_hpp_/detailed_semantics.html" title="Detailed Semantics"> +<link rel="next" href="../dependencies_and_portability.html" title="Dependencies and Portability"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="header__boost_optional_optional_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_optional.reference.header__boost_optional_hpp_"></a><a class="link" href="header__boost_optional_hpp_.html" title="Header <boost/optional.hpp>">Header + <boost/optional.hpp></a> +</h3></div></div></div> +<p> + This is an alias for header <a class="link" href="../../optional/reference/header__boost_optional_optional_hpp_.html#boost_optional.reference.header__boost_optional_optional_hpp_.header_optional_optional" title="Synopsis"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">optional</span><span class="special">/</span><span class="identifier">optional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="header__boost_optional_optional_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../dependencies_and_portability.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html new file mode 100644 index 000000000..d87a47382 --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html @@ -0,0 +1,66 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Header <boost/optional/optional_fwd.hpp></title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../../optional/reference.html" title="Reference"> +<link rel="prev" href="io_header/io_semantics.html" title="Detailed semantics"> +<link rel="next" href="../../optional/reference/header__boost_optional_optional_hpp_.html" title="Header <boost/optional/optional.hpp>"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="io_header/io_semantics.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../optional/reference/header__boost_optional_optional_hpp_.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_optional.reference.header__boost_optional_optional_fwd_hpp_"></a><a class="link" href="header__boost_optional_optional_fwd_hpp_.html" title="Header <boost/optional/optional_fwd.hpp>">Header + <boost/optional/optional_fwd.hpp></a> +</h3></div></div></div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.header__boost_optional_optional_fwd_hpp_.synopsis"></a><a class="link" href="header__boost_optional_optional_fwd_hpp_.html#boost_optional.reference.header__boost_optional_optional_fwd_hpp_.synopsis" title="Synopsis">Synopsis</a> +</h4></div></div></div> +<p> +</p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">class</span> <span class="identifier">optional</span> <span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">swap</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">optional_swap_should_use_default_constructor</span> <span class="special">;</span> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<p> + </p> +<p> + This header only contains declarations. + </p> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="io_header/io_semantics.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../optional/reference/header__boost_optional_optional_hpp_.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html new file mode 100644 index 000000000..a54a5834a --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html @@ -0,0 +1,2387 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Detailed Semantics</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Boost.Optional"> +<link rel="up" href="../../../optional/reference/header__boost_optional_optional_hpp_.html" title="Header <boost/optional/optional.hpp>"> +<link rel="prev" href="../../../optional/reference/header__boost_optional_optional_hpp_.html" title="Header <boost/optional/optional.hpp>"> +<link rel="next" href="../header__boost_optional_hpp_.html" title="Header <boost/optional.hpp>"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../../../optional/reference/header__boost_optional_optional_hpp_.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../../optional/reference/header__boost_optional_optional_hpp_.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../header__boost_optional_hpp_.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics"></a><a class="link" href="detailed_semantics.html" title="Detailed Semantics">Detailed + Semantics</a> +</h4></div></div></div> +<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: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + 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 class="listitem"> + 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 class="listitem"> + 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="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</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> +<h6> +<a name="boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics.h0"></a> + <span class="phrase"><a name="boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics.optional_class_member_functions"></a></span><a class="link" href="detailed_semantics.html#boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics.optional_class_member_functions">optional + class member functions</a> + </h6> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">optional</span><span class="special">()</span> + <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Default-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">uninitialized</span>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> T's default constructor <span class="underline">is not</span> called. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">def</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_none_t"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">none_t</span> <span class="special">)</span> + <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Constructs an <code class="computeroutput"><span class="identifier">optional</span></code> uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">uninitialized</span>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code>'s + default constructor <span class="underline">is not</span> called. + The expression <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">none</span></code> + denotes an instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">none_t</span></code> + that can be used as the parameter. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">none</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">n</span><span class="special">(</span><span class="identifier">none</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">n</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_copy_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Directly-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> + and its value is a <span class="emphasis"><em>copy</em></span> of <code class="computeroutput"><span class="identifier">v</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span></code> throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span></code> is called. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">);</span></code> in that case, this constructor + has no effect. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">T</span><span class="special">&</span> + <span class="identifier">ref</span> <span class="special">)</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Directly-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> + and its value is an instance of an internal type wrapping the reference + <code class="computeroutput"><span class="identifier">ref</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">T</span><span class="special">&</span> <span class="identifier">vref</span> <span class="special">=</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">vref</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +<span class="special">++</span> <span class="identifier">v</span> <span class="special">;</span> <span class="comment">// mutate referee</span> +<span class="identifier">assert</span> <span class="special">(*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span><span class="special">);</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_move_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> + <span class="special">)</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Directly-Move-Constructs an + <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> + and its value is move-constructed from <code class="computeroutput"><span class="identifier">v</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> + is called. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">);</span></code> + in that case, the state of <code class="computeroutput"><span class="identifier">v</span></code> + is determined by exception safety guarantees for <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span><span class="special">&&)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v1</span><span class="special">,</span> <span class="identifier">v2</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">v1</span><span class="special">));</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v2</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">T</span><span class="special">&&</span> + <span class="identifier">ref</span> <span class="special">)</span> + <span class="special">=</span> <span class="keyword">delete</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> This constructor is deleted + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_bool_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="special">::</span><span class="identifier">optional</span><span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> + <span class="identifier">T</span><span class="special">&</span> + <span class="identifier">v</span> <span class="special">)</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + If condition is true, same as: + </li></ul></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="special">::</span><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + otherwise, same as: + </li></ul></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">()</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="special">::</span><span class="identifier">optional</span><span class="special">()</span></code> + </p></blockquote></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">rhs</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_copy_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Copy-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If rhs is initialized, + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and its value is a <span class="emphasis"><em>copy</em></span> of the + value of <code class="computeroutput"><span class="identifier">rhs</span></code>; else + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span></code> throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If rhs is initialized, <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span></code> + is called. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">);</span></code> in that case, this constructor + has no effect. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">uninit</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">uninit</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init</span><span class="special">(</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">init</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">init</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> + <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Copy-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and its value is another reference to the same object + referenced by <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; + else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, both <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> will refer to the same object + (they alias). + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">uninit</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">uninit</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> + +<span class="identifier">T</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">ref</span> <span class="special">=</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init</span><span class="special">(</span><span class="identifier">ref</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">init</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">v</span> <span class="special">=</span> <span class="number">3</span> <span class="special">;</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init2</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_move_constructor_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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><span class="identifier">optional</span><span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span></code><span class="emphasis"><em>see below</em></span><code class="computeroutput"><span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">is_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Move-constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and its value is move constructed from <code class="computeroutput"><span class="identifier">rhs</span></code>; else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Remarks:</strong></span> The expression inside <code class="computeroutput"><span class="keyword">noexcept</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_nothrow_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span> <span class="special">&&</span> + <span class="special">)</span></code> is called. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">);</span></code> + in that case, <code class="computeroutput"><span class="identifier">rhs</span></code> remains + initialized and the value of <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> is determined by exception safety + of <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span><span class="special">&&)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">uninit</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">uninit</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">init</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">uniqye_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="keyword">new</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">init</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">init</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="keyword">nullptr</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">init2</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">optional</span> <span class="special">&&</span> + <span class="identifier">rhs</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Move-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and its value is another reference to the same object + referenced by <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; + else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, both <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> will refer to the same object + (they alias). + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">uninit</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(!</span><span class="identifier">uninit</span><span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">uinit2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">uninit</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">uninit2</span> <span class="special">==</span> <span class="identifier">uninit</span> <span class="special">);</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">v</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">init</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&></span> <span class="identifier">init2</span> <span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">init</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">init2</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> + +<span class="special">*</span><span class="identifier">v</span> <span class="special">=</span> <span class="number">3</span> <span class="special">;</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">**</span><span class="identifier">init2</span> <span class="special">==</span> <span class="number">3</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Copy-Constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and its value is a <span class="emphasis"><em>copy</em></span> of the + value of rhs converted to type <code class="computeroutput"><span class="identifier">T</span></code>; + else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span></code> throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span></code> is called if <code class="computeroutput"><span class="identifier">rhs</span></code> is initialized, which requires + a valid conversion from <code class="computeroutput"><span class="identifier">U</span></code> + to <code class="computeroutput"><span class="identifier">T</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">);</span></code> in that case, this constructor + has no effect. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">x</span><span class="special">(</span><span class="number">123.4</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">==</span> <span class="number">123.4</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">y</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span><span class="special">(</span> <span class="special">*</span><span class="identifier">y</span> <span class="special">==</span> <span class="number">123</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_move_constructor_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> + <span class="identifier">rhs</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Move-constructs an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="identifier">rhs</span></code> + is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and its value is move-constructed from <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; + else <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">)</span></code> + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes: </strong></span> <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">)</span></code> + is called if <code class="computeroutput"><span class="identifier">rhs</span></code> is + initialized, which requires a valid conversion from <code class="computeroutput"><span class="identifier">U</span></code> + to <code class="computeroutput"><span class="identifier">T</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> <span class="special">);</span></code> + in that case, <code class="computeroutput"><span class="identifier">rhs</span></code> remains + initialized and the value of <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> is determined by exception safety + guarantee of <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span> <span class="identifier">U</span><span class="special">&&</span> + <span class="special">)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">x</span><span class="special">(</span><span class="number">123.4</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">==</span> <span class="number">123.4</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">y</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">))</span> <span class="special">;</span> +<span class="identifier">assert</span><span class="special">(</span> <span class="special">*</span><span class="identifier">y</span> <span class="special">==</span> <span class="number">123</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_constructor_factory"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">InPlaceFactory</span><span class="special">></span> + <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">TypedInPlaceFactory</span><span class="special">></span> + <span class="keyword">explicit</span> <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><span class="identifier">optional</span><span class="special">(</span> + <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Constructs an <code class="computeroutput"><span class="identifier">optional</span></code> with a value of <code class="computeroutput"><span class="identifier">T</span></code> obtained from the factory. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> + and its value is <span class="emphasis"><em>directly given</em></span> from the factory + <code class="computeroutput"><span class="identifier">f</span></code> (i.e., the value + <span class="underline">is not copied</span>). + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever the <code class="computeroutput"><span class="identifier">T</span></code> constructor called by the factory + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> See <a class="link" href="../../tutorial/in_place_factories.html" title="In-Place Factories">In-Place + Factories</a> + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during the call to the <code class="computeroutput"><span class="identifier">T</span></code> + constructor used by the factory; in that case, this constructor has + no effect. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">C</span> <span class="special">{</span> <span class="identifier">C</span> <span class="special">(</span> <span class="keyword">char</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">)</span> <span class="special">;</span> <span class="special">}</span> <span class="special">;</span> + +<span class="identifier">C</span> <span class="identifier">v</span><span class="special">(</span><span class="char">'A'</span><span class="special">,</span><span class="number">123.4</span><span class="special">,</span><span class="string">"hello"</span><span class="special">);</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">C</span><span class="special">></span> <span class="identifier">x</span><span class="special">(</span> <span class="identifier">in_place</span> <span class="special">(</span><span class="char">'A'</span><span class="special">,</span> <span class="number">123.4</span><span class="special">,</span> <span class="string">"hello"</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// InPlaceFactory used</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">C</span><span class="special">></span> <span class="identifier">y</span><span class="special">(</span> <span class="identifier">in_place</span><span class="special"><</span><span class="identifier">C</span><span class="special">>(</span><span class="char">'A'</span><span class="special">,</span> <span class="number">123.4</span><span class="special">,</span> <span class="string">"hello"</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// TypedInPlaceFactory used</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">y</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_equal_none_t"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">none_t</span> + <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized destroys its contained + value. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_equal_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">rhs</span> <span class="special">)</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Assigns the value <code class="computeroutput"><span class="identifier">rhs</span></code> to an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and its value is + a <span class="emphasis"><em>copy</em></span> of <code class="computeroutput"><span class="identifier">rhs</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&)</span></code> + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s assignment operator is used, + otherwise, its copy-constructor is used. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> In the event of + an exception, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is unchanged and its value unspecified + as far as <code class="computeroutput"><span class="identifier">optional</span></code> + is concerned (it is up to <code class="computeroutput"><span class="identifier">T</span></code>'s + <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>). + If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initially uninitialized and <code class="computeroutput"><span class="identifier">T</span></code>'s + <span class="emphasis"><em>copy constructor</em></span> fails, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is left properly uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">x</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span> + +<span class="identifier">T</span> <span class="identifier">y</span><span class="special">;</span> +<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">y</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">y</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> (Re)binds the wrapped reference. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and it references + the same object referenced by <code class="computeroutput"><span class="identifier">rhs</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized, it is <span class="emphasis"><em>rebound</em></span> + to the new object. See <a class="link" href="../../tutorial/rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding semantics for assignment of optional references">here</a> + for details on this behavior. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span> +<span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> +<span class="identifier">T</span><span class="special">&</span> <span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span> +<span class="identifier">T</span><span class="special">&</span> <span class="identifier">rb</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">ra</span><span class="special">)</span> <span class="special">;</span> + +<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">rb</span> <span class="special">;</span> <span class="comment">// binds 'def' to 'b' through 'rb'</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">)</span> <span class="special">;</span> +<span class="special">*</span><span class="identifier">def</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span> <span class="comment">// changes the value of 'b' to a copy of the value of 'a'</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">b</span> <span class="special">==</span> <span class="identifier">a</span> <span class="special">)</span> <span class="special">;</span> +<span class="keyword">int</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> +<span class="keyword">int</span><span class="special">&</span> <span class="identifier">rc</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">;</span> +<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">rc</span> <span class="special">;</span> <span class="comment">// REBINDS to 'c' through 'rc'</span> +<span class="identifier">c</span> <span class="special">=</span> <span class="number">4</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="number">4</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_move_equal_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Moves the value <code class="computeroutput"><span class="identifier">rhs</span></code> to an <code class="computeroutput"><span class="identifier">optional</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized and its value is + moved from <code class="computeroutput"><span class="identifier">rhs</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> + or <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&&)</span></code> + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized, <code class="computeroutput"><span class="identifier">T</span></code>'s move-assignment operator is used, + otherwise, its move-constructor is used. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> In the event of + an exception, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is unchanged and its value unspecified + as far as <code class="computeroutput"><span class="identifier">optional</span></code> + is concerned (it is up to <code class="computeroutput"><span class="identifier">T</span></code>'s + <code class="computeroutput"><span class="keyword">operator</span><span class="special">=()</span></code>). + If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initially uninitialized and <code class="computeroutput"><span class="identifier">T</span></code>'s + <span class="emphasis"><em>move constructor</em></span> fails, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is left properly uninitialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">x</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">;</span> + +<span class="identifier">T</span> <span class="identifier">y1</span><span class="special">,</span> <span class="identifier">y2</span><span class="special">,</span> <span class="identifier">yR</span><span class="special">;</span> +<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">y1</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">yR</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">y2</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">yR</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">=</span> + <span class="keyword">delete</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> This assignment operator is + deleted. + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_equal_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">rhs</span> <span class="special">)</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + is <a href="../../../../../../utility/CopyConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></a> and <code class="computeroutput"><span class="identifier">CopyAssignable</span></code>. + </li> +<li class="listitem"> +<p class="simpara"> + <span class="bold"><strong>Effects:</strong></span> + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + contains a value + </p> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + does not contain a value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> contains + a value + </p> + </td> +<td> + <p> + assigns <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> + to the contained value + </p> + </td> +<td> + <p> + initializes the contained value as if direct-initializing + an object of type <code class="computeroutput"><span class="identifier">T</span></code> + with <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> does + not contain a value + </p> + </td> +<td> + <p> + destroys the contained value by calling <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + no effect + </p> + </td> +</tr> +</tbody> +</table></div> +</li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>; + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> If any exception + is thrown, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">rhs</span></code> + remains unchanged. If an exception is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s copy constructor, no effect. + If an exception is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s + copy assignment, the state of its contained value is as defined by + the exception safety guarantee of <code class="computeroutput"><span class="identifier">T</span></code>'s + copy assignment. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> + +<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">def</span> <span class="special">)</span> <span class="special">;</span> +<span class="comment">// previous value (copy of 'v') destroyed from within 'opt'.</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> (Re)binds thee wrapped reference. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> is initialized, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is initialized and it references the same object referenced by <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>; + otherwise, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is uninitialized (and references no object). + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was initialized and so is <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code>, + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is <span class="emphasis"><em>rebound</em></span> to the new object. See <a class="link" href="../../tutorial/rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding semantics for assignment of optional references">here</a> + for details on this behavior. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span> <span class="special">;</span> +<span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> +<span class="identifier">T</span><span class="special">&</span> <span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">;</span> +<span class="identifier">T</span><span class="special">&</span> <span class="identifier">rb</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">ora</span><span class="special">(</span><span class="identifier">ra</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">orb</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span> <span class="special">;</span> + +<span class="identifier">def</span> <span class="special">=</span> <span class="identifier">orb</span> <span class="special">;</span> <span class="comment">// binds 'def' to 'b' through 'rb' wrapped within 'orb'</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">)</span> <span class="special">;</span> +<span class="special">*</span><span class="identifier">def</span> <span class="special">=</span> <span class="identifier">ora</span> <span class="special">;</span> <span class="comment">// changes the value of 'b' to a copy of the value of 'a'</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">b</span> <span class="special">==</span> <span class="identifier">a</span> <span class="special">)</span> <span class="special">;</span> +<span class="keyword">int</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> +<span class="keyword">int</span><span class="special">&</span> <span class="identifier">rc</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">&></span> <span class="identifier">orc</span><span class="special">(</span><span class="identifier">rc</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">ora</span> <span class="special">=</span> <span class="identifier">orc</span> <span class="special">;</span> <span class="comment">// REBINDS ora to 'c' through 'rc'</span> +<span class="identifier">c</span> <span class="special">=</span> <span class="number">4</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">ora</span> <span class="special">==</span> <span class="number">4</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_move_equal_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span></code><span class="emphasis"><em>see below</em></span><code class="computeroutput"><span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + is <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> + and <code class="computeroutput"><span class="identifier">MoveAssignable</span></code>. + </li> +<li class="listitem"> +<p class="simpara"> + <span class="bold"><strong>Effects:</strong></span> + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + contains a value + </p> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + does not contain a value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> contains + a value + </p> + </td> +<td> + <p> + assigns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code> to the contained value + </p> + </td> +<td> + <p> + initializes the contained value as if direct-initializing + an object of type <code class="computeroutput"><span class="identifier">T</span></code> + with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> does + not contain a value + </p> + </td> +<td> + <p> + destroys the contained value by calling <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + no effect + </p> + </td> +</tr> +</tbody> +</table></div> +</li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>; + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Remarks:</strong></span> The expression inside <code class="computeroutput"><span class="keyword">noexcept</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_nothrow_move_constructible</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span> <span class="special">&&</span> + <span class="identifier">is_nothrow_move_assignable</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> If any exception + is thrown, the initialization state of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">rhs</span></code> + remains unchanged. If an exception is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s move constructor, the state of + <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> + is determined by the exception safety guarantee of <code class="computeroutput"><span class="identifier">T</span></code>'s + move constructor. If an exception is thrown during the call to T's + move-assignment, the state of <code class="computeroutput"><span class="special">**</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> is determined by the exception + safety guarantee of T's move assignment. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> + +<span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">def</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>&&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Same as <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">rhs</span> <span class="special">)</span></code>. + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_equal_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> +<p class="simpara"> + <span class="bold"><strong>Effect:</strong></span> + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + contains a value + </p> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + does not contain a value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> contains + a value + </p> + </td> +<td> + <p> + assigns <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> + to the contained value + </p> + </td> +<td> + <p> + initializes the contained value as if direct-initializing + an object of type <code class="computeroutput"><span class="identifier">T</span></code> + with <code class="computeroutput"><span class="special">*</span><span class="identifier">rhs</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> does + not contain a value + </p> + </td> +<td> + <p> + destroys the contained value by calling <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + no effect + </p> + </td> +</tr> +</tbody> +</table></div> +</li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> If any exception + is thrown, the result of the expression <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> remains unchanged. If an exception + is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s + constructor, no effect. If an exception is thrown during the call to + <code class="computeroutput"><span class="identifier">T</span></code>'s assignment, the + state of its contained value is as defined by the exception safety + guarantee of <code class="computeroutput"><span class="identifier">T</span></code>'s copy + assignment. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt0</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">opt1</span><span class="special">;</span> + +<span class="identifier">opt1</span> <span class="special">=</span> <span class="identifier">opt0</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt1</span> <span class="special">==</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_move_equal_other_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> +<p class="simpara"> + <span class="bold"><strong>Effect:</strong></span> + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + contains a value + </p> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + does not contain a value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> contains + a value + </p> + </td> +<td> + <p> + assigns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code> to the contained value + </p> + </td> +<td> + <p> + initializes the contained value as if direct-initializing + an object of type <code class="computeroutput"><span class="identifier">T</span></code> + with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> does + not contain a value + </p> + </td> +<td> + <p> + destroys the contained value by calling <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + no effect + </p> + </td> +</tr> +</tbody> +</table></div> +</li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="keyword">bool</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> If any exception + is thrown, the result of the expression <code class="computeroutput"><span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span></code> remains unchanged. If an exception + is thrown during the call to <code class="computeroutput"><span class="identifier">T</span></code>'s + constructor, no effect. If an exception is thrown during the call to + <code class="computeroutput"><span class="identifier">T</span></code>'s assignment, the + state of its contained value is as defined by the exception safety + guarantee of <code class="computeroutput"><span class="identifier">T</span></code>'s copy + assignment. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt0</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">opt1</span><span class="special">;</span> + +<span class="identifier">opt1</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">opt0</span><span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt0</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt1</span> <span class="special">)</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt1</span> <span class="special">==</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_emplace"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> + <span class="keyword">void</span> <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><span class="identifier">emplace</span><span class="special">(</span> + <span class="identifier">Args</span><span class="special">...&&</span> + <span class="identifier">args</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> The compiler supports rvalue + references and variadic templates. + </li> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized calls <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">=</span> <span class="identifier">none</span></code>. + Then initializes in-place the contained value as if direct-initializing + an object of type <code class="computeroutput"><span class="identifier">T</span></code> + with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">Args</span><span class="special">>(</span><span class="identifier">args</span><span class="special">)...</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever the selected <code class="computeroutput"><span class="identifier">T</span></code>'s constructor throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + need not be <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> + or <code class="computeroutput"><span class="identifier">MoveAssignable</span></code>. + On compilers that do not support variadic templates, the signature + falls back to single-argument: <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> + <span class="identifier">Arg</span><span class="special">></span> + <span class="keyword">void</span> <span class="identifier">emplace</span><span class="special">(</span><span class="identifier">Arg</span><span class="special">&&</span> <span class="identifier">arg</span><span class="special">)</span></code>. On compilers that do not support + rvalue references, the signature falls back to two overloads: taking + <code class="computeroutput"><span class="keyword">const</span></code> and non-<code class="computeroutput"><span class="keyword">const</span></code> lvalue reference. + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> If an exception + is thrown during the initialization of <code class="computeroutput"><span class="identifier">T</span></code>, + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is <span class="emphasis"><em>uninitialized</em></span>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">;</span> +<span class="identifier">opt</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> <span class="comment">// create in-place using ctor T(int)</span> +<span class="identifier">opt</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">();</span> <span class="comment">// destroy previous and default-construct another T</span> +<span class="identifier">opt</span><span class="special">.</span><span class="identifier">emplace</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> <span class="comment">// destroy and copy-construct in-place (no assignment called)</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_equal_factory"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">InPlaceFactory</span><span class="special">></span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> + <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><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">InPlaceFactory</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">f</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="identifier">TypedInPlaceFactory</span><span class="special">></span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> + <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><span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">TypedInPlaceFactory</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">f</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Assigns an <code class="computeroutput"><span class="identifier">optional</span></code> + with a value of <code class="computeroutput"><span class="identifier">T</span></code> obtained + from the factory. + </li> +<li class="listitem"> + <span class="bold"><strong>Postconditions: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is <span class="underline">initialized</span> + and its value is <span class="emphasis"><em>directly given</em></span> from the factory + <code class="computeroutput"><span class="identifier">f</span></code> (i.e., the value + <span class="underline">is not copied</span>). + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Whatever the <code class="computeroutput"><span class="identifier">T</span></code> constructor called by the factory + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> See <a class="link" href="../../tutorial/in_place_factories.html" title="In-Place Factories">In-Place + Factories</a> + </li> +<li class="listitem"> + <span class="bold"><strong>Exception Safety:</strong></span> Exceptions can only + be thrown during the call to the <code class="computeroutput"><span class="identifier">T</span></code> + constructor used by the factory; in that case, the <code class="computeroutput"><span class="identifier">optional</span></code> + object will be reset to be <span class="emphasis"><em>uninitialized</em></span>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_reset_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">void</span> <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><span class="identifier">reset</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Deprecated:</strong></span> same as <code class="computeroutput"><span class="keyword">operator</span><span class="special">=</span> + <span class="special">(</span> <span class="identifier">T</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">v</span><span class="special">)</span> + <span class="special">;</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_reset"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">reset</span><span class="special">()</span> <span class="keyword">noexcept</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Deprecated:</strong></span> Same as <code class="computeroutput"><span class="keyword">operator</span><span class="special">=(</span> + <span class="identifier">none_t</span> <span class="special">);</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_get"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <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><span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> + <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><span class="identifier">get</span><span class="special">()</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">get</span> <span class="special">(</span> + <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> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> + <span class="special">(</span> <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> + <span class="special">&)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> A reference to the contained + value + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The requirement is asserted + via <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">get</span><span class="special">()</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">get</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> + <span class="keyword">const</span><span class="special">&</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> + <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="special">&)</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <span class="underline">The</span> + reference contained. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The requirement is asserted + via <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_asterisk"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <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><span class="keyword">operator</span><span class="special">*()</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> + <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><span class="keyword">operator</span><span class="special">*()</span> <span class="special">&;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> A reference to the contained + value + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The requirement is asserted + via <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. + On compilers that do not support ref-qualifiers on member functions + these two overloads are replaced with the classical two: a <code class="computeroutput"><span class="keyword">const</span></code> and non-<code class="computeroutput"><span class="keyword">const</span></code> + member functions. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">);</span> +<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">opt</span><span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">u</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">T</span> <span class="identifier">w</span> <span class="special">;</span> +<span class="special">*</span><span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">w</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">w</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_asterisk_move"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&&</span> + <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><span class="keyword">operator</span><span class="special">*()</span> <span class="special">&&;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> contains a value. + </li> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">val</span><span class="special">);</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The requirement is asserted + via <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. + On compilers that do not support ref-qualifiers on member functions + this overload is not present. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="special">&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">*()</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="special">&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">*()</span> + <span class="special">&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="special">&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="keyword">operator</span><span class="special">*()</span> + <span class="special">&&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <span class="underline">The</span> + reference contained. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The requirement is asserted + via <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. + On compilers that do not support ref-qualifiers on member functions + these three overloads are replaced with the classical two: a <code class="computeroutput"><span class="keyword">const</span></code> and non-<code class="computeroutput"><span class="keyword">const</span></code> + member functions. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">T</span><span class="special">&</span> <span class="identifier">vref</span> <span class="special">=</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">vref</span> <span class="special">);</span> +<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">vref2</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">opt</span><span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">vref2</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +<span class="special">++</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">opt</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">()</span> <span class="special">&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">return</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="special">?</span> <span class="special">*</span><span class="identifier">val</span> <span class="special">:</span> <span class="keyword">throw</span> <span class="identifier">bad_optional_access</span><span class="special">();</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + ref-qualifiers on member functions these two overloads are replaced + with the classical two: a <code class="computeroutput"><span class="keyword">const</span></code> + and non-<code class="computeroutput"><span class="keyword">const</span></code> member functions. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o0</span><span class="special">,</span> <span class="identifier">o1</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span><span class="special">.</span><span class="identifier">value</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">);</span> + +<span class="keyword">try</span> <span class="special">{</span> + <span class="identifier">o0</span><span class="special">.</span><span class="identifier">value</span><span class="special">();</span> <span class="comment">// throws</span> + <span class="identifier">assert</span> <span class="special">(</span> <span class="keyword">false</span> <span class="special">);</span> +<span class="special">}</span> +<span class="keyword">catch</span><span class="special">(</span><span class="identifier">bad_optional_access</span><span class="special">&)</span> <span class="special">{</span> + <span class="identifier">assert</span> <span class="special">(</span> <span class="keyword">true</span> <span class="special">);</span> +<span class="special">}</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_value_move"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&&</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">()</span> <span class="special">&&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">return</span> <span class="keyword">bool</span><span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="special">?</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">val</span><span class="special">)</span> <span class="special">:</span> <span class="keyword">throw</span> <span class="identifier">bad_optional_access</span><span class="special">();</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + ref-qualifiers on member functions this overload is not present. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_value_or"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or</span><span class="special">(</span><span class="identifier">U</span> <span class="special">&&</span> + <span class="identifier">v</span><span class="special">)</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">if</span> <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="special">**</span><span class="keyword">this</span><span class="special">;</span> <span class="keyword">else</span> <span class="keyword">return</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">);</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Remarks:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code> + is not <a href="../../../../../../utility/CopyConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></a> or <code class="computeroutput"><span class="identifier">U</span> <span class="special">&&</span></code> + is not convertible to <code class="computeroutput"><span class="identifier">T</span></code>, + the program is ill-formed. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + ref-qualifiers on member functions this overload is replaced with the + <code class="computeroutput"><span class="keyword">const</span></code>-qualified member + function. On compilers without rvalue reference support the type of + <code class="computeroutput"><span class="identifier">v</span></code> becomes <code class="computeroutput"><span class="identifier">U</span> <span class="keyword">const</span><span class="special">&</span></code>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_value_or_move"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or</span><span class="special">(</span><span class="identifier">U</span> <span class="special">&&</span> + <span class="identifier">v</span><span class="special">)</span> + <span class="special">&&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">if</span> <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(**</span><span class="keyword">this</span><span class="special">);</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">U</span><span class="special">>(</span><span class="identifier">v</span><span class="special">);</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Remarks:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code> + is not <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> + or <code class="computeroutput"><span class="identifier">U</span> <span class="special">&&</span></code> + is not convertible to <code class="computeroutput"><span class="identifier">T</span></code>, + the program is ill-formed. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + ref-qualifiers on member functions this overload is not present. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_value_or_call"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + is <a href="../../../../../../utility/CopyConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">CopyConstructible</span></code></a> and <code class="computeroutput"><span class="identifier">F</span></code> models a <a href="http://www.sgi.com/tech/stl/Generator.html" target="_top"><code class="computeroutput"><span class="identifier">Generator</span></code></a> whose result type + is convertible to <code class="computeroutput"><span class="identifier">T</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> <code class="computeroutput"><span class="keyword">if</span> + <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="special">**</span><span class="keyword">this</span><span class="special">;</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + ref-qualifiers on member functions this overload is replaced with the + <code class="computeroutput"><span class="keyword">const</span></code>-qualified member + function. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">complain_and_0</span><span class="special">()</span> +<span class="special">{</span> + <span class="identifier">clog</span> <span class="special"><<</span> <span class="string">"no value returned, using default"</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">o1</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">oN</span> <span class="special">=</span> <span class="identifier">none</span><span class="special">;</span> + +<span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">o1</span><span class="special">.</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">complain_and_0</span><span class="special">);</span> <span class="comment">// fun not called</span> +<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">1</span><span class="special">);</span> + +<span class="keyword">int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="identifier">oN</span><span class="special">.</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">complain_and_0</span><span class="special">);</span> <span class="comment">// fun called</span> +<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">0</span><span class="special">);</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_value_or_call_move"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value_or_eval</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">&&</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + is <code class="computeroutput"><span class="identifier">MoveConstructible</span></code> + and <code class="computeroutput"><span class="identifier">F</span></code> models a <a href="http://www.sgi.com/tech/stl/Generator.html" target="_top"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + whose result type is convertible to <code class="computeroutput"><span class="identifier">T</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effects:</strong></span> <code class="computeroutput"><span class="keyword">if</span> + <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(**</span><span class="keyword">this</span><span class="special">);</span> <span class="keyword">else</span> <span class="keyword">return</span> + <span class="identifier">f</span><span class="special">();</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + ref-qualifiers on member functions this overload is not present. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_get_value_or_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <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><span class="identifier">get_value_or</span><span class="special">(</span> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> + <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><span class="identifier">get_value_or</span><span class="special">(</span> <span class="identifier">T</span><span class="special">&</span> <span class="keyword">default</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> + <span class="keyword">const</span><span class="special">&</span> + <span class="identifier">get_optional_value_or</span> <span class="special">(</span> + <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> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get_optional_value_or</span> + <span class="special">(</span> <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> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">T</span><span class="special">&</span> + <span class="keyword">default</span> <span class="special">)</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Deprecated:</strong></span> Use <code class="computeroutput"><span class="identifier">value_or</span><span class="special">()</span></code> instead. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> A reference to the contained + value, if any, or <code class="computeroutput"><span class="keyword">default</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span><span class="special">;</span> +<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">def</span><span class="special">.</span><span class="identifier">get_value_or</span><span class="special">(</span><span class="identifier">z</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">y</span> <span class="special">==</span> <span class="identifier">z</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">);</span> +<span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">u</span> <span class="special">=</span> <span class="identifier">get_optional_value_or</span><span class="special">(</span><span class="identifier">opt</span><span class="special">,</span><span class="identifier">z</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">u</span> <span class="special">==</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">u</span> <span class="special">!=</span> <span class="identifier">z</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_get_ptr"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <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><span class="identifier">get_ptr</span><span class="special">()</span> + <span class="keyword">const</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span> + <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><span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span> + <span class="keyword">const</span><span class="special">*</span> + <span class="identifier">get_pointer</span> <span class="special">(</span> + <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> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_pointer</span> + <span class="special">(</span> <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> + <span class="special">&)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized, a pointer to the + contained value; else <code class="computeroutput"><span class="number">0</span></code> + (<span class="emphasis"><em>null</em></span>). + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The contained value is permanently + stored within <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, + so you should not hold nor delete this pointer + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span> <span class="identifier">copt</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">opt</span><span class="special">.</span><span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span> +<span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">cp</span> <span class="special">=</span> <span class="identifier">copt</span><span class="special">.</span><span class="identifier">get_ptr</span><span class="special">();</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">p</span> <span class="special">==</span> <span class="identifier">get_pointer</span><span class="special">(</span><span class="identifier">opt</span><span class="special">)</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">cp</span> <span class="special">==</span> <span class="identifier">get_pointer</span><span class="special">(</span><span class="identifier">copt</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_arrow"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <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><span class="keyword">operator</span> <span class="special">->()</span> + <span class="keyword">const</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span> + <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><span class="keyword">operator</span> + <span class="special">->()</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is initialized. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> A pointer to the contained + value. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> Nothing. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> The requirement is asserted + via <code class="computeroutput"><span class="identifier">BOOST_ASSERT</span><span class="special">()</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">X</span> <span class="special">{</span> <span class="keyword">int</span> <span class="identifier">mdata</span> <span class="special">;</span> <span class="special">}</span> <span class="special">;</span> +<span class="identifier">X</span> <span class="identifier">x</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">X</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span><span class="identifier">x</span><span class="special">);</span> +<span class="identifier">opt</span><span class="special">-></span><span class="identifier">mdata</span> <span class="special">=</span> <span class="number">2</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_bool"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">explicit</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="keyword">operator</span> + <span class="keyword">bool</span><span class="special">()</span> + <span class="keyword">const</span> <span class="keyword">noexcept</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">!=</span> <span class="number">0</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> On compilers that do not support + explicit conversion operators this falls back to safe-bool idiom. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">def</span> <span class="special">==</span> <span class="number">0</span> <span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">(</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt</span> <span class="special">!=</span> <span class="number">0</span> <span class="special">);</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_operator_not"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">noexcept</span> + <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is uninitialized, <code class="computeroutput"><span class="keyword">true</span></code>; else <code class="computeroutput"><span class="keyword">false</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> This operator is provided for + those compilers which can't use the <span class="emphasis"><em>unspecified-bool-type + operator</em></span> in certain boolean contexts. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">opt</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">opt</span> <span class="special">);</span> +<span class="special">*</span><span class="identifier">opt</span> <span class="special">=</span> <span class="identifier">some_T</span> <span class="special">;</span> + +<span class="comment">// Notice the "double-bang" idiom here.</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!!</span><span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_optional_is_initialized"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_initialized</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Deprecated:</strong></span> Same as <code class="computeroutput"><span class="keyword">explicit</span> <span class="keyword">operator</span> + <span class="keyword">bool</span> <span class="special">()</span> + <span class="special">;</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<h6> +<a name="boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics.h1"></a> + <span class="phrase"><a name="boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics.free_functions"></a></span><a class="link" href="detailed_semantics.html#boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics.free_functions">Free + functions</a> + </h6> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_make_optional_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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> <span class="identifier">make_optional</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">v</span><span class="special">)</span></code> for the <span class="emphasis"><em>deduced</em></span> + type <code class="computeroutput"><span class="identifier">T</span></code> of <code class="computeroutput"><span class="identifier">v</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">foo</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> + +<span class="identifier">foo</span> <span class="special">(</span> <span class="identifier">make_optional</span><span class="special">(</span><span class="number">1</span><span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> <span class="comment">// Creates an optional<int></span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_make_optional_bool_value"></a><div class="blockquote"><blockquote class="blockquote"><p> + <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> <span class="identifier">make_optional</span><span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">condition</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code> for the <span class="emphasis"><em>deduced</em></span> + type <code class="computeroutput"><span class="identifier">T</span></code> of <code class="computeroutput"><span class="identifier">v</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">calculate_foo</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">double</span> <span class="identifier">val</span> <span class="special">=</span> <span class="identifier">compute_foo</span><span class="special">();</span> + <span class="keyword">return</span> <span class="identifier">make_optional</span><span class="special">(</span><span class="identifier">is_not_nan_and_finite</span><span class="special">(</span><span class="identifier">val</span><span class="special">),</span><span class="identifier">val</span><span class="special">);</span> +<span class="special">}</span> + +<span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">calculate_foo</span><span class="special">();</span> +<span class="keyword">if</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">v</span> <span class="special">)</span> + <span class="identifier">error</span><span class="special">(</span><span class="string">"foo wasn't computed"</span><span class="special">);</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">==</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + shall meet requirements of <a href="http://www.sgi.com/tech/stl/EqualityComparable.html" target="_top"><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></a>. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> If both <code class="computeroutput"><span class="identifier">x</span></code> + and <code class="computeroutput"><span class="identifier">y</span></code> are initialized, + <code class="computeroutput"><span class="special">(*</span><span class="identifier">x</span> + <span class="special">==</span> <span class="special">*</span><span class="identifier">y</span><span class="special">)</span></code>. + If only <code class="computeroutput"><span class="identifier">x</span></code> or <code class="computeroutput"><span class="identifier">y</span></code> is initialized, <code class="computeroutput"><span class="keyword">false</span></code>. + If both are uninitialized, <code class="computeroutput"><span class="keyword">true</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> This definition guarantees + that <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + not containing a value is compared unequal to any <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> containing any value, and equal + to any other <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> not containing a value. Pointers + have shallow relational operators while <code class="computeroutput"><span class="identifier">optional</span></code> + has deep relational operators. Do not use <code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code> directly in generic code which expect + to be given either an <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> or a pointer; use <a href="../../../../../../utility/OptionalPointee.html#equal" target="_top"><code class="computeroutput"><span class="identifier">equal_pointees</span><span class="special">()</span></code></a> + instead + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">oN</span><span class="special">,</span> <span class="identifier">oN_</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o1</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">1</span><span class="special">)),</span> <span class="identifier">o1_</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">1</span><span class="special">));</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o2</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">2</span><span class="special">));</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">==</span> <span class="identifier">oN</span> <span class="special">);</span> <span class="comment">// Identity implies equality</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">o1</span> <span class="special">);</span> <span class="comment">//</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">==</span> <span class="identifier">oN_</span> <span class="special">);</span> <span class="comment">// Both uninitialized compare equal</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">!=</span> <span class="identifier">o1</span> <span class="special">);</span> <span class="comment">// Initialized unequal to initialized.</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">o1_</span> <span class="special">);</span> <span class="comment">// Both initialized compare as (*lhs == *rhs)</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">!=</span> <span class="identifier">o2</span> <span class="special">);</span> <span class="comment">//</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_less_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special"><</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> Expression <code class="computeroutput"><span class="special">*</span><span class="identifier">x</span> <span class="special"><</span> <span class="special">*</span><span class="identifier">y</span></code> shall be well-formed and its result + shall be convertible to <code class="computeroutput"><span class="keyword">bool</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">(!</span><span class="identifier">y</span><span class="special">)</span> <span class="special">?</span> <span class="keyword">false</span> <span class="special">:</span> <span class="special">(!</span><span class="identifier">x</span><span class="special">)</span> <span class="special">?</span> <span class="keyword">true</span> <span class="special">:</span> <span class="special">*</span><span class="identifier">x</span> <span class="special"><</span> + <span class="special">*</span><span class="identifier">y</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> This definition guarantees + that <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + not containing a value is ordered as less than any <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> containing any value, and equivalent + to any other <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> not containing a value. Pointers + have shallow relational operators while <code class="computeroutput"><span class="identifier">optional</span></code> + has deep relational operators. Do not use <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> directly in generic code which + expect to be given either an <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> or a pointer; use <a href="../../../../../../utility/OptionalPointee.html#less" target="_top"><code class="computeroutput"><span class="identifier">less_pointees</span><span class="special">()</span></code></a> + instead. <code class="computeroutput"><span class="identifier">T</span></code> need not + be <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a>. Only + single <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> + is required. Other relational operations are defined in terms of this + one. If <code class="computeroutput"><span class="identifier">T</span></code>'s <code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code> + satisfies the axioms of <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a> (transitivity, + antisymmetry and irreflexivity), <code class="computeroutput"><span class="identifier">optinal</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> is <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a>. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">oN</span><span class="special">,</span> <span class="identifier">oN_</span><span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o0</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">0</span><span class="special">));</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">o1</span><span class="special">(</span><span class="identifier">T</span><span class="special">(</span><span class="number">1</span><span class="special">));</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN</span> <span class="special"><</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// Identity implies equivalence</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o1</span> <span class="special"><</span> <span class="identifier">o1</span><span class="special">)</span> <span class="special">);</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN</span> <span class="special"><</span> <span class="identifier">oN_</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// Two uninitialized are equivalent</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN_</span> <span class="special"><</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special"><</span> <span class="identifier">o0</span> <span class="special">);</span> <span class="comment">// Uninitialized is less than initialized</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o0</span> <span class="special"><</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> + +<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special"><</span> <span class="identifier">o2</span> <span class="special">)</span> <span class="special">;</span> <span class="comment">// Two initialized compare as (*lhs < *rhs)</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o2</span> <span class="special"><</span> <span class="identifier">o1</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o2</span> <span class="special"><</span> <span class="identifier">o2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span> +</pre> + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_not_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">!=</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> + <span class="identifier">x</span> <span class="special">==</span> + <span class="identifier">y</span> <span class="special">);</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_greater_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">></span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">(</span> + <span class="identifier">y</span> <span class="special"><</span> + <span class="identifier">x</span> <span class="special">);</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_less_or_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special"><=</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> + <span class="identifier">y</span> <span class="special"><</span> + <span class="identifier">x</span> <span class="special">);</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_greater_or_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">>=</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">);</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> + <span class="identifier">x</span> <span class="special"><</span> + <span class="identifier">y</span> <span class="special">);</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_equal_optional_none"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">==</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> + <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">==</span> <span class="special">(</span> + <span class="identifier">none_t</span><span class="special">,</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">!</span><span class="identifier">x</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + need not meet requirements of <a href="http://www.sgi.com/tech/stl/EqualityComparable.html" target="_top"><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></a>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_operator_compare_not_equal_optional_none"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">!=</span> <span class="special">(</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> + <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span> + <span class="special">!=</span> <span class="special">(</span> + <span class="identifier">none_t</span><span class="special">,</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span> + <span class="identifier">x</span> <span class="special">==</span> + <span class="identifier">y</span> <span class="special">);</span></code> + </li></ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> + </p> +<a name="reference_swap_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p> + <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span> + <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">y</span> + <span class="special">)</span> <span class="special">;</span></code> + </p></blockquote></div> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> Lvalues of type <code class="computeroutput"><span class="identifier">T</span></code> shall be swappable and <code class="computeroutput"><span class="identifier">T</span></code> shall be <code class="computeroutput"><span class="identifier">MoveConstructible</span></code>. + </li> +<li class="listitem"> +<p class="simpara"> + <span class="bold"><strong>Effects:</strong></span> + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + contains a value + </p> + </th> +<th> + <p> + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + does not contain a value + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> contains + a value + </p> + </td> +<td> + <p> + calls <code class="computeroutput"><span class="identifier">swap</span><span class="special">(*(*</span><span class="keyword">this</span><span class="special">),</span> <span class="special">*</span><span class="identifier">rhs</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + initializes the contained value of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> as if direct-initializing + an object of type <code class="computeroutput"><span class="identifier">T</span></code> + with the expression <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*</span><span class="identifier">rhs</span><span class="special">)</span></code>, followed by <code class="computeroutput"><span class="identifier">rhs</span><span class="special">.</span><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>, + <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + contains a value and <code class="computeroutput"><span class="identifier">rhs</span></code> + does not contain a value + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rhs</span></code> does + not contain a value + </p> + </td> +<td> + <p> + initializes the contained value of <code class="computeroutput"><span class="identifier">rhs</span></code> + as if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> with the expression + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(*(*</span><span class="keyword">this</span><span class="special">))</span></code>, + followed by <code class="computeroutput"><span class="identifier">val</span><span class="special">-></span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> does not contain a value + and <code class="computeroutput"><span class="identifier">rhs</span></code> contains + a value + </p> + </td> +<td> + <p> + no effect + </p> + </td> +</tr> +</tbody> +</table></div> +</li> +<li class="listitem"> + <span class="bold"><strong>Postconditions:</strong></span> The states of <code class="computeroutput"><span class="identifier">x</span></code> and <code class="computeroutput"><span class="identifier">y</span></code> + interchanged. + </li> +<li class="listitem"> + <span class="bold"><strong>Throws:</strong></span> If both are initialized, whatever + <code class="computeroutput"><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&,</span><span class="identifier">T</span><span class="special">&)</span></code> + throws. If only one is initialized, whatever <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="special">)</span></code> + throws. + </li> +<li class="listitem"> + <span class="bold"><strong>Example:</strong></span> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">x</span><span class="special">(</span><span class="number">12</span><span class="special">);</span> +<span class="identifier">T</span> <span class="identifier">y</span><span class="special">(</span><span class="number">21</span><span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def0</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">def1</span> <span class="special">;</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">optX</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> +<span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">optY</span><span class="special">(</span><span class="identifier">y</span><span class="special">);</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">def0</span><span class="special">,</span><span class="identifier">def1</span><span class="special">);</span> <span class="comment">// no-op</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">def0</span><span class="special">,</span><span class="identifier">optX</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">def0</span> <span class="special">==</span> <span class="identifier">x</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">optX</span> <span class="special">);</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">def0</span><span class="special">,</span><span class="identifier">optX</span><span class="special">);</span> <span class="comment">// Get back to original values</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">optX</span><span class="special">,</span><span class="identifier">optY</span><span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">optX</span> <span class="special">==</span> <span class="identifier">y</span> <span class="special">);</span> +<span class="identifier">assert</span> <span class="special">(</span> <span class="special">*</span><span class="identifier">optY</span> <span class="special">==</span> <span class="identifier">x</span> <span class="special">);</span> +</pre> + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../../../optional/reference/header__boost_optional_optional_hpp_.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../../optional/reference/header__boost_optional_optional_hpp_.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../header__boost_optional_hpp_.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/reference/io_header.html b/libs/optional/doc/html/boost_optional/reference/io_header.html new file mode 100644 index 000000000..c61e5c6c8 --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/io_header.html @@ -0,0 +1,72 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Header <boost/optional/optional_io.hpp></title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../../optional/reference.html" title="Reference"> +<link rel="prev" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html" title="Detailed semantics"> +<link rel="next" href="io_header/io_semantics.html" title="Detailed semantics"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="io_header/io_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_optional.reference.io_header"></a><a class="link" href="io_header.html" title="Header <boost/optional/optional_io.hpp>">Header <boost/optional/optional_io.hpp></a> +</h3></div></div></div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.io_header.io_synop"></a><a class="link" href="io_header.html#boost_optional.reference.io_header.io_synop" title="Synopsis">Synopsis</a> +</h4></div></div></div> +<p> +</p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">istream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">ostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">optional</span><span class="special">/</span><span class="identifier">optional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">CharType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">CharTrait</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> + <span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span><span class="special">);</span> <a class="link" href="io_header/io_semantics.html#reference_operator_ostream"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">CharType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">CharTrait</span><span class="special">></span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> + <span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="keyword">const</span><span class="special">&);</span> <a class="link" href="io_header/io_semantics.html#reference_operator_ostream_none"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">CharType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">CharTrait</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> + <span class="keyword">operator</span><span class="special">>>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> <span class="identifier">in</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">);</span> <a class="link" href="io_header/io_semantics.html#reference_operator_istream"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + +<span class="special">}</span> <span class="comment">// namespace boost</span> +</pre> +<p> + </p> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="header__boost_optional_bad_optional_access_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="io_header/io_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/reference/io_header/io_semantics.html b/libs/optional/doc/html/boost_optional/reference/io_header/io_semantics.html new file mode 100644 index 000000000..c368ac728 --- /dev/null +++ b/libs/optional/doc/html/boost_optional/reference/io_header/io_semantics.html @@ -0,0 +1,112 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Detailed semantics</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Boost.Optional"> +<link rel="up" href="../io_header.html" title="Header <boost/optional/optional_io.hpp>"> +<link rel="prev" href="../io_header.html" title="Header <boost/optional/optional_io.hpp>"> +<link rel="next" href="../header__boost_optional_optional_fwd_hpp_.html" title="Header <boost/optional/optional_fwd.hpp>"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../io_header.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../io_header.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../header__boost_optional_optional_fwd_hpp_.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.io_header.io_semantics"></a><a class="link" href="io_semantics.html" title="Detailed semantics">Detailed + semantics</a> +</h4></div></div></div> +<p> + <a name="reference_operator_ostream"></a><code class="computeroutput"><span class="keyword">template</span> + <span class="special"><</span><span class="keyword">class</span> + <span class="identifier">CharType</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">CharTrait</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span></code> + <br>     <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span></code> <br>     <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> + <span class="identifier">out</span><span class="special">,</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span><span class="special">);</span></code> + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Outputs an implementation-defined + string. The output contains the information about whether the optional + object contains a value or not. If <code class="computeroutput"><span class="identifier">v</span></code> + contains a value, the output contains result of calling <code class="computeroutput"><span class="identifier">out</span> <span class="special"><<</span> + <span class="special">*</span><span class="identifier">v</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">out</span></code>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> <a name="reference_operator_ostream_none"></a> + </p> +<p> + <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">CharType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">CharTrait</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span></code> <br>     <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span></code> + <br>     <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">none_t</span><span class="special">);</span></code> + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Outputs an implementation-defined + string. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">out</span></code>. + </li> +</ul></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span> <a name="reference_operator_istream"></a> + </p> +<p> + <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">CharType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">CharTrait</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span></code> <br>     <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span></code> + <br>     <code class="computeroutput"><span class="keyword">operator</span><span class="special">>>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special"><</span><span class="identifier">CharType</span><span class="special">,</span> <span class="identifier">CharTrait</span><span class="special">>&</span> <span class="identifier">in</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">);</span></code> + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code> + is <a href="http://www.sgi.com/tech/stl/DefaultConstructible.html" target="_top"><code class="computeroutput"><span class="identifier">DefaultConstructible</span></code></a> and + <code class="computeroutput"><span class="identifier">MoveConstructible</span></code>. + </li> +<li class="listitem"> + <span class="bold"><strong>Effect:</strong></span> Reads the value of optional + object from <code class="computeroutput"><span class="identifier">in</span></code>. If + the string representation indicates that the optional object should + contain a value, <code class="computeroutput"><span class="identifier">v</span></code> + contains a value and its contained value is obtained as if by default-constructing + an object <code class="computeroutput"><span class="identifier">o</span></code> of type + <code class="computeroutput"><span class="identifier">T</span></code> and then calling + <code class="computeroutput"><span class="identifier">in</span> <span class="special">>></span> + <span class="identifier">o</span></code>; otherwise <code class="computeroutput"><span class="identifier">v</span></code> does not contain a value, and the + previously contained value (if any) has been destroyed. + </li> +<li class="listitem"> + <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">out</span></code>. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../io_header.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../io_header.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../header__boost_optional_optional_fwd_hpp_.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/relnotes.html b/libs/optional/doc/html/boost_optional/relnotes.html new file mode 100644 index 000000000..3fb495b3a --- /dev/null +++ b/libs/optional/doc/html/boost_optional/relnotes.html @@ -0,0 +1,144 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Release Notes</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Boost.Optional"> +<link rel="up" href="../index.html" title="Boost.Optional"> +<link rel="prev" href="dependencies_and_portability/optional_reference_binding.html" title="Optional Reference Binding"> +<link rel="next" href="acknowledgements.html" title="Acknowledgements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_optional.relnotes"></a><a class="link" href="relnotes.html" title="Release Notes">Release Notes</a> +</h2></div></div></div> +<h4> +<a name="boost_optional.relnotes.h0"></a> + <span class="phrase"><a name="boost_optional.relnotes.boost_release_1_58"></a></span><a class="link" href="relnotes.html#boost_optional.relnotes.boost_release_1_58">Boost + Release 1.58</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">none_t</span></code> is no longer convertible from + literal <code class="computeroutput"><span class="number">0</span></code>. This avoids a bug + where <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">rational</span><span class="special"><</span><span class="keyword">int</span><span class="special">>></span> <span class="identifier">oi</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span></code> would + initialize an optional object with no contained value. + </li> +<li class="listitem"> + Improved the trick that prevents streaming out <code class="computeroutput"><span class="identifier">optional</span></code> + without header <code class="computeroutput"><span class="identifier">optional_io</span><span class="special">.</span><span class="identifier">hpp</span></code> + by using safe-bool idiom. This addresses <a href="https://svn.boost.org/trac/boost/ticket/10825" target="_top">Trac + #10825</a> + </li> +<li class="listitem"> + IOStream operators are now mentioned in documentation. + </li> +<li class="listitem"> + Added a way to manually disable move semantics: just define macro <code class="computeroutput"><span class="identifier">BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES</span></code>. + This can be used to work around <a href="https://svn.boost.org/trac/boost/ticket/10399" target="_top">Trac + #10399</a> + </li> +<li class="listitem"> + It is no longer possible to assign <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span></code> to <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> when <code class="computeroutput"><span class="identifier">U</span></code> + is not assignable or convertible to <code class="computeroutput"><span class="identifier">T</span></code> + (<a href="https://svn.boost.org/trac/boost/ticket/11087" target="_top">Trac #11087</a>). + </li> +<li class="listitem"> + Value accessors now work correctly on rvalues of <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&></span></code> (<a href="https://svn.boost.org/trac/boost/ticket/10839" target="_top">Trac + #10839</a>). + </li> +</ul></div> +<h4> +<a name="boost_optional.relnotes.h1"></a> + <span class="phrase"><a name="boost_optional.relnotes.boost_release_1_57"></a></span><a class="link" href="relnotes.html#boost_optional.relnotes.boost_release_1_57">Boost + Release 1.57</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + <a href="https://github.com/boostorg/optional/pull/9" target="_top">Git pull #9</a>: + <span class="emphasis"><em>"Supply <code class="computeroutput"><span class="special"><</span><span class="identifier">string</span><span class="special">></span></code> + to fix C++03 compile error on <code class="computeroutput"><span class="identifier">logic_error</span><span class="special">(</span><span class="string">"..."</span><span class="special">)</span></code>"</em></span>. + </li></ul></div> +<h4> +<a name="boost_optional.relnotes.h2"></a> + <span class="phrase"><a name="boost_optional.relnotes.boost_release_1_56"></a></span><a class="link" href="relnotes.html#boost_optional.relnotes.boost_release_1_56">Boost + Release 1.56</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Added support for rvalue references. Now <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> works with moveable but non-copyable + <code class="computeroutput"><span class="identifier">T</span></code>'s, + </li> +<li class="listitem"> + Improved <code class="computeroutput"><span class="identifier">swap</span></code> (now uses + move operations), + </li> +<li class="listitem"> + Added function <code class="computeroutput"><span class="identifier">emplace</span><span class="special">()</span></code>. This is the last of the requests from + <a href="https://svn.boost.org/trac/boost/ticket/1841" target="_top">Trac #1841</a>, + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">optional</span></code> is moveable, including + conditional <code class="computeroutput"><span class="keyword">noexcept</span></code> specifications, + which make it <code class="computeroutput"><span class="identifier">move_if_noexcept</span></code>-friendly, + </li> +<li class="listitem"> + Using explicit operator bool() on platforms that support it (<a href="https://svn.boost.org/trac/boost/ticket/4227" target="_top">Trac + #4227</a>) (breaking change), + </li> +<li class="listitem"> + Forward declaration of <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">ostream</span><span class="special">&,</span> <span class="identifier">optional</span> + <span class="keyword">const</span><span class="special">&)</span></code> + to prevent inadvertent incorrect serialization of optional objects, + </li> +<li class="listitem"> + Removed deprecated function <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code> from examples (<a href="https://svn.boost.org/trac/boost/ticket/9005" target="_top">Trac + #9005</a>), + </li> +<li class="listitem"> + Equality comparison with <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">none</span></code> + does not require that <code class="computeroutput"><span class="identifier">T</span></code> + be EqualityComparable, + </li> +<li class="listitem"> + Optional rvalue references are explicitly disallowed, + </li> +<li class="listitem"> + Binding temporaries to optional references is explicitly disallowed (breaking + change), + </li> +<li class="listitem"> + More ways to access the contained value, functions <code class="computeroutput"><span class="identifier">value</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">value_or</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">value_or_eval</span><span class="special">()</span></code>, + </li> +<li class="listitem"> + Updated and reorganized documentation, added tutorial and quick guide sections. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="dependencies_and_portability/optional_reference_binding.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/tutorial/a_note_about_optional_bool_.html b/libs/optional/doc/html/boost_optional/tutorial/a_note_about_optional_bool_.html index ea3618b87..def5bbfd2 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/a_note_about_optional_bool_.html +++ b/libs/optional/doc/html/boost_optional/tutorial/a_note_about_optional_bool_.html @@ -94,7 +94,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/design_overview.html b/libs/optional/doc/html/boost_optional/tutorial/design_overview.html index d6598bca6..cc5e3b467 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/design_overview.html +++ b/libs/optional/doc/html/boost_optional/tutorial/design_overview.html @@ -170,7 +170,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_interface.html b/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_interface.html index 984ae4bf1..c3833ffb8 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_interface.html +++ b/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_interface.html @@ -63,8 +63,8 @@ </p> <h6> <a name="boost_optional.tutorial.design_overview.the_interface.h0"></a> - <span class="phrase"><a name="boost_optional.tutorial.design_overview.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_untitialized_optional_objects__the_operators___and___gt_"></a></span><a class="link" href="the_interface.html#boost_optional.tutorial.design_overview.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: + <span class="phrase"><a name="boost_optional.tutorial.design_overview.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_uninitialized_optional_objects__the_operators___and___gt_"></a></span><a class="link" href="the_interface.html#boost_optional.tutorial.design_overview.the_interface.lexically_hinted_value_access_in_the_presence_of_possibly_uninitialized_optional_objects__the_operators___and___gt_">Lexically-hinted + Value Access in the presence of possibly uninitialized optional objects: The operators * and -></a> </h6> <p> @@ -173,7 +173,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_semantics.html b/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_semantics.html index 5dbc63b32..9a38fefe8 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_semantics.html +++ b/libs/optional/doc/html/boost_optional/tutorial/design_overview/the_semantics.html @@ -107,7 +107,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/exception_safety_guarantees.html b/libs/optional/doc/html/boost_optional/tutorial/exception_safety_guarantees.html index ea3fa8f5e..dfa34c85c 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/exception_safety_guarantees.html +++ b/libs/optional/doc/html/boost_optional/tutorial/exception_safety_guarantees.html @@ -161,7 +161,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/in_place_factories.html b/libs/optional/doc/html/boost_optional/tutorial/in_place_factories.html index d6907b9e3..4cfef3256 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/in_place_factories.html +++ b/libs/optional/doc/html/boost_optional/tutorial/in_place_factories.html @@ -183,7 +183,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/io_operators.html b/libs/optional/doc/html/boost_optional/tutorial/io_operators.html new file mode 100644 index 000000000..8443a4922 --- /dev/null +++ b/libs/optional/doc/html/boost_optional/tutorial/io_operators.html @@ -0,0 +1,87 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>IO operators</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../../optional/tutorial.html" title="Tutorial"> +<link rel="prev" href="relational_operators.html" title="Relational operators"> +<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%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="relational_operators.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_optional.tutorial.io_operators"></a><a class="link" href="io_operators.html" title="IO operators">IO operators</a> +</h3></div></div></div> +<p> + It is possible to use <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + with IO streams, provided that <code class="computeroutput"><span class="identifier">T</span></code> + can be used with streams. IOStream operators are defined in a separate header. + </p> +<p> +</p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">optional</span><span class="special">/</span><span class="identifier">optional_io</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">o1</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">oN</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">none</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">o1</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cin</span> <span class="special">>></span> <span class="identifier">oN</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + </p> +<p> + The current implementation does not guarantee any particular output. What + it guarantees is that if streaming out and then back in <code class="computeroutput"><span class="identifier">T</span></code> + gives the same value, then streaming out and then back in <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + will also give back the same result: + </p> +<p> +</p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cassert</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">sstream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">optional</span><span class="special">/</span><span class="identifier">optional_io</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">o1</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">oN</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">none</span><span class="special">;</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">x1</span><span class="special">,</span> <span class="identifier">x2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">s</span> <span class="special"><<</span> <span class="identifier">o1</span> <span class="special"><<</span> <span class="identifier">oN</span><span class="special">;</span> + <span class="identifier">s</span> <span class="special">>></span> <span class="identifier">x1</span> <span class="special">>></span> <span class="identifier">x2</span><span class="special">;</span> + <span class="identifier">assert</span> <span class="special">(</span><span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">x1</span><span class="special">);</span> + <span class="identifier">assert</span> <span class="special">(</span><span class="identifier">oN</span> <span class="special">==</span> <span class="identifier">x2</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="relational_operators.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/tutorial/optional_references.html b/libs/optional/doc/html/boost_optional/tutorial/optional_references.html index 4e067c2d9..13209411f 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/optional_references.html +++ b/libs/optional/doc/html/boost_optional/tutorial/optional_references.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> <link rel="home" href="../../index.html" title="Boost.Optional"> <link rel="up" href="../../optional/tutorial.html" title="Tutorial"> -<link rel="prev" href="relational_operators.html" title="Relational operators"> +<link rel="prev" href="io_operators.html" title="IO operators"> <link rel="next" href="rebinding_semantics_for_assignment_of_optional_references.html" title="Rebinding semantics for assignment of optional references"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -20,7 +20,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="relational_operators.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="io_operators.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> @@ -101,7 +101,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -109,7 +109,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="relational_operators.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="io_operators.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rebinding_semantics_for_assignment_of_optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/tutorial/performance_considerations.html b/libs/optional/doc/html/boost_optional/tutorial/performance_considerations.html new file mode 100644 index 000000000..2e2d4ca72 --- /dev/null +++ b/libs/optional/doc/html/boost_optional/tutorial/performance_considerations.html @@ -0,0 +1,223 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Performance considerations</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../../optional/tutorial.html" title="Tutorial"> +<link rel="prev" href="type_requirements.html" title="Type requirements"> +<link rel="next" href="../../optional/reference.html" title="Reference"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<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"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="type_requirements.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_optional.tutorial.performance_considerations"></a><a class="link" href="performance_considerations.html" title="Performance considerations">Performance + considerations</a> +</h3></div></div></div> +<p> + Technical details aside, the memory layout of <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + is more-less this: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">optional</span> +<span class="special">{</span> + <span class="keyword">bool</span> <span class="identifier">_initialized</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">aligned_storage_t</span><span class="special"><</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">t</span><span class="special">),</span> <span class="keyword">alignof</span><span class="special">(</span><span class="identifier">T</span><span class="special">)></span> <span class="identifier">_storage</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + But for the purpose of this analysis, considering memory layouts, we can + think of it as: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">optional</span> +<span class="special">{</span> + <span class="keyword">bool</span> <span class="identifier">_initialized</span><span class="special">;</span> + <span class="identifier">T</span> <span class="identifier">_storage</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + Given type <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span></code>, and + assuming that <code class="computeroutput"><span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="special">==</span> + <span class="number">4</span></code>, we will get <code class="computeroutput"><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">>)</span> + <span class="special">==</span> <span class="number">8</span></code>. + This is so because of the alignment rules, for our two members we get the + following alignment: + </p> +<p> + <span class="inlinemediaobject"><img src="../../images/opt_align1.png" alt="opt_align1"></span> + </p> +<p> + This means you can fit twice as many <code class="computeroutput"><span class="keyword">int</span></code>s + as <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span></code>s into + the same space of memory. Therefore, if the size of the objects is critical + for your application (e.g., because you want to utilize your CPU cache in + order to gain performance) and you have determined you are willing to trade + the code clarity, it is recommended that you simply go with type <code class="computeroutput"><span class="keyword">int</span></code> and use some 'magic value' to represent + <span class="emphasis"><em>not-an-int</em></span>. + </p> +<p> + Even if you cannot spare any value of <code class="computeroutput"><span class="keyword">int</span></code> + to represent <span class="emphasis"><em>not-an-int</em></span> (e.g., because every value is + useful, or you do want to signal <span class="emphasis"><em>not-an-int</em></span> explicitly), + at least for <code class="computeroutput"><span class="identifier">Trivial</span></code> types + you should consider storing the value and the <code class="computeroutput"><span class="keyword">bool</span></code> + flag representing the <span class="emphasis"><em>null-state</em></span> separately. Consider + the following class: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">Record</span> +<span class="special">{</span> + <span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">_min</span><span class="special">;</span> + <span class="identifier">optional</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">_max</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + Its memory layout can be depicted as follows: + </p> +<p> + <span class="inlinemediaobject"><img src="../../images/opt_align2.png" alt="opt_align2"></span> + </p> +<p> + This is exactly the same as if we had the following members: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">Record</span> +<span class="special">{</span> + <span class="keyword">bool</span> <span class="identifier">_has_min</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">_min</span><span class="special">;</span> + <span class="keyword">bool</span> <span class="identifier">_has_max</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">_max</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + But when they are stored separately, we at least have an option to reorder + them like this: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">Record</span> +<span class="special">{</span> + <span class="keyword">bool</span> <span class="identifier">_has_min</span><span class="special">;</span> + <span class="keyword">bool</span> <span class="identifier">_has_max</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">_min</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">_max</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + Which gives us the following layout (and smaller total size): + </p> +<p> + <span class="inlinemediaobject"><img src="../../images/opt_align3.png" alt="opt_align3"></span> + </p> +<p> + Sometimes it requires detailed consideration what data we make optional. + In our case above, if we determine that both minimum and maximum value can + be provided or not provided together, but one is never provided without the + other, we can make only one optional memebr: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">Limits</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">_min</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">_max</span><span class="special">;</span> +<span class="special">};</span> + +<span class="keyword">struct</span> <span class="identifier">Record</span> +<span class="special">{</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">Limits</span><span class="special">></span> <span class="identifier">_limits</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + This would give us the following layout: + </p> +<p> + <span class="inlinemediaobject"><img src="../../images/opt_align4.png" alt="opt_align4"></span> + </p> +<h5> +<a name="boost_optional.tutorial.performance_considerations.h0"></a> + <span class="phrase"><a name="boost_optional.tutorial.performance_considerations.optional_function_parameters"></a></span><a class="link" href="performance_considerations.html#boost_optional.tutorial.performance_considerations.optional_function_parameters">Optional + function parameters</a> + </h5> +<p> + Having function parameters of type <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span></code> + may incur certain unexpected run-time cost connected to copy construction + of <code class="computeroutput"><span class="identifier">T</span></code>. Consider the following + code. + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">fun</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">Big</span><span class="special">>&</span> <span class="identifier">v</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="identifier">doSomethingWith</span><span class="special">(*</span><span class="identifier">v</span><span class="special">);</span> + <span class="keyword">else</span> <span class="identifier">doSomethingElse</span><span class="special">();</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">Big</span><span class="special">></span> <span class="identifier">ov</span><span class="special">;</span> + <span class="identifier">Big</span> <span class="identifier">v</span><span class="special">;</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">none</span><span class="special">);</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">ov</span><span class="special">);</span> <span class="comment">// no copy</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> <span class="comment">// copy constructor of Big</span> +<span class="special">}</span> +</pre> +<p> + No copy elision or move semantics can save us from copying type <code class="computeroutput"><span class="identifier">Big</span></code> here. Not that we need any copy, but + this is how <code class="computeroutput"><span class="identifier">optional</span></code> works. + In order to avoid copying in this case, one could provide second overload + of <code class="computeroutput"><span class="identifier">fun</span></code>: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">fun</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Big</span><span class="special">&</span> <span class="identifier">v</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">doSomethingWith</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">Big</span><span class="special">></span> <span class="identifier">ov</span><span class="special">;</span> + <span class="identifier">Big</span> <span class="identifier">v</span><span class="special">;</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">ov</span><span class="special">);</span> <span class="comment">// no copy</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> <span class="comment">// no copy: second overload selected</span> +<span class="special">}</span> +</pre> +<p> + Alternatively, you could consider using an optional reference instead: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">fun</span><span class="special">(</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Big</span><span class="special">&></span> <span class="identifier">v</span><span class="special">)</span> <span class="comment">// note where the reference is</span> +<span class="special">{</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="identifier">doSomethingWith</span><span class="special">(*</span><span class="identifier">v</span><span class="special">);</span> + <span class="keyword">else</span> <span class="identifier">doSomethingElse</span><span class="special">();</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="identifier">optional</span><span class="special"><</span><span class="identifier">Big</span><span class="special">></span> <span class="identifier">ov</span><span class="special">;</span> + <span class="identifier">Big</span> <span class="identifier">v</span><span class="special">;</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">none</span><span class="special">);</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">ov</span><span class="special">);</span> <span class="comment">// doesn't compile</span> + <span class="identifier">fun</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span> <span class="comment">// no copy</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="type_requirements.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/optional/doc/html/boost_optional/tutorial/rebinding_semantics_for_assignment_of_optional_references.html b/libs/optional/doc/html/boost_optional/tutorial/rebinding_semantics_for_assignment_of_optional_references.html index 26bbf6600..a4c566ffc 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/rebinding_semantics_for_assignment_of_optional_references.html +++ b/libs/optional/doc/html/boost_optional/tutorial/rebinding_semantics_for_assignment_of_optional_references.html @@ -135,7 +135,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/boost_optional/tutorial/relational_operators.html b/libs/optional/doc/html/boost_optional/tutorial/relational_operators.html index bc97e7b72..31914272a 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/relational_operators.html +++ b/libs/optional/doc/html/boost_optional/tutorial/relational_operators.html @@ -7,7 +7,7 @@ <link rel="home" href="../../index.html" title="Boost.Optional"> <link rel="up" href="../../optional/tutorial.html" title="Tutorial"> <link rel="prev" href="when_to_use_optional.html" title="When to use Optional"> -<link rel="next" href="optional_references.html" title="Optional references"> +<link rel="next" href="io_operators.html" title="IO operators"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> @@ -20,7 +20,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="when_to_use_optional.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="when_to_use_optional.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="io_operators.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> @@ -30,7 +30,7 @@ <p> Type <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> is <a href="http://www.sgi.com/tech/stl/EqualityComparable.html" target="_top"><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></a> whenever <code class="computeroutput"><span class="identifier">T</span></code> is <a href="http://www.sgi.com/tech/stl/EqualityComparable.html" target="_top"><code class="computeroutput"><span class="identifier">EqualityComparable</span></code></a>. Two optional - objects containing a value compare in the same as their contained values. + objects containing a value compare in the same way as their contained values. The uninitialized state of <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> is treated as a distinct value, equal to itself, and unequal to any value of type <code class="computeroutput"><span class="identifier">T</span></code>: @@ -99,7 +99,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -107,7 +107,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="when_to_use_optional.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="optional_references.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="when_to_use_optional.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="io_operators.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/tutorial/type_requirements.html b/libs/optional/doc/html/boost_optional/tutorial/type_requirements.html index 38a106d16..12cc30a59 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/type_requirements.html +++ b/libs/optional/doc/html/boost_optional/tutorial/type_requirements.html @@ -7,7 +7,7 @@ <link rel="home" href="../../index.html" title="Boost.Optional"> <link rel="up" href="../../optional/tutorial.html" title="Tutorial"> <link rel="prev" href="exception_safety_guarantees.html" title="Exception Safety Guarantees"> -<link rel="next" href="../../optional/reference.html" title="Reference"> +<link rel="next" href="performance_considerations.html" title="Performance considerations"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> @@ -20,7 +20,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="performance_considerations.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> @@ -95,7 +95,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -103,7 +103,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="exception_safety_guarantees.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="performance_considerations.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/tutorial/when_to_use_optional.html b/libs/optional/doc/html/boost_optional/tutorial/when_to_use_optional.html index 58834461d..fd27d8026 100644 --- a/libs/optional/doc/html/boost_optional/tutorial/when_to_use_optional.html +++ b/libs/optional/doc/html/boost_optional/tutorial/when_to_use_optional.html @@ -128,7 +128,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> diff --git a/libs/optional/doc/html/images/opt_align1.png b/libs/optional/doc/html/images/opt_align1.png Binary files differnew file mode 100644 index 000000000..50e0205ea --- /dev/null +++ b/libs/optional/doc/html/images/opt_align1.png diff --git a/libs/optional/doc/html/images/opt_align2.png b/libs/optional/doc/html/images/opt_align2.png Binary files differnew file mode 100644 index 000000000..fd7c079c9 --- /dev/null +++ b/libs/optional/doc/html/images/opt_align2.png diff --git a/libs/optional/doc/html/images/opt_align3.png b/libs/optional/doc/html/images/opt_align3.png Binary files differnew file mode 100644 index 000000000..7ca6ec800 --- /dev/null +++ b/libs/optional/doc/html/images/opt_align3.png diff --git a/libs/optional/doc/html/images/opt_align4.png b/libs/optional/doc/html/images/opt_align4.png Binary files differnew file mode 100644 index 000000000..c7f9b7242 --- /dev/null +++ b/libs/optional/doc/html/images/opt_align4.png diff --git a/libs/optional/doc/html/index.html b/libs/optional/doc/html/index.html index 3e4f671a4..891941d8c 100644 --- a/libs/optional/doc/html/index.html +++ b/libs/optional/doc/html/index.html @@ -26,7 +26,7 @@ <span class="firstname">Fernando Luis</span> <span class="surname">Cacciola Carballal</span> </h3></div></div> <div><p class="copyright">Copyright © 2003-2007 Fernando Luis Cacciola Carballal</p></div> -<div><p class="copyright">Copyright © 2014 Andrzej Krzemieński</p></div> +<div><p class="copyright">Copyright © 2014, 2015 Andrzej Krzemieński</p></div> <div><div class="legalnotice"> <a name="optional.legal"></a><p> Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -59,6 +59,7 @@ use Optional</a></span></dt> <dt><span class="section"><a href="boost_optional/tutorial/relational_operators.html">Relational operators</a></span></dt> +<dt><span class="section"><a href="boost_optional/tutorial/io_operators.html">IO operators</a></span></dt> <dt><span class="section"><a href="boost_optional/tutorial/optional_references.html">Optional references</a></span></dt> <dt><span class="section"><a href="boost_optional/tutorial/rebinding_semantics_for_assignment_of_optional_references.html">Rebinding @@ -70,12 +71,22 @@ <dt><span class="section"><a href="boost_optional/tutorial/exception_safety_guarantees.html">Exception Safety Guarantees</a></span></dt> <dt><span class="section"><a href="boost_optional/tutorial/type_requirements.html">Type requirements</a></span></dt> +<dt><span class="section"><a href="boost_optional/tutorial/performance_considerations.html">Performance + considerations</a></span></dt> </dl></dd> <dt><span class="section"><a href="optional/reference.html">Reference</a></span></dt> <dd><dl> -<dt><span class="section"><a href="optional/reference.html#boost_optional.reference.synopsis">Synopsis</a></span></dt> -<dt><span class="section"><a href="boost_optional/reference/detailed_semantics.html">Detailed - Semantics</a></span></dt> +<dt><span class="section"><a href="optional/reference.html#boost_optional.reference.header__boost_none_hpp_">Header + <boost/none.hpp></a></span></dt> +<dt><span class="section"><a href="boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html">Header + <boost/optional/bad_optional_access.hpp></a></span></dt> +<dt><span class="section"><a href="boost_optional/reference/io_header.html">Header <boost/optional/optional_io.hpp></a></span></dt> +<dt><span class="section"><a href="boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html">Header + <boost/optional/optional_fwd.hpp></a></span></dt> +<dt><span class="section"><a href="optional/reference/header__boost_optional_optional_hpp_.html">Header + <boost/optional/optional.hpp></a></span></dt> +<dt><span class="section"><a href="boost_optional/reference/header__boost_optional_hpp_.html">Header + <boost/optional.hpp></a></span></dt> </dl></dd> <dt><span class="section"><a href="boost_optional/dependencies_and_portability.html">Dependencies and Portability</a></span></dt> @@ -84,6 +95,7 @@ <dt><span class="section"><a href="boost_optional/dependencies_and_portability/optional_reference_binding.html">Optional Reference Binding</a></span></dt> </dl></dd> +<dt><span class="section"><a href="boost_optional/relnotes.html">Release Notes</a></span></dt> <dt><span class="section"><a href="boost_optional/acknowledgements.html">Acknowledgements</a></span></dt> </dl> </div> @@ -108,8 +120,9 @@ It is possible that this parameter is not specified; such situation is no error. It is valid to not specify the parameter and in that case the program is supposed to behave slightly differently. Also, suppose that any possible value of type - <code class="computeroutput"><span class="keyword">int</span></code> is a valid value for <code class="computeroutput"><span class="string">"MaxValue"</span></code>, so we cannot jut use <code class="computeroutput"><span class="special">-</span><span class="number">1</span></code> to represent - the absence of the parameter in the config file. + <code class="computeroutput"><span class="keyword">int</span></code> is a valid value for <code class="computeroutput"><span class="string">"MaxValue"</span></code>, so we cannot just use + <code class="computeroutput"><span class="special">-</span><span class="number">1</span></code> + to represent the absence of the parameter in the config file. </p> <h4> <a name="optional.introduction.h1"></a> @@ -133,7 +146,7 @@ </div> </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> -<td align="left"><p><small>Last revised: September 12, 2014 at 09:54:26 GMT</small></p></td> +<td align="left"><p><small>Last revised: March 13, 2015 at 21:52:15 GMT</small></p></td> <td align="right"><div class="copyright-footer"></div></td> </tr></table> <hr> diff --git a/libs/optional/doc/html/optional/reference.html b/libs/optional/doc/html/optional/reference.html index 9c157dfa6..242e029d6 100644 --- a/libs/optional/doc/html/optional/reference.html +++ b/libs/optional/doc/html/optional/reference.html @@ -6,8 +6,8 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> <link rel="home" href="../index.html" title="Boost.Optional"> <link rel="up" href="../index.html" title="Boost.Optional"> -<link rel="prev" href="../boost_optional/tutorial/type_requirements.html" title="Type requirements"> -<link rel="next" href="../boost_optional/reference/detailed_semantics.html" title="Detailed Semantics"> +<link rel="prev" href="../boost_optional/tutorial/performance_considerations.html" title="Performance considerations"> +<link rel="next" href="../boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html" title="Header <boost/optional/bad_optional_access.hpp>"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> @@ -20,160 +20,58 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="../boost_optional/tutorial/type_requirements.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../boost_optional/reference/detailed_semantics.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="../boost_optional/tutorial/performance_considerations.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <a name="optional.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a> </h2></div></div></div> <div class="toc"><dl class="toc"> -<dt><span class="section"><a href="reference.html#boost_optional.reference.synopsis">Synopsis</a></span></dt> -<dt><span class="section"><a href="../boost_optional/reference/detailed_semantics.html">Detailed - Semantics</a></span></dt> +<dt><span class="section"><a href="reference.html#boost_optional.reference.header__boost_none_hpp_">Header + <boost/none.hpp></a></span></dt> +<dt><span class="section"><a href="../boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html">Header + <boost/optional/bad_optional_access.hpp></a></span></dt> +<dt><span class="section"><a href="../boost_optional/reference/io_header.html">Header <boost/optional/optional_io.hpp></a></span></dt> +<dt><span class="section"><a href="../boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html">Header + <boost/optional/optional_fwd.hpp></a></span></dt> +<dt><span class="section"><a href="reference/header__boost_optional_optional_hpp_.html">Header + <boost/optional/optional.hpp></a></span></dt> +<dt><span class="section"><a href="../boost_optional/reference/header__boost_optional_hpp_.html">Header + <boost/optional.hpp></a></span></dt> </dl></div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> -<a name="boost_optional.reference.synopsis"></a><a class="link" href="reference.html#boost_optional.reference.synopsis" title="Synopsis">Synopsis</a> +<a name="boost_optional.reference.header__boost_none_hpp_"></a><a class="link" href="reference.html#boost_optional.reference.header__boost_none_hpp_" title="Header <boost/none.hpp>">Header + <boost/none.hpp></a> </h3></div></div></div> -<pre class="programlisting"><code class="computeroutput"><span class="comment">// In Header: <</span></code><a href="../../../../../boost/optional/optional.hpp" target="_top">boost/optional/optional.hpp</a><span class="comment">></span> - -<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> -<span class="keyword">class</span> <span class="identifier">optional</span> -<span class="special">{</span> - <span class="keyword">public</span> <span class="special">:</span> - - <span class="comment">// (If T is of reference type, the parameters and results by reference are by value)</span> - - <span class="identifier">optional</span> <span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_none_t"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_move_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="comment">// [new in 1.34]</span> - <span class="identifier">optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_bool_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="emphasis"><em>see below</em></span><span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_move_constructor_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_other_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_move_constructor_other_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_equal_none_t"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_equal_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_move_equal_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_equal_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="emphasis"><em>see below</em></span><span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_move_equal_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_equal_other_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_move_equal_other_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">emplace</span> <span class="special">(</span> <span class="identifier">Args</span><span class="special">...&&</span> <span class="identifier">args</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_emplace"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_equal_factory"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_equal_factory"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">->()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">->()</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_asterisk_move"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">value</span><span class="special">()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value_move"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or</span><span class="special">(</span> <span class="identifier">U</span> <span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value_or"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or</span><span class="special">(</span> <span class="identifier">U</span> <span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value_or_move"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or_eval</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value_or_call"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or_eval</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_value_or_call_move"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="keyword">bool</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_bool"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_operator_not"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="comment">// deprecated methods</span> - - <span class="comment">// (deprecated)</span> - <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_reset"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="comment">// (deprecated)</span> - <span class="keyword">void</span> <span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_reset_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="comment">// (deprecated)</span> - <span class="keyword">bool</span> <span class="identifier">is_initialized</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_is_initialized"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - - <span class="comment">// (deprecated)</span> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_value_or</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> -<span class="special">};</span> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_not_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_less_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_greater_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_less_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_greater_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_equal_optional_none"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_operator_compare_not_equal_optional_none"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_make_optional_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_make_optional_bool_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_optional_value_or</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> - -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.header__boost_none_hpp_.synopsis"></a><a class="link" href="reference.html#boost_optional.reference.header__boost_none_hpp_.synopsis" title="Synopsis">Synopsis</a> +</h4></div></div></div> +<p> +</p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">class</span> <span class="identifier">none_t</span> <span class="special">{};</span> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../boost_optional/reference/detailed_semantics.html#reference_swap_optional_optional"><span class="inlinemediaobject"><img src="../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">extern</span> <span class="keyword">const</span> <span class="identifier">none_t</span> <span class="identifier">none</span><span class="special">;</span> <span class="comment">// see below</span> <span class="special">}</span> <span class="comment">// namespace boost</span> </pre> +<p> + </p> +<p> + Variable <code class="computeroutput"><span class="identifier">none</span></code> has external + linkage, however it is not required to link with any library to obtain + its definition. Only by including this header file, the definition becomes + available, by means of using template instantiation. + </p> +</div> </div> </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -181,7 +79,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="../boost_optional/tutorial/type_requirements.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../boost_optional/reference/detailed_semantics.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="../boost_optional/tutorial/performance_considerations.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../boost_optional/reference/header__boost_optional_bad_optional_access_hpp_.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/boost_optional/reference/synopsis.html b/libs/optional/doc/html/optional/reference/header__boost_optional_optional_hpp_.html index 99adcfddd..c5f3e55d5 100644 --- a/libs/optional/doc/html/boost_optional/reference/synopsis.html +++ b/libs/optional/doc/html/optional/reference/header__boost_optional_optional_hpp_.html @@ -1,13 +1,13 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> -<title>Synopsis</title> +<title>Header <boost/optional/optional.hpp></title> <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> -<link rel="home" href="../../index.html" title="Chapter 1. Boost.Optional"> -<link rel="up" href="../../optional/reference.html" title="Reference"> -<link rel="prev" href="../../optional/reference.html" title="Reference"> -<link rel="next" href="detailed_semantics.html" title="Detailed Semantics"> +<link rel="home" href="../../index.html" title="Boost.Optional"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="../../boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html" title="Header <boost/optional/optional_fwd.hpp>"> +<link rel="next" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html" title="Detailed Semantics"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> @@ -20,147 +20,158 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="../../boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> -<a name="boost_optional.reference.synopsis"></a><a class="link" href="synopsis.html" title="Synopsis">Synopsis</a> +<a name="optional.reference.header__boost_optional_optional_hpp_"></a><a class="link" href="header__boost_optional_optional_hpp_.html" title="Header <boost/optional/optional.hpp>">Header + <boost/optional/optional.hpp></a> </h3></div></div></div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_optional.reference.header__boost_optional_optional_hpp_.header_optional_optional"></a><a name="ref_header_optional_optional_hpp"></a><a class="link" href="header__boost_optional_optional_hpp_.html#boost_optional.reference.header__boost_optional_optional_hpp_.header_optional_optional" title="Synopsis">Synopsis</a> +</h4></div></div></div> <pre class="programlisting"><code class="computeroutput"><span class="comment">// In Header: <</span></code><a href="../../../../../../boost/optional/optional.hpp" target="_top">boost/optional/optional.hpp</a><span class="comment">></span> <span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">class</span> <span class="identifier">optional</span> <span class="special">{</span> - <span class="keyword">public</span> <span class="special">:</span> +<span class="keyword">public</span> <span class="special">:</span> + + <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span> <span class="comment">// (If T is of reference type, the parameters and results by reference are by value)</span> - <span class="identifier">optional</span> <span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_none_t"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_none_t"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_move_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_move_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="comment">// [new in 1.34]</span> - <span class="identifier">optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_bool_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_bool_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="emphasis"><em>see below</em></span><span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_move_constructor_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="emphasis"><em>see below</em></span><span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_move_constructor_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_move_constructor_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_move_constructor_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">></span> <span class="keyword">explicit</span> <span class="identifier">optional</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_constructor_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_equal_none_t"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_equal_none_t"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_equal_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_equal_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_move_equal_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_move_equal_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_equal_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_equal_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="emphasis"><em>see below</em></span><span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_move_equal_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="emphasis"><em>see below</em></span><span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_move_equal_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_equal_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_equal_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_move_equal_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">U</span><span class="special">>&&</span> <span class="identifier">rhs</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_move_equal_other_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">emplace</span> <span class="special">(</span> <span class="identifier">Args</span><span class="special">...&&</span> <span class="identifier">args</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_emplace"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">emplace</span> <span class="special">(</span> <span class="identifier">Args</span><span class="special">...&&</span> <span class="identifier">args</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_emplace"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_equal_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">InPlaceFactory</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">InPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_equal_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_equal_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">TypedInPlaceFactory</span><span class="special">></span> <span class="identifier">optional</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">TypedInPlaceFactory</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_equal_factory"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span><span class="special">()</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">->()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">->()</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">->()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span> <span class="special">->()</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_arrow"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">&;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">&&;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_asterisk"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">&&</span> <span class="keyword">operator</span> <span class="special">*()</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_asterisk_move"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">value</span><span class="special">()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">&</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">value</span><span class="special">()</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">&</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">&&</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value_move"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or</span><span class="special">(</span> <span class="identifier">U</span> <span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_value_or"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or</span><span class="special">(</span> <span class="identifier">U</span> <span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_value_or"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or</span><span class="special">(</span> <span class="identifier">U</span> <span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value_or"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or</span><span class="special">(</span> <span class="identifier">U</span> <span class="special">&&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value_or_move"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or_eval</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value_or_call"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span> <span class="identifier">value_or_eval</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="special">&&</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_value_or_call_move"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="keyword">bool</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_bool"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> - <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_operator_not"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="keyword">bool</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_bool"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + + <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_operator_not"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="comment">// deprecated methods</span> <span class="comment">// (deprecated)</span> - <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_reset"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">()</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_reset"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="comment">// (deprecated)</span> - <span class="keyword">void</span> <span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_reset_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">void</span> <span class="identifier">reset</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_reset_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="comment">// (deprecated)</span> - <span class="keyword">bool</span> <span class="identifier">is_initialized</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_is_initialized"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="keyword">bool</span> <span class="identifier">is_initialized</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_is_initialized"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="comment">// (deprecated)</span> - <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_value_or</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> + <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_value_or</span><span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="special">};</span> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_not_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_not_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_less_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_less_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_greater_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">></span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_greater_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_less_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special"><=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_less_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_greater_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">>=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_greater_or_equal_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_equal_optional_none"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">==</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_equal_optional_none"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_operator_compare_not_equal_optional_none"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span> <span class="special">!=</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_operator_compare_not_equal_optional_none"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_make_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_make_optional_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_make_optional_bool_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">make_optional</span> <span class="special">(</span> <span class="keyword">bool</span> <span class="identifier">condition</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_make_optional_bool_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_optional_value_or</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get_optional_value_or</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="keyword">default</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get_value_or_value"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>*</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_pointer</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">&</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_optional_get_ptr"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> -<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="detailed_semantics.html#reference_swap_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> +<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>&</span> <span class="identifier">y</span> <span class="special">)</span> <span class="special">;</span> <a class="link" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html#reference_swap_optional_optional"><span class="inlinemediaobject"><img src="../../images/callouts/R.png" alt="R"></span></a> <span class="special">}</span> <span class="comment">// namespace boost</span> </pre> </div> +</div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> @@ -168,7 +179,7 @@ </tr></table> <hr> <div class="spirit-nav"> -<a accesskey="p" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../optional/reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="detailed_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +<a accesskey="p" href="../../boost_optional/reference/header__boost_optional_optional_fwd_hpp_.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> </div> </body> </html> diff --git a/libs/optional/doc/html/optional/tutorial.html b/libs/optional/doc/html/optional/tutorial.html index 7b84efd9c..537a8b09e 100644 --- a/libs/optional/doc/html/optional/tutorial.html +++ b/libs/optional/doc/html/optional/tutorial.html @@ -33,6 +33,7 @@ use Optional</a></span></dt> <dt><span class="section"><a href="../boost_optional/tutorial/relational_operators.html">Relational operators</a></span></dt> +<dt><span class="section"><a href="../boost_optional/tutorial/io_operators.html">IO operators</a></span></dt> <dt><span class="section"><a href="../boost_optional/tutorial/optional_references.html">Optional references</a></span></dt> <dt><span class="section"><a href="../boost_optional/tutorial/rebinding_semantics_for_assignment_of_optional_references.html">Rebinding @@ -44,6 +45,8 @@ <dt><span class="section"><a href="../boost_optional/tutorial/exception_safety_guarantees.html">Exception Safety Guarantees</a></span></dt> <dt><span class="section"><a href="../boost_optional/tutorial/type_requirements.html">Type requirements</a></span></dt> +<dt><span class="section"><a href="../boost_optional/tutorial/performance_considerations.html">Performance + considerations</a></span></dt> </dl></div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> @@ -139,7 +142,7 @@ </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> -<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014 Andrzej Krzemieński<p> +<td align="right"><div class="copyright-footer">Copyright © 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright © 2014, 2015 Andrzej Krzemieński<p> Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) </p> |