]> git.proxmox.com Git - ceph.git/blob - 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
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><span class="special">&gt;</span> <span class="identifier">make_optional</span><span class="special">(</span>
55 <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">&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="keyword">bool</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span></code>
272 </li></ul></div>
273 <p>
274 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
275 </p>
276 <a name="reference_free_get_pointer"></a><div class="blockquote"><blockquote class="blockquote"><p>
277 <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">get_pointer</span>
278 <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">o</span>
279 <span class="special">)</span> <span class="special">-&gt;</span>
280 <span class="keyword">typename</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">pointer_type</span>
281 <span class="special">;</span></code>
282 </p></blockquote></div>
283 <div class="blockquote"><blockquote class="blockquote"><p>
284 <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">get_pointer</span>
285 <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">o</span> <span class="special">)</span> <span class="special">-&gt;</span> <span class="keyword">typename</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">pointer_const_type</span>
286 <span class="special">;</span></code>
287 </p></blockquote></div>
288 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
289 <li class="listitem">
290 <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">o</span><span class="special">.</span><span class="identifier">get_ptr</span><span class="special">()</span></code>.
291 </li>
292 <li class="listitem">
293 <span class="bold"><strong>Throws:</strong></span> Nothing.
294 </li>
295 </ul></div>
296 <p>
297 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
298 </p>
299 <a name="reference_free_get_value_or"></a><div class="blockquote"><blockquote class="blockquote"><p>
300 <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">get_optional_value_or</span>
301 <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">o</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reference_type</span> <span class="identifier">def</span>
302 <span class="special">)</span> <span class="special">-&gt;</span>
303 <span class="keyword">typename</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reference_type</span>
304 <span class="special">;</span></code>
305 </p></blockquote></div>
306 <div class="blockquote"><blockquote class="blockquote"><p>
307 <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">get_optional_value_or</span>
308 <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">o</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reference_const_type</span> <span class="identifier">def</span>
309 <span class="special">)</span> <span class="special">-&gt;</span>
310 <span class="keyword">typename</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">reference_const_type</span>
311 <span class="special">;</span></code>
312 </p></blockquote></div>
313 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
314 <li class="listitem">
315 <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">o</span><span class="special">.</span><span class="identifier">get_value_or</span><span class="special">(</span><span class="identifier">def</span><span class="special">)</span></code>.
316 </li>
317 <li class="listitem">
318 <span class="bold"><strong>Throws:</strong></span> Nothing.
319 </li>
320 <li class="listitem">
321 <span class="bold"><strong>Remarks:</strong></span> This function is deprecated.
322 </li>
323 </ul></div>
324 <p>
325 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
326 </p>
327 <a name="reference_swap_optional_optional"></a><div class="blockquote"><blockquote class="blockquote"><p>
328 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span>
329 <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>
330 <span class="special">)</span> <span class="special">;</span></code>
331 </p></blockquote></div>
332 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
333 <li class="listitem">
334 <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>.
335 </li>
336 <li class="listitem">
337 <p class="simpara">
338 <span class="bold"><strong>Effects:</strong></span>
339 </p>
340 <div class="informaltable"><table class="table">
341 <colgroup>
342 <col>
343 <col>
344 <col>
345 </colgroup>
346 <thead><tr></tr></thead>
347 <tbody>
348 <tr>
349 <td>
350 </td>
351 <td>
352 <p>
353 <span class="bold"><strong><code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> contains a value</strong></span>
354 </p>
355 </td>
356 <td>
357 <p>
358 <span class="bold"><strong><code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> does not contain a value</strong></span>
359 </p>
360 </td>
361 </tr>
362 <tr>
363 <td>
364 <p>
365 <span class="bold"><strong><code class="computeroutput"><span class="identifier">rhs</span></code>
366 contains a value</strong></span>
367 </p>
368 </td>
369 <td>
370 <p>
371 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>
372 </p>
373 </td>
374 <td>
375 <p>
376 initializes the contained value of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> as if direct-initializing
377 an object of type <code class="computeroutput"><span class="identifier">T</span></code>
378 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>,
379 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
380 contains a value and <code class="computeroutput"><span class="identifier">rhs</span></code>
381 does not contain a value
382 </p>
383 </td>
384 </tr>
385 <tr>
386 <td>
387 <p>
388 <span class="bold"><strong><code class="computeroutput"><span class="identifier">rhs</span></code>
389 does not contain a value</strong></span>
390 </p>
391 </td>
392 <td>
393 <p>
394 initializes the contained value of <code class="computeroutput"><span class="identifier">rhs</span></code>
395 as if direct-initializing an object of type <code class="computeroutput"><span class="identifier">T</span></code> with the expression
396 <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>,
397 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
398 and <code class="computeroutput"><span class="identifier">rhs</span></code> contains
399 a value
400 </p>
401 </td>
402 <td>
403 <p>
404 no effect
405 </p>
406 </td>
407 </tr>
408 </tbody>
409 </table></div>
410 </li>
411 <li class="listitem">
412 <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>
413 interchanged.
414 </li>
415 <li class="listitem">
416 <span class="bold"><strong>Throws:</strong></span> If both are initialized, whatever
417 <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>
418 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>
419 throws.
420 </li>
421 <li class="listitem">
422 <span class="bold"><strong>Example:</strong></span>
423 <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>
424 <span class="identifier">T</span> <span class="identifier">y</span><span class="special">(</span><span class="number">21</span><span class="special">);</span>
425 <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>
426 <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>
427 <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>
428 <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>
429
430 <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>
431
432 <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>
433 <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>
434 <span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">optX</span> <span class="special">);</span>
435
436 <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>
437
438 <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>
439 <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>
440 <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>
441 </pre>
442 </li>
443 </ul></div>
444 <p>
445 <span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
446 </p>
447 <a name="reference_swap_optional_reference"></a><div class="blockquote"><blockquote class="blockquote"><p>
448 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">swap</span>
449 <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>
450 <span class="special">)</span> <span class="keyword">noexcept</span>
451 <span class="special">;</span></code>
452 </p></blockquote></div>
453 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
454 <li class="listitem">
455 <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="identifier">x</span></code>
456 refers to what <code class="computeroutput"><span class="identifier">y</span></code> refererred
457 to before the swap (if anything). <code class="computeroutput"><span class="identifier">y</span></code>
458 refers to whatever <code class="computeroutput"><span class="identifier">x</span></code>
459 referred to before the swap.
460 </li>
461 <li class="listitem">
462 <span class="bold"><strong>Example:</strong></span>
463 <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>
464 <span class="identifier">T</span> <span class="identifier">y</span><span class="special">(</span><span class="number">21</span><span class="special">);</span>
465
466 <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>
467 <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>
468 <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>
469
470 <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>
471 <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>
472 <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>
473
474 <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>
475 <span class="identifier">assert</span> <span class="special">(</span> <span class="identifier">opt0</span> <span class="special">);</span>
476 <span class="identifier">assert</span> <span class="special">(</span> <span class="special">!</span><span class="identifier">optX</span> <span class="special">);</span>
477 <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>
478 </pre>
479 </li>
480 </ul></div>
481 </div>
482 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
483 <td align="left"></td>
484 <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>
485 Distributed under the Boost Software License, Version 1.0. (See accompanying
486 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>)
487 </p>
488 </div></td>
489 </tr></table>
490 <hr>
491 <div class="spirit-nav">
492 <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>
493 </div>
494 </body>
495 </html>