]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/optional/doc/html/boost_optional/reference/header__boost_optional_optional_hpp_/detailed_semantics____free_functions.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / optional / doc / html / boost_optional / reference / header__boost_optional_optional_hpp_ / detailed_semantics____free_functions.html
CommitLineData
7c673cae
FG
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4<title>Detailed Semantics -- Free Functions</title>
5<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
7<link rel="home" href="../../../index.html" title="Boost.Optional">
8<link rel="up" href="../../../optional/reference/header__boost_optional_optional_hpp_.html" title="Header &lt;boost/optional/optional.hpp&gt;">
9<link rel="prev" href="detailed_semantics____optional_references.html" title="Detailed Semantics -- Optional References">
10<link rel="next" href="header__boost_optional_hpp_.html" title="Header &lt;boost/optional.hpp&gt;">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="detailed_semantics____optional_references.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>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h4 class="title">
27<a name="boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics____free_functions"></a><a class="link" href="detailed_semantics____free_functions.html" title="Detailed Semantics -- Free Functions">Detailed
28 Semantics -- Free Functions</a>
29</h4></div></div></div>
30<p>
31 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
32 </p>
33<a name="reference_make_optional_value"></a><div class="blockquote"><blockquote class="blockquote"><p>
34 <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_optional</span><span class="special">(</span>
35 <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span></code>
36 </p></blockquote></div>
37<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
38<li class="listitem">
39 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</span><span class="identifier">v</span><span class="special">)</span></code> for the <span class="emphasis"><em>deduced</em></span>
40 type <code class="computeroutput"><span class="identifier">T</span></code> of <code class="computeroutput"><span class="identifier">v</span></code>.
41 </li>
42<li class="listitem">
43 <span class="bold"><strong>Example:</strong></span>
44<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">foo</span> <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">opt</span> <span class="special">)</span> <span class="special">;</span>
45
46<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&lt;int&gt;</span>
47</pre>
48 </li>
49</ul></div>
50<p>
51 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
52 </p>
53<a name="reference_make_optional_bool_value"></a><div class="blockquote"><blockquote class="blockquote"><p>
54 <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span></code> <span class="emphasis"><em>(not a ref)</em></span><code class="computeroutput"><span class="special">&gt;</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>
55 <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">)</span></code>
56 </p></blockquote></div>
57<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
58<li class="listitem">
59 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</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>
60 type <code class="computeroutput"><span class="identifier">T</span></code> of <code class="computeroutput"><span class="identifier">v</span></code>.
61 </li>
62<li class="listitem">
63 <span class="bold"><strong>Example:</strong></span>
64<pre class="programlisting"><span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">calculate_foo</span><span class="special">()</span>
65<span class="special">{</span>
66 <span class="keyword">double</span> <span class="identifier">val</span> <span class="special">=</span> <span class="identifier">compute_foo</span><span class="special">();</span>
67 <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>
68<span class="special">}</span>
69
70<span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">calculate_foo</span><span class="special">();</span>
71<span class="keyword">if</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">v</span> <span class="special">)</span>
72 <span class="identifier">error</span><span class="special">(</span><span class="string">"foo wasn't computed"</span><span class="special">);</span>
73</pre>
74 </li>
75</ul></div>
76<p>
77 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
78 </p>
79<a name="reference_operator_compare_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
80 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
81 <span class="special">==</span> <span class="special">(</span>
82 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">);</span></code>
83 </p></blockquote></div>
84<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
85<li class="listitem">
86 <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code>
87 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>.
88 </li>
89<li class="listitem">
90 <span class="bold"><strong>Returns:</strong></span> If both <code class="computeroutput"><span class="identifier">x</span></code>
91 and <code class="computeroutput"><span class="identifier">y</span></code> are initialized,
92 <code class="computeroutput"><span class="special">(*</span><span class="identifier">x</span>
93 <span class="special">==</span> <span class="special">*</span><span class="identifier">y</span><span class="special">)</span></code>.
94 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>.
95 If both are uninitialized, <code class="computeroutput"><span class="keyword">true</span></code>.
96 </li>
97<li class="listitem">
98 <span class="bold"><strong>Notes:</strong></span> This definition guarantees
99 that <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
100 not containing a value is compared unequal to any <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> containing any value, and equal
101 to any other <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> not containing a value. Pointers
102 have shallow relational operators while <code class="computeroutput"><span class="identifier">optional</span></code>
103 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
104 to be given either an <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>
105 instead
106 </li>
107<li class="listitem">
108 <span class="bold"><strong>Example:</strong></span>
109<pre class="programlisting"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">oN</span><span class="special">,</span> <span class="identifier">oN_</span><span class="special">;</span>
110<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>
111<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>
112
113<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>
114<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>
115
116<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>
117
118<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>
119
120<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>
121<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>
122</pre>
123 </li>
124</ul></div>
125<p>
126 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
127 </p>
128<a name="reference_operator_compare_less_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
129 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
130 <span class="special">&lt;</span> <span class="special">(</span>
131 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">);</span></code>
132 </p></blockquote></div>
133<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
134<li class="listitem">
135 <span class="bold"><strong>Requires:</strong></span> Expression <code class="computeroutput"><span class="special">*</span><span class="identifier">x</span> <span class="special">&lt;</span> <span class="special">*</span><span class="identifier">y</span></code> shall be well-formed and its result
136 shall be convertible to <code class="computeroutput"><span class="keyword">bool</span></code>.
137 </li>
138<li class="listitem">
139 <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">&lt;</span>
140 <span class="special">*</span><span class="identifier">y</span></code>.
141 </li>
142<li class="listitem">
143 <span class="bold"><strong>Notes:</strong></span> This definition guarantees
144 that <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
145 not containing a value is ordered as less than any <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> containing any value, and equivalent
146 to any other <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> not containing a value. Pointers
147 have shallow relational operators while <code class="computeroutput"><span class="identifier">optional</span></code>
148 has deep relational operators. Do not use <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code> directly in generic code which
149 expect to be given either an <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>
150 instead. <code class="computeroutput"><span class="identifier">T</span></code> need not
151 be <a href="http://www.sgi.com/tech/stl/LessThanComparable.html" target="_top"><code class="computeroutput"><span class="identifier">LessThanComparable</span></code></a>. Only
152 single <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code>
153 is required. Other relational operations are defined in terms of this
154 one. If <code class="computeroutput"><span class="identifier">T</span></code>'s <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code>
155 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,
156 antisymmetry and irreflexivity), <code class="computeroutput"><span class="identifier">optinal</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>.
157 </li>
158<li class="listitem">
159 <span class="bold"><strong>Example:</strong></span>
160<pre class="programlisting"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">oN</span><span class="special">,</span> <span class="identifier">oN_</span><span class="special">;</span>
161<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>
162<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</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>
163
164<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN</span> <span class="special">&lt;</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// Identity implies equivalence</span>
165<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o1</span> <span class="special">&lt;</span> <span class="identifier">o1</span><span class="special">)</span> <span class="special">);</span>
166
167<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN</span> <span class="special">&lt;</span> <span class="identifier">oN_</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// Two uninitialized are equivalent</span>
168<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">oN_</span> <span class="special">&lt;</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span>
169
170<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">oN</span> <span class="special">&lt;</span> <span class="identifier">o0</span> <span class="special">);</span> <span class="comment">// Uninitialized is less than initialized</span>
171<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o0</span> <span class="special">&lt;</span> <span class="identifier">oN</span><span class="special">)</span> <span class="special">);</span>
172
173<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">o1</span> <span class="special">&lt;</span> <span class="identifier">o2</span> <span class="special">)</span> <span class="special">;</span> <span class="comment">// Two initialized compare as (*lhs &lt; *rhs)</span>
174<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o2</span> <span class="special">&lt;</span> <span class="identifier">o1</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span>
175<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!(</span><span class="identifier">o2</span> <span class="special">&lt;</span> <span class="identifier">o2</span><span class="special">)</span> <span class="special">)</span> <span class="special">;</span>
176</pre>
177 </li>
178</ul></div>
179<p>
180 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
181 </p>
182<a name="reference_operator_compare_not_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
183 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
184 <span class="special">!=</span> <span class="special">(</span>
185 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">);</span></code>
186 </p></blockquote></div>
187<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
188 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span>
189 <span class="identifier">x</span> <span class="special">==</span>
190 <span class="identifier">y</span> <span class="special">);</span></code>
191 </li></ul></div>
192<p>
193 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
194 </p>
195<a name="reference_operator_compare_greater_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
196 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
197 <span class="special">&gt;</span> <span class="special">(</span>
198 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">);</span></code>
199 </p></blockquote></div>
200<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
201 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">(</span>
202 <span class="identifier">y</span> <span class="special">&lt;</span>
203 <span class="identifier">x</span> <span class="special">);</span></code>
204 </li></ul></div>
205<p>
206 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
207 </p>
208<a name="reference_operator_compare_less_or_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
209 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
210 <span class="special">&lt;=</span> <span class="special">(</span>
211 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">);</span></code>
212 </p></blockquote></div>
213<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
214 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span>
215 <span class="identifier">y</span> <span class="special">&lt;</span>
216 <span class="identifier">x</span> <span class="special">);</span></code>
217 </li></ul></div>
218<p>
219 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
220 </p>
221<a name="reference_operator_compare_greater_or_equal_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
222 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
223 <span class="special">&gt;=</span> <span class="special">(</span>
224 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">y</span> <span class="special">);</span></code>
225 </p></blockquote></div>
226<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
227 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span>
228 <span class="identifier">x</span> <span class="special">&lt;</span>
229 <span class="identifier">y</span> <span class="special">);</span></code>
230 </li></ul></div>
231<p>
232 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
233 </p>
234<a name="reference_operator_compare_equal_optional_none"></a><div class="blockquote"><blockquote class="blockquote"><p>
235 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
236 <span class="special">==</span> <span class="special">(</span>
237 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span>
238 <span class="keyword">noexcept</span><span class="special">;</span></code>
239 </p></blockquote></div>
240<div class="blockquote"><blockquote class="blockquote"><p>
241 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
242 <span class="special">==</span> <span class="special">(</span>
243 <span class="identifier">none_t</span><span class="special">,</span>
244 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
245 </p></blockquote></div>
246<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
247<li class="listitem">
248 <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">!</span><span class="identifier">x</span></code>.
249 </li>
250<li class="listitem">
251 <span class="bold"><strong>Notes:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code>
252 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>.
253 </li>
254</ul></div>
255<p>
256 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
257 </p>
258<a name="reference_operator_compare_not_equal_optional_none"></a><div class="blockquote"><blockquote class="blockquote"><p>
259 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
260 <span class="special">!=</span> <span class="special">(</span>
261 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">none_t</span> <span class="special">)</span>
262 <span class="keyword">noexcept</span><span class="special">;</span></code>
263 </p></blockquote></div>
264<div class="blockquote"><blockquote class="blockquote"><p>
265 <code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span>
266 <span class="special">!=</span> <span class="special">(</span>
267 <span class="identifier">none_t</span><span class="special">,</span>
268 <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">x</span> <span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
269 </p></blockquote></div>
270<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
271 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">!(</span>
272 <span class="identifier">x</span> <span class="special">==</span>
273 <span class="identifier">y</span> <span class="special">);</span></code>
274 </li></ul></div>
275<p>
276 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
277 </p>
278<a name="reference_swap_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
279 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span>
280 <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">y</span>
281 <span class="special">)</span> <span class="special">;</span></code>
282 </p></blockquote></div>
283<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
284<li class="listitem">
285 <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>.
286 </li>
287<li class="listitem">
288<p class="simpara">
289 <span class="bold"><strong>Effects:</strong></span>
290 </p>
291<div class="informaltable"><table class="table">
292<colgroup>
293<col>
294<col>
295<col>
296</colgroup>
297<thead><tr></tr></thead>
298<tbody>
299<tr>
300<td>
301 </td>
302<td>
303 <p>
304 <span class="bold"><strong><code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> contains a value</strong></span>
305 </p>
306 </td>
307<td>
308 <p>
309 <span class="bold"><strong><code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> does not contain a value</strong></span>
310 </p>
311 </td>
312</tr>
313<tr>
314<td>
315 <p>
316 <span class="bold"><strong><code class="computeroutput"><span class="identifier">rhs</span></code>
317 contains a value</strong></span>
318 </p>
319 </td>
320<td>
321 <p>
322 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>
323 </p>
324 </td>
325<td>
326 <p>
327 initializes the contained value of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> as if direct-initializing
328 an object of type <code class="computeroutput"><span class="identifier">T</span></code>
329 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">-&gt;</span><span class="identifier">T</span><span class="special">::~</span><span class="identifier">T</span><span class="special">()</span></code>,
330 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
331 contains a value and <code class="computeroutput"><span class="identifier">rhs</span></code>
332 does not contain a value
333 </p>
334 </td>
335</tr>
336<tr>
337<td>
338 <p>
339 <span class="bold"><strong><code class="computeroutput"><span class="identifier">rhs</span></code>
340 does not contain a value</strong></span>
341 </p>
342 </td>
343<td>
344 <p>
345 initializes the contained value of <code class="computeroutput"><span class="identifier">rhs</span></code>
346 as if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> with the expression
347 <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>,
348 followed by <code class="computeroutput"><span class="identifier">val</span><span class="special">-&gt;</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
349 and <code class="computeroutput"><span class="identifier">rhs</span></code> contains
350 a value
351 </p>
352 </td>
353<td>
354 <p>
355 no effect
356 </p>
357 </td>
358</tr>
359</tbody>
360</table></div>
361</li>
362<li class="listitem">
363 <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>
364 interchanged.
365 </li>
366<li class="listitem">
367 <span class="bold"><strong>Throws:</strong></span> If both are initialized, whatever
368 <code class="computeroutput"><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;,</span><span class="identifier">T</span><span class="special">&amp;)</span></code>
369 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">&amp;&amp;</span> <span class="special">)</span></code>
370 throws.
371 </li>
372<li class="listitem">
373 <span class="bold"><strong>Example:</strong></span>
374<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>
375<span class="identifier">T</span> <span class="identifier">y</span><span class="special">(</span><span class="number">21</span><span class="special">);</span>
376<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">def0</span> <span class="special">;</span>
377<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">def1</span> <span class="special">;</span>
378<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">optX</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span>
379<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">optY</span><span class="special">(</span><span class="identifier">y</span><span class="special">);</span>
380
381<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>
382
383<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>
384<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>
385<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">optX</span> <span class="special">);</span>
386
387<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>
388
389<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>
390<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>
391<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>
392</pre>
393 </li>
394</ul></div>
395<p>
396 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
397 </p>
398<a name="reference_swap_optional_reference"></a><div class="blockquote"><blockquote class="blockquote"><p>
399 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span>
400 <span class="special">(</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;&amp;</span> <span class="identifier">y</span>
401 <span class="special">)</span> <span class="keyword">noexcept</span>
402 <span class="special">;</span></code>
403 </p></blockquote></div>
404<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
405<li class="listitem">
406 <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="identifier">x</span></code>
407 refers to what <code class="computeroutput"><span class="identifier">y</span></code> refererred
408 to before the swap (if anything). <code class="computeroutput"><span class="identifier">y</span></code>
409 refers to whatever <code class="computeroutput"><span class="identifier">x</span></code>
410 referred to before the swap.
411 </li>
412<li class="listitem">
413 <span class="bold"><strong>Example:</strong></span>
414<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>
415<span class="identifier">T</span> <span class="identifier">y</span><span class="special">(</span><span class="number">21</span><span class="special">);</span>
416
417<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span> <span class="identifier">opt0</span><span class="special">;</span>
418<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span> <span class="identifier">optX</span> <span class="special">(</span><span class="identifier">x</span><span class="special">);</span>
419<span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span> <span class="identifier">optY</span> <span class="special">(</span><span class="identifier">y</span><span class="special">);</span>
420
421<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>
422<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">addressof</span><span class="special">(*</span><span class="identifier">optX</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">addressof</span><span class="special">(</span><span class="identifier">y</span><span class="special">));</span>
423<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">addressof</span><span class="special">(*</span><span class="identifier">optY</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">addressof</span><span class="special">(</span><span class="identifier">x</span><span class="special">));</span>
424
425<span class="identifier">boost</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">opt0</span><span class="special">,</span> <span class="identifier">optX</span><span class="special">);</span>
426<span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt0</span> <span class="special">);</span>
427<span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">optX</span> <span class="special">);</span>
428<span class="identifier">assert</span> <span class="special">(</span><span class="identifier">addressof</span><span class="special">(*</span><span class="identifier">opt0</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">addressof</span><span class="special">(</span><span class="identifier">y</span><span class="special">));</span>
429</pre>
430 [endsect]
431 </li>
432</ul></div>
433</div>
434<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
435<td align="left"></td>
436<td align="right"><div class="copyright-footer">Copyright &#169; 2003-2007 Fernando Luis Cacciola Carballal<br>Copyright &#169; 2014-2016 Andrzej Krzemie&#324;ski<p>
437 Distributed under the Boost Software License, Version 1.0. (See accompanying
438 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>)
439 </p>
440</div></td>
441</tr></table>
442<hr>
443<div class="spirit-nav">
444<a accesskey="p" href="detailed_semantics____optional_references.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>
445</div>
446</body>
447</html>