3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Detailed Semantics - Optional Values
</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 <boost/optional/optional.hpp>">
9 <link rel=
"prev" href=
"header_optional_optional_refs.html" title=
"Optional References">
10 <link rel=
"next" href=
"detailed_semantics___optional_references.html" title=
"Detailed Semantics - Optional References">
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>
22 <div class=
"spirit-nav">
23 <a accesskey=
"p" href=
"header_optional_optional_refs.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=
"detailed_semantics___optional_references.html"><img src=
"../../../../../../../doc/src/images/next.png" alt=
"Next"></a>
26 <div class=
"titlepage"><div><div><h4 class=
"title">
27 <a name=
"boost_optional.reference.header__boost_optional_optional_hpp_.detailed_semantics___optional_values"></a><a class=
"link" href=
"detailed_semantics___optional_values.html" title=
"Detailed Semantics - Optional Values">Detailed
28 Semantics - Optional Values
</a>
29 </h4></div></div></div>
30 <div class=
"note"><table border=
"0" summary=
"Note">
32 <td rowspan=
"2" align=
"center" valign=
"top" width=
"25"><img alt=
"[Note]" src=
"../../../../../../../doc/src/images/note.png"></td>
33 <th align=
"left">Note
</th>
35 <tr><td align=
"left" valign=
"top"><p>
36 The following section contains various
<code class=
"computeroutput"><span class=
"identifier">assert
</span><span class=
"special">()
</span></code> which are used only to show the postconditions
37 as sample code. It is not implied that the type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
38 must support each particular expression but that if the expression is
39 supported, the implied condition holds.
43 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
45 <a name=
"reference_optional_constructor"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
46 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">()
</span>
47 <span class=
"keyword">noexcept
</span><span class=
"special">;
</span></code>
48 </p></blockquote></div>
49 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
51 <span class=
"bold"><strong>Effect:
</strong></span> Default-Constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
54 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">uninitialized
</span>.
57 <span class=
"bold"><strong>Notes:
</strong></span> T's default constructor
<span class=
"underline">is not
</span> called.
60 <span class=
"bold"><strong>Example:
</strong></span>
61 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
62 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">!
</span><span class=
"identifier">def
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
67 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
69 <a name=
"reference_optional_constructor_none_t"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
70 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
71 <span class=
"identifier">none_t
</span> <span class=
"special">)
</span>
72 <span class=
"keyword">noexcept
</span><span class=
"special">;
</span></code>
73 </p></blockquote></div>
74 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
76 <span class=
"bold"><strong>Effect:
</strong></span> Constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code> uninitialized.
79 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">uninitialized
</span>.
82 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
83 default constructor
<span class=
"underline">is not
</span> called.
84 The expression
<code class=
"computeroutput"><span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">none
</span></code>
85 denotes an instance of
<code class=
"computeroutput"><span class=
"identifier">boost
</span><span class=
"special">::
</span><span class=
"identifier">none_t
</span></code>
86 that can be used as the parameter.
89 <span class=
"bold"><strong>Example:
</strong></span>
90 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">none
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
91 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">n
</span><span class=
"special">(
</span><span class=
"identifier">none
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
92 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">!
</span><span class=
"identifier">n
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
97 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
99 <a name=
"reference_optional_constructor_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
100 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
101 <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span></code>
102 </p></blockquote></div>
103 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
104 <li class=
"listitem">
105 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">is_copy_constructible
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span></code>
106 is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>.
108 <li class=
"listitem">
109 <span class=
"bold"><strong>Effect:
</strong></span> Directly-Constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
111 <li class=
"listitem">
112 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">initialized
</span>
113 and its value is a
<span class=
"emphasis"><em>copy
</em></span> of
<code class=
"computeroutput"><span class=
"identifier">v
</span></code>.
115 <li class=
"listitem">
116 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
117 <span class=
"special">)
</span></code> throws.
119 <li class=
"listitem">
120 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
121 <span class=
"special">)
</span></code> is called.
123 <li class=
"listitem">
124 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
125 be thrown during
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
126 <span class=
"special">);
</span></code> in that case, this constructor
129 <li class=
"listitem">
130 <span class=
"bold"><strong>Example:
</strong></span>
131 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
132 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span>
133 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">==
</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
138 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
140 <a name=
"reference_optional_constructor_move_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
141 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
142 <span class=
"identifier">T
</span><span class=
"special">&&</span>
143 <span class=
"identifier">v
</span> <span class=
"special">)
</span></code>
144 </p></blockquote></div>
145 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
146 <li class=
"listitem">
147 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">is_move_constructible
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span></code>
148 is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>.
150 <li class=
"listitem">
151 <span class=
"bold"><strong>Effect:
</strong></span> Directly-Move-Constructs an
152 <code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
154 <li class=
"listitem">
155 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">initialized
</span>
156 and its value is move-constructed from
<code class=
"computeroutput"><span class=
"identifier">v
</span></code>.
158 <li class=
"listitem">
159 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"special">)
</span></code>
162 <li class=
"listitem">
163 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"special">)
</span></code>
166 <li class=
"listitem">
167 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
168 be thrown during
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"special">);
</span></code>
169 in that case, the state of
<code class=
"computeroutput"><span class=
"identifier">v
</span></code>
170 is determined by exception safety guarantees for
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"identifier">T
</span><span class=
"special">&&)
</span></code>.
172 <li class=
"listitem">
173 <span class=
"bold"><strong>Example:
</strong></span>
174 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v1
</span><span class=
"special">,
</span> <span class=
"identifier">v2
</span><span class=
"special">;
</span>
175 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">v1
</span><span class=
"special">));
</span>
176 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">==
</span> <span class=
"identifier">v2
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
181 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
183 <a name=
"reference_optional_constructor_bool_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
184 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
185 <span class=
"keyword">bool
</span> <span class=
"identifier">condition
</span><span class=
"special">,
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span></code>
186 </p></blockquote></div>
187 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; "><li class=
"listitem">
188 If condition is true, same as:
190 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
191 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
192 <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span></code>
193 </p></blockquote></div>
194 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; "><li class=
"listitem">
197 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
198 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">()
</span></code>
199 </p></blockquote></div>
201 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
203 <a name=
"reference_optional_constructor_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
204 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
205 <span class=
"identifier">optional
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">rhs
</span>
206 <span class=
"special">);
</span></code>
207 </p></blockquote></div>
208 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
209 <li class=
"listitem">
210 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">is_copy_constructible
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span></code>
211 is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>.
213 <li class=
"listitem">
214 <span class=
"bold"><strong>Effect:
</strong></span> Copy-Constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
216 <li class=
"listitem">
217 <span class=
"bold"><strong>Postconditions:
</strong></span> If rhs is initialized,
218 <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
219 is initialized and its value is a
<span class=
"emphasis"><em>copy
</em></span> of the
220 value of
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>; else
221 <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
224 <li class=
"listitem">
225 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
226 <span class=
"special">)
</span></code> throws.
228 <li class=
"listitem">
229 <span class=
"bold"><strong>Notes:
</strong></span> If rhs is initialized,
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"special">)
</span></code>
232 <li class=
"listitem">
233 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
234 be thrown during
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
235 <span class=
"special">);
</span></code> in that case, this constructor
238 <li class=
"listitem">
239 <span class=
"bold"><strong>Example:
</strong></span>
240 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">uninit
</span> <span class=
"special">;
</span>
241 <span class=
"identifier">assert
</span> <span class=
"special">(!
</span><span class=
"identifier">uninit
</span><span class=
"special">);
</span>
243 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">uinit2
</span> <span class=
"special">(
</span> <span class=
"identifier">uninit
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
244 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">uninit2
</span> <span class=
"special">==
</span> <span class=
"identifier">uninit
</span> <span class=
"special">);
</span>
246 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">init
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">)
</span> <span class=
"special">);
</span>
247 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">init
</span> <span class=
"special">==
</span> <span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
249 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">init2
</span> <span class=
"special">(
</span> <span class=
"identifier">init
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
250 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">init2
</span> <span class=
"special">==
</span> <span class=
"identifier">init
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
255 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
257 <a name=
"reference_optional_move_constructor_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
258 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span>
259 <span class=
"identifier">optional
</span><span class=
"special">&&</span>
260 <span class=
"identifier">rhs
</span> <span class=
"special">)
</span>
261 <span class=
"keyword">noexcept
</span><span class=
"special">(
</span></code><span class=
"emphasis"><em>see
262 below
</em></span><code class=
"computeroutput"><span class=
"special">);
</span></code>
263 </p></blockquote></div>
264 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
265 <li class=
"listitem">
266 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">is_move_constructible
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span></code>
267 is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>.
269 <li class=
"listitem">
270 <span class=
"bold"><strong>Effect:
</strong></span> Move-constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
272 <li class=
"listitem">
273 <span class=
"bold"><strong>Postconditions:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
274 is initialized,
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
275 is initialized and its value is move constructed from
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>; else
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is uninitialized.
277 <li class=
"listitem">
278 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"special">)
</span></code>
281 <li class=
"listitem">
282 <span class=
"bold"><strong>Remarks:
</strong></span> The expression inside
<code class=
"computeroutput"><span class=
"keyword">noexcept
</span></code> is equivalent to
<code class=
"computeroutput"><span class=
"identifier">is_nothrow_move_constructible
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span></code>.
284 <li class=
"listitem">
285 <span class=
"bold"><strong>Notes:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
286 is initialized,
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"special">&&</span>
287 <span class=
"special">)
</span></code> is called.
289 <li class=
"listitem">
290 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
291 be thrown during
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"special">);
</span></code>
292 in that case,
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code> remains
293 initialized and the value of
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code> is determined by exception safety
294 of
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"identifier">T
</span><span class=
"special">&&)
</span></code>.
296 <li class=
"listitem">
297 <span class=
"bold"><strong>Example:
</strong></span>
298 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">unique_ptr
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>></span> <span class=
"identifier">uninit
</span> <span class=
"special">;
</span>
299 <span class=
"identifier">assert
</span> <span class=
"special">(!
</span><span class=
"identifier">uninit
</span><span class=
"special">);
</span>
301 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">unique_ptr
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>></span> <span class=
"identifier">uinit2
</span> <span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">uninit
</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
302 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">uninit2
</span> <span class=
"special">==
</span> <span class=
"identifier">uninit
</span> <span class=
"special">);
</span>
304 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">unique_ptr
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>></span> <span class=
"identifier">init
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">uniqye_ptr
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>(
</span><span class=
"keyword">new
</span> <span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">))
</span> <span class=
"special">);
</span>
305 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">**
</span><span class=
"identifier">init
</span> <span class=
"special">==
</span> <span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
307 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">unique_ptr
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>></span> <span class=
"identifier">init2
</span> <span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">init
</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
308 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">init
</span> <span class=
"special">);
</span>
309 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">init
</span> <span class=
"special">==
</span> <span class=
"keyword">nullptr
</span> <span class=
"special">);
</span>
310 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">init2
</span> <span class=
"special">);
</span>
311 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">**
</span><span class=
"identifier">init2
</span> <span class=
"special">==
</span> <span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
316 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
318 <a name=
"reference_optional_constructor_other_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
319 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">rhs
</span>
320 <span class=
"special">);
</span></code>
321 </p></blockquote></div>
322 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
323 <li class=
"listitem">
324 <span class=
"bold"><strong>Effect:
</strong></span> Copy-Constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
326 <li class=
"listitem">
327 <span class=
"bold"><strong>Postconditions:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
328 is initialized,
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
329 is initialized and its value is a
<span class=
"emphasis"><em>copy
</em></span> of the
330 value of rhs converted to type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>;
331 else
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
334 <li class=
"listitem">
335 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
336 <span class=
"special">)
</span></code> throws.
338 <li class=
"listitem">
339 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
340 <span class=
"special">)
</span></code> is called if
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code> is initialized, which requires
341 a valid conversion from
<code class=
"computeroutput"><span class=
"identifier">U
</span></code>
342 to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>.
344 <li class=
"listitem">
345 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
346 be thrown during
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
347 <span class=
"special">);
</span></code> in that case, this constructor
350 <li class=
"listitem">
351 <span class=
"bold"><strong>Example:
</strong></span>
352 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">x
</span><span class=
"special">(
</span><span class=
"number">123.4</span><span class=
"special">);
</span>
353 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">x
</span> <span class=
"special">==
</span> <span class=
"number">123.4</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
355 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">int
</span><span class=
"special">></span> <span class=
"identifier">y
</span><span class=
"special">(
</span><span class=
"identifier">x
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
356 <span class=
"identifier">assert
</span><span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">y
</span> <span class=
"special">==
</span> <span class=
"number">123</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
361 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
363 <a name=
"reference_optional_move_constructor_other_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
364 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&&</span> <span class=
"identifier">rhs
</span>
365 <span class=
"special">);
</span></code>
366 </p></blockquote></div>
367 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
368 <li class=
"listitem">
369 <span class=
"bold"><strong>Effect:
</strong></span> Move-constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
371 <li class=
"listitem">
372 <span class=
"bold"><strong>Postconditions:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
373 is initialized,
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
374 is initialized and its value is move-constructed from
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code>;
375 else
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
378 <li class=
"listitem">
379 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span><span class=
"special">&&</span> <span class=
"special">)
</span></code>
382 <li class=
"listitem">
383 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span><span class=
"special">&&</span> <span class=
"special">)
</span></code>
384 is called if
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code> is
385 initialized, which requires a valid conversion from
<code class=
"computeroutput"><span class=
"identifier">U
</span></code>
386 to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>.
388 <li class=
"listitem">
389 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
390 be thrown during
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span><span class=
"special">&&</span> <span class=
"special">);
</span></code>
391 in that case,
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code> remains
392 initialized and the value of
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code> is determined by exception safety
393 guarantee of
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span> <span class=
"identifier">U
</span><span class=
"special">&&</span>
394 <span class=
"special">)
</span></code>.
396 <li class=
"listitem">
397 <span class=
"bold"><strong>Example:
</strong></span>
398 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">double
</span><span class=
"special">></span> <span class=
"identifier">x
</span><span class=
"special">(
</span><span class=
"number">123.4</span><span class=
"special">);
</span>
399 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">x
</span> <span class=
"special">==
</span> <span class=
"number">123.4</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
401 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">int
</span><span class=
"special">></span> <span class=
"identifier">y
</span><span class=
"special">(
</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">x
</span><span class=
"special">))
</span> <span class=
"special">;
</span>
402 <span class=
"identifier">assert
</span><span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">y
</span> <span class=
"special">==
</span> <span class=
"number">123</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
407 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
409 <a name=
"reference_optional_in_place_init"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
410 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span><span class=
"special">...
</span> <span class=
"identifier">Args
</span><span class=
"special">></span>
411 <span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span> <span class=
"identifier">in_place_init_t
</span><span class=
"special">,
</span> <span class=
"identifier">Args
</span><span class=
"special">&&...
</span> <span class=
"identifier">ars
</span>
412 <span class=
"special">);
</span></code>
413 </p></blockquote></div>
414 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
415 <li class=
"listitem">
416 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">is_constructible_v
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"identifier">Args
</span><span class=
"special">&&...
></span></code> is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>.
418 <li class=
"listitem">
419 <span class=
"bold"><strong>Effect:
</strong></span> Initializes the contained
420 value as if direct-non-list-initializing an object of type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code> with the arguments
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">forward
</span><span class=
"special"><</span><span class=
"identifier">Args
</span><span class=
"special">>(
</span><span class=
"identifier">args
</span><span class=
"special">)...
</span></code>.
422 <li class=
"listitem">
423 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized.
425 <li class=
"listitem">
426 <span class=
"bold"><strong>Throws:
</strong></span> Any exception thrown by the
427 selected constructor of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>.
429 <li class=
"listitem">
430 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
431 need not be
<code class=
"computeroutput"><span class=
"identifier">MoveConstructible
</span></code>.
432 On compilers that do not suppor variadic templates or rvalue references,
433 this constuctor is available in limited functionality. For details
434 <a class=
"link" href=
"../../dependencies_and_portability/emplace_operations_in_older_compilers.html#optional_emplace_workaround">see here
</a>.
436 <li class=
"listitem">
437 <span class=
"bold"><strong>Example:
</strong></span>
438 <pre class=
"programlisting"><span class=
"comment">// creates an std::mutex using its default constructor
</span>
439 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">mutex
</span><span class=
"special">></span> <span class=
"identifier">om
</span> <span class=
"special">{
</span><span class=
"identifier">in_place_init
</span><span class=
"special">};
</span>
440 <span class=
"identifier">assert
</span> <span class=
"special">(
</span><span class=
"identifier">om
</span><span class=
"special">);
</span>
442 <span class=
"comment">// creates a unique_lock by calling unique_lock(*om, std::defer_lock)
</span>
443 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">unique_lock
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">mutex
</span><span class=
"special">>></span> <span class=
"identifier">ol
</span> <span class=
"special">{
</span><span class=
"identifier">in_place_init
</span><span class=
"special">,
</span> <span class=
"special">*
</span><span class=
"identifier">om
</span><span class=
"special">,
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">defer_lock
</span><span class=
"special">};
</span>
444 <span class=
"identifier">assert
</span> <span class=
"special">(
</span><span class=
"identifier">ol
</span><span class=
"special">);
</span>
445 <span class=
"identifier">assert
</span> <span class=
"special">(!
</span><span class=
"identifier">ol
</span><span class=
"special">-
></span><span class=
"identifier">owns_lock
</span><span class=
"special">());
</span>
450 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
452 <a name=
"reference_optional_in_place_init_if"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
453 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span><span class=
"special">...
</span> <span class=
"identifier">Args
</span><span class=
"special">></span>
454 <span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span> <span class=
"identifier">in_place_init_if_t
</span><span class=
"special">,
</span> <span class=
"keyword">bool
</span> <span class=
"identifier">condition
</span><span class=
"special">,
</span>
455 <span class=
"identifier">Args
</span><span class=
"special">&&...
</span>
456 <span class=
"identifier">ars
</span> <span class=
"special">);
</span></code>
457 </p></blockquote></div>
458 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
459 <li class=
"listitem">
460 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">is_constructible_v
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">,
</span> <span class=
"identifier">Args
</span><span class=
"special">&&...
></span></code> is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>.
462 <li class=
"listitem">
463 <span class=
"bold"><strong>Effect:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">condition
</span></code>
464 is
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>, initializes the
465 contained value as if direct-non-list-initializing an object of type
466 <code class=
"computeroutput"><span class=
"identifier">T
</span></code> with the arguments
467 <code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">forward
</span><span class=
"special"><</span><span class=
"identifier">Args
</span><span class=
"special">>(
</span><span class=
"identifier">args
</span><span class=
"special">)...
</span></code>.
469 <li class=
"listitem">
470 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"special">==
</span> <span class=
"identifier">condition
</span></code>.
472 <li class=
"listitem">
473 <span class=
"bold"><strong>Throws:
</strong></span> Any exception thrown by the
474 selected constructor of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>.
476 <li class=
"listitem">
477 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
478 need not be
<code class=
"computeroutput"><span class=
"identifier">MoveConstructible
</span></code>.
479 On compilers that do not suppor variadic templates or rvalue references,
480 this constuctor is available in limited functionality. For details
481 <a class=
"link" href=
"../../dependencies_and_portability/emplace_operations_in_older_compilers.html#optional_emplace_workaround">see here
</a>.
483 <li class=
"listitem">
484 <span class=
"bold"><strong>Example:
</strong></span>
485 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">string
</span><span class=
"special">>></span> <span class=
"identifier">ov1
</span> <span class=
"special">{
</span><span class=
"identifier">in_place_init_if
</span><span class=
"special">,
</span> <span class=
"keyword">false
</span><span class=
"special">,
</span> <span class=
"number">3</span><span class=
"special">,
</span> <span class=
"string">"A"</span><span class=
"special">};
</span>
486 <span class=
"identifier">assert
</span> <span class=
"special">(!
</span><span class=
"identifier">ov1
</span><span class=
"special">);
</span>
488 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">vector
</span><span class=
"special"><</span><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">string
</span><span class=
"special">>></span> <span class=
"identifier">ov2
</span> <span class=
"special">{
</span><span class=
"identifier">in_place_init_if
</span><span class=
"special">,
</span> <span class=
"keyword">true
</span><span class=
"special">,
</span> <span class=
"number">3</span><span class=
"special">,
</span> <span class=
"string">"A"</span><span class=
"special">};
</span>
489 <span class=
"identifier">assert
</span> <span class=
"special">(
</span><span class=
"identifier">ov2
</span><span class=
"special">);
</span>
490 <span class=
"identifier">assert
</span> <span class=
"special">(
</span><span class=
"identifier">ov2
</span><span class=
"special">-
></span><span class=
"identifier">size
</span><span class=
"special">()
</span> <span class=
"special">==
</span> <span class=
"number">3</span><span class=
"special">);
</span>
495 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
497 <a name=
"reference_optional_constructor_factory"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
498 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">InPlaceFactory
</span><span class=
"special">></span>
499 <span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span> <span class=
"identifier">InPlaceFactory
</span>
500 <span class=
"keyword">const
</span><span class=
"special">&</span>
501 <span class=
"identifier">f
</span> <span class=
"special">);
</span></code>
502 </p></blockquote></div>
503 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
504 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">TypedInPlaceFactory
</span><span class=
"special">></span>
505 <span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">optional
</span><span class=
"special">(
</span> <span class=
"identifier">TypedInPlaceFactory
</span>
506 <span class=
"keyword">const
</span><span class=
"special">&</span>
507 <span class=
"identifier">f
</span> <span class=
"special">);
</span></code>
508 </p></blockquote></div>
509 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
510 <li class=
"listitem">
511 <span class=
"bold"><strong>Effect:
</strong></span> Constructs an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code> with a value of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code> obtained from the factory.
513 <li class=
"listitem">
514 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">initialized
</span>
515 and its value is
<span class=
"emphasis"><em>directly given
</em></span> from the factory
516 <code class=
"computeroutput"><span class=
"identifier">f
</span></code> (i.e., the value
517 <span class=
"underline">is not copied
</span>).
519 <li class=
"listitem">
520 <span class=
"bold"><strong>Throws:
</strong></span> Whatever the
<code class=
"computeroutput"><span class=
"identifier">T
</span></code> constructor called by the factory
523 <li class=
"listitem">
524 <span class=
"bold"><strong>Notes:
</strong></span> See
<a class=
"link" href=
"../../tutorial/in_place_factories.html" title=
"In-Place Factories">In-Place
527 <li class=
"listitem">
528 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
529 be thrown during the call to the
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
530 constructor used by the factory; in that case, this constructor has
533 <li class=
"listitem">
534 <span class=
"bold"><strong>Example:
</strong></span>
535 <pre class=
"programlisting"><span class=
"keyword">class
</span> <span class=
"identifier">C
</span> <span class=
"special">{
</span> <span class=
"identifier">C
</span> <span class=
"special">(
</span> <span class=
"keyword">char
</span><span class=
"special">,
</span> <span class=
"keyword">double
</span><span class=
"special">,
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">string
</span> <span class=
"special">)
</span> <span class=
"special">;
</span> <span class=
"special">}
</span> <span class=
"special">;
</span>
537 <span class=
"identifier">C
</span> <span class=
"identifier">v
</span><span class=
"special">(
</span><span class=
"char">'A'
</span><span class=
"special">,
</span><span class=
"number">123.4</span><span class=
"special">,
</span><span class=
"string">"hello"</span><span class=
"special">);
</span>
539 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">C
</span><span class=
"special">></span> <span class=
"identifier">x
</span><span class=
"special">(
</span> <span class=
"identifier">in_place
</span> <span class=
"special">(
</span><span class=
"char">'A'
</span><span class=
"special">,
</span> <span class=
"number">123.4</span><span class=
"special">,
</span> <span class=
"string">"hello"</span><span class=
"special">)
</span> <span class=
"special">);
</span> <span class=
"comment">// InPlaceFactory used
</span>
540 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">C
</span><span class=
"special">></span> <span class=
"identifier">y
</span><span class=
"special">(
</span> <span class=
"identifier">in_place
</span><span class=
"special"><</span><span class=
"identifier">C
</span><span class=
"special">>(
</span><span class=
"char">'A'
</span><span class=
"special">,
</span> <span class=
"number">123.4</span><span class=
"special">,
</span> <span class=
"string">"hello"</span><span class=
"special">)
</span> <span class=
"special">);
</span> <span class=
"comment">// TypedInPlaceFactory used
</span>
542 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">x
</span> <span class=
"special">==
</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
543 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">y
</span> <span class=
"special">==
</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
548 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
550 <a name=
"reference_optional_operator_equal_none_t"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
551 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special">&</span>
552 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">none_t
</span>
553 <span class=
"special">)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span></code>
554 </p></blockquote></div>
555 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
556 <li class=
"listitem">
557 <span class=
"bold"><strong>Effect:
</strong></span> If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized destroys its contained
560 <li class=
"listitem">
561 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is uninitialized.
565 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
567 <a name=
"reference_optional_operator_equal_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
568 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special">&</span>
569 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">rhs
</span> <span class=
"special">)
</span> <span class=
"special">;
</span></code>
570 </p></blockquote></div>
571 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
572 <li class=
"listitem">
573 <span class=
"bold"><strong>Effect:
</strong></span> Assigns the value
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code> to an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
575 <li class=
"listitem">
576 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized and its value is
577 a
<span class=
"emphasis"><em>copy
</em></span> of
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>.
579 <li class=
"listitem">
580 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span>
581 <span class=
"special">)
</span></code> or
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&)
</span></code>
584 <li class=
"listitem">
585 <span class=
"bold"><strong>Notes:
</strong></span> If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> was initialized,
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s assignment operator is used,
586 otherwise, its copy-constructor is used.
588 <li class=
"listitem">
589 <span class=
"bold"><strong>Exception Safety:
</strong></span> In the event of
590 an exception, the initialization state of
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is unchanged and its value unspecified
591 as far as
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>
592 is concerned (it is up to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
593 <code class=
"computeroutput"><span class=
"keyword">operator
</span><span class=
"special">=()
</span></code>).
594 If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
595 is initially uninitialized and
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
596 <span class=
"emphasis"><em>copy constructor
</em></span> fails,
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is left properly uninitialized.
598 <li class=
"listitem">
599 <span class=
"bold"><strong>Example:
</strong></span>
600 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">x
</span><span class=
"special">;
</span>
601 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
602 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">x
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
604 <span class=
"identifier">T
</span> <span class=
"identifier">y
</span><span class=
"special">;
</span>
605 <span class=
"identifier">def
</span> <span class=
"special">=
</span> <span class=
"identifier">y
</span> <span class=
"special">;
</span>
606 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">def
</span> <span class=
"special">==
</span> <span class=
"identifier">y
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
607 <span class=
"identifier">opt
</span> <span class=
"special">=
</span> <span class=
"identifier">y
</span> <span class=
"special">;
</span>
608 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">==
</span> <span class=
"identifier">y
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
613 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
615 <a name=
"reference_optional_operator_move_equal_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
616 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special">&</span>
617 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"identifier">rhs
</span>
618 <span class=
"special">)
</span> <span class=
"special">;
</span></code>
619 </p></blockquote></div>
620 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
621 <li class=
"listitem">
622 <span class=
"bold"><strong>Effect:
</strong></span> Moves the value
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code> to an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>.
624 <li class=
"listitem">
625 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized and its value is
626 moved from
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>.
628 <li class=
"listitem">
629 <span class=
"bold"><strong>Throws:
</strong></span> Whatever
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">T
</span><span class=
"special">&&</span> <span class=
"special">)
</span></code>
630 or
<code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">::
</span><span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"identifier">T
</span> <span class=
"special">&&)
</span></code>
633 <li class=
"listitem">
634 <span class=
"bold"><strong>Notes:
</strong></span> If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> was initialized,
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s move-assignment operator is used,
635 otherwise, its move-constructor is used.
637 <li class=
"listitem">
638 <span class=
"bold"><strong>Exception Safety:
</strong></span> In the event of
639 an exception, the initialization state of
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is unchanged and its value unspecified
640 as far as
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>
641 is concerned (it is up to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
642 <code class=
"computeroutput"><span class=
"keyword">operator
</span><span class=
"special">=()
</span></code>).
643 If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
644 is initially uninitialized and
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
645 <span class=
"emphasis"><em>move constructor
</em></span> fails,
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is left properly uninitialized.
647 <li class=
"listitem">
648 <span class=
"bold"><strong>Example:
</strong></span>
649 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">x
</span><span class=
"special">;
</span>
650 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
651 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">x
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
653 <span class=
"identifier">T
</span> <span class=
"identifier">y1
</span><span class=
"special">,
</span> <span class=
"identifier">y2
</span><span class=
"special">,
</span> <span class=
"identifier">yR
</span><span class=
"special">;
</span>
654 <span class=
"identifier">def
</span> <span class=
"special">=
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">y1
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
655 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">def
</span> <span class=
"special">==
</span> <span class=
"identifier">yR
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
656 <span class=
"identifier">opt
</span> <span class=
"special">=
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">y2
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
657 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">==
</span> <span class=
"identifier">yR
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
662 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
664 <a name=
"reference_optional_operator_equal_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
665 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special">&</span>
666 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">optional
</span>
667 <span class=
"keyword">const
</span><span class=
"special">&</span>
668 <span class=
"identifier">rhs
</span> <span class=
"special">)
</span>
669 <span class=
"special">;
</span></code>
670 </p></blockquote></div>
671 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
672 <li class=
"listitem">
673 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
674 is
<a href=
"../../../../../../utility/CopyConstructible.html" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">CopyConstructible
</span></code></a> and
<code class=
"computeroutput"><span class=
"identifier">CopyAssignable
</span></code>.
676 <li class=
"listitem">
678 <span class=
"bold"><strong>Effects:
</strong></span>
680 <div class=
"informaltable"><table class=
"table">
686 <thead><tr></tr></thead>
693 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> contains a value
</strong></span>
698 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> does not contain a value
</strong></span>
705 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
706 contains a value
</strong></span>
711 assigns
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code>
712 to the contained value
717 initializes the contained value as if direct-initializing
718 an object of type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
719 with
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code>
726 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
727 does not contain a value
</strong></span>
732 destroys the contained value by calling
<code class=
"computeroutput"><span class=
"identifier">val
</span><span class=
"special">-
></span><span class=
"identifier">T
</span><span class=
"special">::~
</span><span class=
"identifier">T
</span><span class=
"special">()
</span></code>
744 <li class=
"listitem">
745 <span class=
"bold"><strong>Returns:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>;
747 <li class=
"listitem">
748 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span> <span class=
"special">==
</span> <span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span></code>.
750 <li class=
"listitem">
751 <span class=
"bold"><strong>Exception Safety:
</strong></span> If any exception
752 is thrown, the initialization state of
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> and
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
753 remains unchanged. If an exception is thrown during the call to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s copy constructor, no effect.
754 If an exception is thrown during the call to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
755 copy assignment, the state of its contained value is as defined by
756 the exception safety guarantee of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
759 <li class=
"listitem">
760 <span class=
"bold"><strong>Example:
</strong></span>
761 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
762 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span>
763 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
765 <span class=
"identifier">opt
</span> <span class=
"special">=
</span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
766 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">!
</span><span class=
"identifier">def
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
767 <span class=
"comment">// previous value (copy of 'v') destroyed from within 'opt'.
</span>
772 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
774 <a name=
"reference_optional_operator_move_equal_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
775 <code class=
"computeroutput"><span class=
"identifier">optional
</span><span class=
"special">&</span>
776 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">optional
</span><span class=
"special">&&</span> <span class=
"identifier">rhs
</span>
777 <span class=
"special">)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">(
</span></code><span class=
"emphasis"><em>see below
</em></span><code class=
"computeroutput"><span class=
"special">);
</span></code>
778 </p></blockquote></div>
779 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
780 <li class=
"listitem">
781 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
782 is
<code class=
"computeroutput"><span class=
"identifier">MoveConstructible
</span></code>
783 and
<code class=
"computeroutput"><span class=
"identifier">MoveAssignable
</span></code>.
785 <li class=
"listitem">
787 <span class=
"bold"><strong>Effects:
</strong></span>
789 <div class=
"informaltable"><table class=
"table">
795 <thead><tr></tr></thead>
802 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> contains a value
</strong></span>
807 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> does not contain a value
</strong></span>
814 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
815 contains a value
</strong></span>
820 assigns
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(*
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span></code> to the contained value
825 initializes the contained value as if direct-initializing
826 an object of type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
827 with
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(*
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span></code>
834 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
835 does not contain a value
</strong></span>
840 destroys the contained value by calling
<code class=
"computeroutput"><span class=
"identifier">val
</span><span class=
"special">-
></span><span class=
"identifier">T
</span><span class=
"special">::~
</span><span class=
"identifier">T
</span><span class=
"special">()
</span></code>
852 <li class=
"listitem">
853 <span class=
"bold"><strong>Returns:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>;
855 <li class=
"listitem">
856 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span> <span class=
"special">==
</span> <span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span></code>.
858 <li class=
"listitem">
859 <span class=
"bold"><strong>Remarks:
</strong></span> The expression inside
<code class=
"computeroutput"><span class=
"keyword">noexcept
</span></code> is equivalent to
<code class=
"computeroutput"><span class=
"identifier">is_nothrow_move_constructible
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span> <span class=
"special">&&</span>
860 <span class=
"identifier">is_nothrow_move_assignable
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span></code>.
862 <li class=
"listitem">
863 <span class=
"bold"><strong>Exception Safety:
</strong></span> If any exception
864 is thrown, the initialization state of
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> and
<code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
865 remains unchanged. If an exception is thrown during the call to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s move constructor, the state of
866 <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code>
867 is determined by the exception safety guarantee of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
868 move constructor. If an exception is thrown during the call to T's
869 move-assignment, the state of
<code class=
"computeroutput"><span class=
"special">**
</span><span class=
"keyword">this
</span></code> and
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code> is determined by the exception
870 safety guarantee of T's move assignment.
872 <li class=
"listitem">
873 <span class=
"bold"><strong>Example:
</strong></span>
874 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">))
</span> <span class=
"special">;
</span>
875 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
877 <span class=
"identifier">opt
</span> <span class=
"special">=
</span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
878 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">def
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
879 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">opt
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
880 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">==
</span> <span class=
"identifier">T
</span><span class=
"special">(
</span><span class=
"number">2</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
885 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
887 <a name=
"reference_optional_operator_equal_other_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
888 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"identifier">optional
</span><span class=
"special">&</span>
889 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">rhs
</span>
890 <span class=
"special">)
</span> <span class=
"special">;
</span></code>
891 </p></blockquote></div>
892 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
893 <li class=
"listitem">
895 <span class=
"bold"><strong>Effect:
</strong></span>
897 <div class=
"informaltable"><table class=
"table">
903 <thead><tr></tr></thead>
910 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> contains a value
</strong></span>
915 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> does not contain a value
</strong></span>
922 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
923 contains a value
</strong></span>
928 assigns
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code>
929 to the contained value
934 initializes the contained value as if direct-initializing
935 an object of type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
936 with
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"identifier">rhs
</span></code>
943 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
944 does not contain a value
</strong></span>
949 destroys the contained value by calling
<code class=
"computeroutput"><span class=
"identifier">val
</span><span class=
"special">-
></span><span class=
"identifier">T
</span><span class=
"special">::~
</span><span class=
"identifier">T
</span><span class=
"special">()
</span></code>
961 <li class=
"listitem">
962 <span class=
"bold"><strong>Returns:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>.
964 <li class=
"listitem">
965 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span> <span class=
"special">==
</span> <span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span></code>.
967 <li class=
"listitem">
968 <span class=
"bold"><strong>Exception Safety:
</strong></span> If any exception
969 is thrown, the result of the expression
<code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span></code> remains unchanged. If an exception
970 is thrown during the call to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
971 constructor, no effect. If an exception is thrown during the call to
972 <code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s assignment, the
973 state of its contained value is as defined by the exception safety
974 guarantee of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s copy
977 <li class=
"listitem">
978 <span class=
"bold"><strong>Example:
</strong></span>
979 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
980 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt0
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span>
981 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"identifier">opt1
</span><span class=
"special">;
</span>
983 <span class=
"identifier">opt1
</span> <span class=
"special">=
</span> <span class=
"identifier">opt0
</span> <span class=
"special">;
</span>
984 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt1
</span> <span class=
"special">==
</span> <span class=
"keyword">static_cast
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>(
</span><span class=
"identifier">v
</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
989 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
991 <a name=
"reference_optional_operator_move_equal_other_optional"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
992 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"identifier">optional
</span><span class=
"special">&</span>
993 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=
</span> <span class=
"special">(
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>&&</span> <span class=
"identifier">rhs
</span>
994 <span class=
"special">)
</span> <span class=
"special">;
</span></code>
995 </p></blockquote></div>
996 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
997 <li class=
"listitem">
999 <span class=
"bold"><strong>Effect:
</strong></span>
1001 <div class=
"informaltable"><table class=
"table">
1007 <thead><tr></tr></thead>
1014 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> contains a value
</strong></span>
1019 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> does not contain a value
</strong></span>
1026 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
1027 contains a value
</strong></span>
1032 assigns
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(*
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span></code> to the contained value
1037 initializes the contained value as if direct-initializing
1038 an object of type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1039 with
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(*
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span></code>
1046 <span class=
"bold"><strong><code class=
"computeroutput"><span class=
"identifier">rhs
</span></code>
1047 does not contain a value
</strong></span>
1052 destroys the contained value by calling
<code class=
"computeroutput"><span class=
"identifier">val
</span><span class=
"special">-
></span><span class=
"identifier">T
</span><span class=
"special">::~
</span><span class=
"identifier">T
</span><span class=
"special">()
</span></code>
1064 <li class=
"listitem">
1065 <span class=
"bold"><strong>Returns:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>.
1067 <li class=
"listitem">
1068 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(
</span><span class=
"identifier">rhs
</span><span class=
"special">)
</span> <span class=
"special">==
</span> <span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span></code>.
1070 <li class=
"listitem">
1071 <span class=
"bold"><strong>Exception Safety:
</strong></span> If any exception
1072 is thrown, the result of the expression
<code class=
"computeroutput"><span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span></code> remains unchanged. If an exception
1073 is thrown during the call to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s
1074 constructor, no effect. If an exception is thrown during the call to
1075 <code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s assignment, the
1076 state of its contained value is as defined by the exception safety
1077 guarantee of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s copy
1080 <li class=
"listitem">
1081 <span class=
"bold"><strong>Example:
</strong></span>
1082 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
1083 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt0
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span>
1084 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"identifier">opt1
</span><span class=
"special">;
</span>
1086 <span class=
"identifier">opt1
</span> <span class=
"special">=
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(
</span><span class=
"identifier">opt0
</span><span class=
"special">)
</span> <span class=
"special">;
</span>
1087 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">opt0
</span> <span class=
"special">);
</span>
1088 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">opt1
</span> <span class=
"special">)
</span>
1089 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt1
</span> <span class=
"special">==
</span> <span class=
"keyword">static_cast
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>(
</span><span class=
"identifier">v
</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1094 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1096 <a name=
"reference_optional_emplace"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1097 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span><span class=
"special">...
</span> <span class=
"identifier">Args
</span><span class=
"special">></span>
1098 <span class=
"keyword">void
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">emplace
</span><span class=
"special">(
</span> <span class=
"identifier">Args
</span><span class=
"special">&&...
</span> <span class=
"identifier">args
</span>
1099 <span class=
"special">);
</span></code>
1100 </p></blockquote></div>
1101 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1102 <li class=
"listitem">
1103 <span class=
"bold"><strong>Requires:
</strong></span> The compiler supports rvalue
1104 references and variadic templates.
1106 <li class=
"listitem">
1107 <span class=
"bold"><strong>Effect:
</strong></span> If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized calls
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span> <span class=
"special">=
</span> <span class=
"identifier">none
</span></code>.
1108 Then initializes in-place the contained value as if direct-initializing
1109 an object of type
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1110 with
<code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">forward
</span><span class=
"special"><</span><span class=
"identifier">Args
</span><span class=
"special">>(
</span><span class=
"identifier">args
</span><span class=
"special">)...
</span></code>.
1112 <li class=
"listitem">
1113 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">initialized
</span>.
1115 <li class=
"listitem">
1116 <span class=
"bold"><strong>Throws:
</strong></span> Whatever the selected
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>'s constructor throws.
1118 <li class=
"listitem">
1119 <span class=
"bold"><strong>Exception Safety:
</strong></span> If an exception
1120 is thrown during the initialization of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>,
1121 <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
1122 is
<span class=
"emphasis"><em>uninitialized
</em></span>.
1124 <li class=
"listitem">
1125 <span class=
"bold"><strong>Notes:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1126 need not be
<code class=
"computeroutput"><span class=
"identifier">MoveConstructible
</span></code>
1127 or
<code class=
"computeroutput"><span class=
"identifier">MoveAssignable
</span></code>.
1128 On compilers that do not suppor variadic templates or rvalue references,
1129 this function is available in limited functionality. For details
<a class=
"link" href=
"../../dependencies_and_portability/emplace_operations_in_older_compilers.html#optional_emplace_workaround">see here
</a>.
1131 <li class=
"listitem">
1132 <span class=
"bold"><strong>Example:
</strong></span>
1133 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
1134 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">const
</span> <span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">;
</span>
1135 <span class=
"identifier">opt
</span><span class=
"special">.
</span><span class=
"identifier">emplace
</span><span class=
"special">(
</span><span class=
"number">0</span><span class=
"special">);
</span> <span class=
"comment">// create in-place using ctor T(int)
</span>
1136 <span class=
"identifier">opt
</span><span class=
"special">.
</span><span class=
"identifier">emplace
</span><span class=
"special">();
</span> <span class=
"comment">// destroy previous and default-construct another T
</span>
1137 <span class=
"identifier">opt
</span><span class=
"special">.
</span><span class=
"identifier">emplace
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span> <span class=
"comment">// destroy and copy-construct in-place (no assignment called)
</span>
1142 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1144 <a name=
"reference_optional_operator_equal_factory"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1145 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">InPlaceFactory
</span><span class=
"special">></span>
1146 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span>
1147 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">InPlaceFactory
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">f
</span> <span class=
"special">);
</span></code>
1148 </p></blockquote></div>
1149 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1150 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"identifier">TypedInPlaceFactory
</span><span class=
"special">></span>
1151 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>&</span>
1152 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">TypedInPlaceFactory
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">f
</span> <span class=
"special">);
</span></code>
1153 </p></blockquote></div>
1154 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1155 <li class=
"listitem">
1156 <span class=
"bold"><strong>Effect:
</strong></span> Assigns an
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>
1157 with a value of
<code class=
"computeroutput"><span class=
"identifier">T
</span></code> obtained
1160 <li class=
"listitem">
1161 <span class=
"bold"><strong>Postconditions:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is
<span class=
"underline">initialized
</span>
1162 and its value is
<span class=
"emphasis"><em>directly given
</em></span> from the factory
1163 <code class=
"computeroutput"><span class=
"identifier">f
</span></code> (i.e., the value
1164 <span class=
"underline">is not copied
</span>).
1166 <li class=
"listitem">
1167 <span class=
"bold"><strong>Throws:
</strong></span> Whatever the
<code class=
"computeroutput"><span class=
"identifier">T
</span></code> constructor called by the factory
1170 <li class=
"listitem">
1171 <span class=
"bold"><strong>Notes:
</strong></span> See
<a class=
"link" href=
"../../tutorial/in_place_factories.html" title=
"In-Place Factories">In-Place
1174 <li class=
"listitem">
1175 <span class=
"bold"><strong>Exception Safety:
</strong></span> Exceptions can only
1176 be thrown during the call to the
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1177 constructor used by the factory; in that case, the
<code class=
"computeroutput"><span class=
"identifier">optional
</span></code>
1178 object will be reset to be
<span class=
"emphasis"><em>uninitialized
</em></span>.
1182 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1184 <a name=
"reference_optional_reset_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1185 <code class=
"computeroutput"><span class=
"keyword">void
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">reset
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span></code>
1186 </p></blockquote></div>
1187 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; "><li class=
"listitem">
1188 <span class=
"bold"><strong>Deprecated:
</strong></span> same as
<code class=
"computeroutput"><span class=
"keyword">operator
</span><span class=
"special">=
</span>
1189 <span class=
"special">(
</span> <span class=
"identifier">T
</span>
1190 <span class=
"keyword">const
</span><span class=
"special">&</span>
1191 <span class=
"identifier">v
</span><span class=
"special">)
</span>
1192 <span class=
"special">;
</span></code>
1195 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1197 <a name=
"reference_optional_reset"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1198 <code class=
"computeroutput"><span class=
"keyword">void
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">reset
</span><span class=
"special">()
</span> <span class=
"keyword">noexcept
</span>
1199 <span class=
"special">;
</span></code>
1200 </p></blockquote></div>
1201 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; "><li class=
"listitem">
1202 <span class=
"bold"><strong>Deprecated:
</strong></span> Same as
<code class=
"computeroutput"><span class=
"keyword">operator
</span><span class=
"special">=(
</span>
1203 <span class=
"identifier">none_t
</span> <span class=
"special">);
</span></code>
1206 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1208 <a name=
"reference_optional_get"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1209 <code class=
"computeroutput"><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">get
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span> <span class=
"special">;
</span></code>
1210 </p></blockquote></div>
1211 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1212 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">&</span>
1213 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">get
</span><span class=
"special">()
</span> <span class=
"special">;
</span></code>
1214 </p></blockquote></div>
1215 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1216 <code class=
"computeroutput"><span class=
"keyword">inline
</span> <span class=
"identifier">T
</span>
1217 <span class=
"keyword">const
</span><span class=
"special">&</span>
1218 <span class=
"identifier">get
</span> <span class=
"special">(
</span>
1219 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"special">)
</span> <span class=
"special">;
</span></code>
1220 </p></blockquote></div>
1221 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1222 <code class=
"computeroutput"><span class=
"keyword">inline
</span> <span class=
"identifier">T
</span><span class=
"special">&</span> <span class=
"identifier">get
</span>
1223 <span class=
"special">(
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"special">&)
</span>
1224 <span class=
"special">;
</span></code>
1225 </p></blockquote></div>
1226 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1227 <li class=
"listitem">
1228 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized
1230 <li class=
"listitem">
1231 <span class=
"bold"><strong>Returns:
</strong></span> A reference to the contained
1234 <li class=
"listitem">
1235 <span class=
"bold"><strong>Throws:
</strong></span> Nothing.
1237 <li class=
"listitem">
1238 <span class=
"bold"><strong>Notes:
</strong></span> The requirement is asserted
1239 via
<code class=
"computeroutput"><span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">()
</span></code>.
1243 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1245 <a name=
"reference_optional_operator_asterisk"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1246 <code class=
"computeroutput"><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">*()
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"special">;
</span></code>
1247 </p></blockquote></div>
1248 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1249 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">&</span>
1250 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">*()
</span>
1251 <span class=
"special">&;
</span></code>
1252 </p></blockquote></div>
1253 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1254 <li class=
"listitem">
1255 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized
1257 <li class=
"listitem">
1258 <span class=
"bold"><strong>Returns:
</strong></span> A reference to the contained
1261 <li class=
"listitem">
1262 <span class=
"bold"><strong>Throws:
</strong></span> Nothing.
1264 <li class=
"listitem">
1265 <span class=
"bold"><strong>Notes:
</strong></span> The requirement is asserted
1266 via
<code class=
"computeroutput"><span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">()
</span></code>.
1267 On compilers that do not support ref-qualifiers on member functions
1268 these two overloads are replaced with the classical two: a
<code class=
"computeroutput"><span class=
"keyword">const
</span></code> and non-
<code class=
"computeroutput"><span class=
"keyword">const
</span></code>
1271 <li class=
"listitem">
1272 <span class=
"bold"><strong>Example:
</strong></span>
1273 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span> <span class=
"special">;
</span>
1274 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span> <span class=
"special">(
</span> <span class=
"identifier">v
</span> <span class=
"special">);
</span>
1275 <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">u
</span> <span class=
"special">=
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span><span class=
"special">;
</span>
1276 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">u
</span> <span class=
"special">==
</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1277 <span class=
"identifier">T
</span> <span class=
"identifier">w
</span> <span class=
"special">;
</span>
1278 <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">=
</span> <span class=
"identifier">w
</span> <span class=
"special">;
</span>
1279 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">==
</span> <span class=
"identifier">w
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1284 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1286 <a name=
"reference_optional_operator_asterisk_move"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1287 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">&&</span>
1288 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">*()
</span>
1289 <span class=
"special">&&;
</span></code>
1290 </p></blockquote></div>
1291 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1292 <li class=
"listitem">
1293 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> contains a value.
1295 <li class=
"listitem">
1296 <span class=
"bold"><strong>Effects:
</strong></span> Equivalent to
<code class=
"computeroutput"><span class=
"keyword">return
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(*
</span><span class=
"identifier">val
</span><span class=
"special">);
</span></code>.
1298 <li class=
"listitem">
1299 <span class=
"bold"><strong>Notes:
</strong></span> The requirement is asserted
1300 via
<code class=
"computeroutput"><span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">()
</span></code>.
1301 On compilers that do not support ref-qualifiers on member functions
1302 this overload is not present.
1306 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1308 <a name=
"reference_optional_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1309 <code class=
"computeroutput"><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"special">;
</span></code>
1310 </p></blockquote></div>
1311 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1312 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">&</span>
1313 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span><span class=
"special">()
</span> <span class=
"special">&</span> <span class=
"special">;
</span></code>
1314 </p></blockquote></div>
1315 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1316 <li class=
"listitem">
1317 <span class=
"bold"><strong>Effects:
</strong></span> Equivalent to
<code class=
"computeroutput"><span class=
"keyword">return
</span> <span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"special">?
</span> <span class=
"special">*
</span><span class=
"identifier">val
</span> <span class=
"special">:
</span> <span class=
"keyword">throw
</span> <span class=
"identifier">bad_optional_access
</span><span class=
"special">();
</span></code>.
1319 <li class=
"listitem">
1320 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1321 ref-qualifiers on member functions these two overloads are replaced
1322 with the classical two: a
<code class=
"computeroutput"><span class=
"keyword">const
</span></code>
1323 and non-
<code class=
"computeroutput"><span class=
"keyword">const
</span></code> member functions.
1325 <li class=
"listitem">
1326 <span class=
"bold"><strong>Example:
</strong></span>
1327 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span> <span class=
"special">;
</span>
1328 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">o0
</span><span class=
"special">,
</span> <span class=
"identifier">o1
</span> <span class=
"special">(
</span> <span class=
"identifier">v
</span> <span class=
"special">);
</span>
1329 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">o1
</span><span class=
"special">.
</span><span class=
"identifier">value
</span><span class=
"special">()
</span> <span class=
"special">==
</span> <span class=
"identifier">v
</span> <span class=
"special">);
</span>
1331 <span class=
"keyword">try
</span> <span class=
"special">{
</span>
1332 <span class=
"identifier">o0
</span><span class=
"special">.
</span><span class=
"identifier">value
</span><span class=
"special">();
</span> <span class=
"comment">// throws
</span>
1333 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"keyword">false
</span> <span class=
"special">);
</span>
1334 <span class=
"special">}
</span>
1335 <span class=
"keyword">catch
</span><span class=
"special">(
</span><span class=
"identifier">bad_optional_access
</span><span class=
"special">&)
</span> <span class=
"special">{
</span>
1336 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"keyword">true
</span> <span class=
"special">);
</span>
1337 <span class=
"special">}
</span>
1342 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1344 <a name=
"reference_optional_value_move"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1345 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">&&</span>
1346 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value
</span><span class=
"special">()
</span> <span class=
"special">&&</span> <span class=
"special">;
</span></code>
1347 </p></blockquote></div>
1348 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1349 <li class=
"listitem">
1350 <span class=
"bold"><strong>Effects:
</strong></span> Equivalent to
<code class=
"computeroutput"><span class=
"keyword">return
</span> <span class=
"keyword">bool
</span><span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"special">?
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(*
</span><span class=
"identifier">val
</span><span class=
"special">)
</span> <span class=
"special">:
</span> <span class=
"keyword">throw
</span> <span class=
"identifier">bad_optional_access
</span><span class=
"special">();
</span></code>.
1352 <li class=
"listitem">
1353 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1354 ref-qualifiers on member functions this overload is not present.
1358 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1360 <a name=
"reference_optional_value_or"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1361 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"identifier">T
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value_or
</span><span class=
"special">(
</span><span class=
"identifier">U
</span> <span class=
"special">&&</span>
1362 <span class=
"identifier">v
</span><span class=
"special">)
</span>
1363 <span class=
"keyword">const
</span><span class=
"special">&</span>
1364 <span class=
"special">;
</span></code>
1365 </p></blockquote></div>
1366 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1367 <li class=
"listitem">
1368 <span class=
"bold"><strong>Effects:
</strong></span> Equivalent to
<code class=
"computeroutput"><span class=
"keyword">if
</span> <span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"keyword">return
</span> <span class=
"special">**
</span><span class=
"keyword">this
</span><span class=
"special">;
</span> <span class=
"keyword">else
</span> <span class=
"keyword">return
</span>
1369 <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">forward
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span></code>.
1371 <li class=
"listitem">
1372 <span class=
"bold"><strong>Remarks:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1373 is not
<a href=
"../../../../../../utility/CopyConstructible.html" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">CopyConstructible
</span></code></a> or
<code class=
"computeroutput"><span class=
"identifier">U
</span> <span class=
"special">&&</span></code>
1374 is not convertible to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>,
1375 the program is ill-formed.
1377 <li class=
"listitem">
1378 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1379 ref-qualifiers on member functions this overload is replaced with the
1380 <code class=
"computeroutput"><span class=
"keyword">const
</span></code>-qualified member
1381 function. On compilers without rvalue reference support the type of
1382 <code class=
"computeroutput"><span class=
"identifier">v
</span></code> becomes
<code class=
"computeroutput"><span class=
"identifier">U
</span> <span class=
"keyword">const
</span><span class=
"special">&</span></code>.
1386 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1388 <a name=
"reference_optional_value_or_move"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1389 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">U
</span><span class=
"special">></span> <span class=
"identifier">T
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value_or
</span><span class=
"special">(
</span><span class=
"identifier">U
</span> <span class=
"special">&&</span>
1390 <span class=
"identifier">v
</span><span class=
"special">)
</span>
1391 <span class=
"special">&&</span> <span class=
"special">;
</span></code>
1392 </p></blockquote></div>
1393 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1394 <li class=
"listitem">
1395 <span class=
"bold"><strong>Effects:
</strong></span> Equivalent to
<code class=
"computeroutput"><span class=
"keyword">if
</span> <span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"keyword">return
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(**
</span><span class=
"keyword">this
</span><span class=
"special">);
</span> <span class=
"keyword">else
</span> <span class=
"keyword">return
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">forward
</span><span class=
"special"><</span><span class=
"identifier">U
</span><span class=
"special">>(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span></code>.
1397 <li class=
"listitem">
1398 <span class=
"bold"><strong>Remarks:
</strong></span> If
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1399 is not
<code class=
"computeroutput"><span class=
"identifier">MoveConstructible
</span></code>
1400 or
<code class=
"computeroutput"><span class=
"identifier">U
</span> <span class=
"special">&&</span></code>
1401 is not convertible to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>,
1402 the program is ill-formed.
1404 <li class=
"listitem">
1405 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1406 ref-qualifiers on member functions this overload is not present.
1410 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1412 <a name=
"reference_optional_value_or_call"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1413 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">F
</span><span class=
"special">></span> <span class=
"identifier">T
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value_or_eval
</span><span class=
"special">(
</span><span class=
"identifier">F
</span> <span class=
"identifier">f
</span><span class=
"special">)
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"special">;
</span></code>
1414 </p></blockquote></div>
1415 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1416 <li class=
"listitem">
1417 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1418 is
<a href=
"../../../../../../utility/CopyConstructible.html" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">CopyConstructible
</span></code></a> and
<code class=
"computeroutput"><span class=
"identifier">F
</span></code> models a
<a href=
"http://www.sgi.com/tech/stl/Generator.html" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">Generator
</span></code></a> whose result type
1419 is convertible to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>.
1421 <li class=
"listitem">
1422 <span class=
"bold"><strong>Effects:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">if
</span>
1423 <span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"keyword">return
</span> <span class=
"special">**
</span><span class=
"keyword">this
</span><span class=
"special">;
</span> <span class=
"keyword">else
</span> <span class=
"keyword">return
</span> <span class=
"identifier">f
</span><span class=
"special">();
</span></code>.
1425 <li class=
"listitem">
1426 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1427 ref-qualifiers on member functions this overload is replaced with the
1428 <code class=
"computeroutput"><span class=
"keyword">const
</span></code>-qualified member
1431 <li class=
"listitem">
1432 <span class=
"bold"><strong>Example:
</strong></span>
1433 <pre class=
"programlisting"><span class=
"keyword">int
</span> <span class=
"identifier">complain_and_0
</span><span class=
"special">()
</span>
1434 <span class=
"special">{
</span>
1435 <span class=
"identifier">clog
</span> <span class=
"special"><<</span> <span class=
"string">"no value returned, using default"</span> <span class=
"special"><<</span> <span class=
"identifier">endl
</span><span class=
"special">;
</span>
1436 <span class=
"keyword">return
</span> <span class=
"number">0</span><span class=
"special">;
</span>
1437 <span class=
"special">}
</span>
1439 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">int
</span><span class=
"special">></span> <span class=
"identifier">o1
</span> <span class=
"special">=
</span> <span class=
"number">1</span><span class=
"special">;
</span>
1440 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"keyword">int
</span><span class=
"special">></span> <span class=
"identifier">oN
</span> <span class=
"special">=
</span> <span class=
"identifier">none
</span><span class=
"special">;
</span>
1442 <span class=
"keyword">int
</span> <span class=
"identifier">i
</span> <span class=
"special">=
</span> <span class=
"identifier">o1
</span><span class=
"special">.
</span><span class=
"identifier">value_or_eval
</span><span class=
"special">(
</span><span class=
"identifier">complain_and_0
</span><span class=
"special">);
</span> <span class=
"comment">// fun not called
</span>
1443 <span class=
"identifier">assert
</span> <span class=
"special">(
</span><span class=
"identifier">i
</span> <span class=
"special">==
</span> <span class=
"number">1</span><span class=
"special">);
</span>
1445 <span class=
"keyword">int
</span> <span class=
"identifier">j
</span> <span class=
"special">=
</span> <span class=
"identifier">oN
</span><span class=
"special">.
</span><span class=
"identifier">value_or_eval
</span><span class=
"special">(
</span><span class=
"identifier">complain_and_0
</span><span class=
"special">);
</span> <span class=
"comment">// fun called
</span>
1446 <span class=
"identifier">assert
</span> <span class=
"special">(
</span><span class=
"identifier">i
</span> <span class=
"special">==
</span> <span class=
"number">0</span><span class=
"special">);
</span>
1451 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1453 <a name=
"reference_optional_value_or_call_move"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1454 <code class=
"computeroutput"><span class=
"keyword">template
</span><span class=
"special"><</span><span class=
"keyword">class
</span> <span class=
"identifier">F
</span><span class=
"special">></span> <span class=
"identifier">T
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">value_or_eval
</span><span class=
"special">(
</span><span class=
"identifier">F
</span> <span class=
"identifier">f
</span><span class=
"special">)
</span> <span class=
"special">&&</span>
1455 <span class=
"special">;
</span></code>
1456 </p></blockquote></div>
1457 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1458 <li class=
"listitem">
1459 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">T
</span></code>
1460 is
<code class=
"computeroutput"><span class=
"identifier">MoveConstructible
</span></code>
1461 and
<code class=
"computeroutput"><span class=
"identifier">F
</span></code> models a
<a href=
"http://www.sgi.com/tech/stl/Generator.html" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">Generator
</span></code></a>
1462 whose result type is convertible to
<code class=
"computeroutput"><span class=
"identifier">T
</span></code>.
1464 <li class=
"listitem">
1465 <span class=
"bold"><strong>Effects:
</strong></span> <code class=
"computeroutput"><span class=
"keyword">if
</span>
1466 <span class=
"special">(*
</span><span class=
"keyword">this
</span><span class=
"special">)
</span> <span class=
"keyword">return
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">move
</span><span class=
"special">(**
</span><span class=
"keyword">this
</span><span class=
"special">);
</span> <span class=
"keyword">else
</span> <span class=
"keyword">return
</span>
1467 <span class=
"identifier">f
</span><span class=
"special">();
</span></code>.
1469 <li class=
"listitem">
1470 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1471 ref-qualifiers on member functions this overload is not present.
1475 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1477 <a name=
"reference_optional_get_value_or_value"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1478 <code class=
"computeroutput"><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">get_value_or
</span><span class=
"special">(
</span> <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"keyword">default
</span><span class=
"special">)
</span> <span class=
"keyword">const
</span> <span class=
"special">;
</span></code>
1479 </p></blockquote></div>
1480 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1481 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">&</span>
1482 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">get_value_or
</span><span class=
"special">(
</span>
1483 <span class=
"identifier">T
</span><span class=
"special">&</span>
1484 <span class=
"keyword">default
</span> <span class=
"special">)
</span>
1485 <span class=
"special">;
</span></code>
1486 </p></blockquote></div>
1487 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1488 <li class=
"listitem">
1489 <span class=
"bold"><strong>Deprecated:
</strong></span> Use
<code class=
"computeroutput"><span class=
"identifier">value_or
</span><span class=
"special">()
</span></code> instead.
1491 <li class=
"listitem">
1492 <span class=
"bold"><strong>Returns:
</strong></span> A reference to the contained
1493 value, if any, or
<code class=
"computeroutput"><span class=
"keyword">default
</span></code>.
1495 <li class=
"listitem">
1496 <span class=
"bold"><strong>Throws:
</strong></span> Nothing.
1498 <li class=
"listitem">
1499 <span class=
"bold"><strong>Example:
</strong></span>
1500 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">,
</span> <span class=
"identifier">z
</span> <span class=
"special">;
</span>
1501 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span><span class=
"special">;
</span>
1502 <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">y
</span> <span class=
"special">=
</span> <span class=
"identifier">def
</span><span class=
"special">.
</span><span class=
"identifier">get_value_or
</span><span class=
"special">(
</span><span class=
"identifier">z
</span><span class=
"special">);
</span>
1503 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">y
</span> <span class=
"special">==
</span> <span class=
"identifier">z
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1505 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span> <span class=
"special">(
</span> <span class=
"identifier">v
</span> <span class=
"special">);
</span>
1506 <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">u
</span> <span class=
"special">=
</span> <span class=
"identifier">opt
</span><span class=
"special">.
</span><span class=
"identifier">get_value_or
</span><span class=
"special">(
</span><span class=
"identifier">z
</span><span class=
"special">);
</span>
1507 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">u
</span> <span class=
"special">==
</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1508 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">u
</span> <span class=
"special">!=
</span> <span class=
"identifier">z
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1513 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1515 <a name=
"reference_optional_get_ptr"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1516 <code class=
"computeroutput"><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">*
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">get_ptr
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span> <span class=
"special">;
</span></code>
1517 </p></blockquote></div>
1518 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1519 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">*
</span>
1520 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">get_ptr
</span><span class=
"special">()
</span>
1521 <span class=
"special">;
</span></code>
1522 </p></blockquote></div>
1523 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1524 <li class=
"listitem">
1525 <span class=
"bold"><strong>Returns:
</strong></span> If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized, a pointer to the
1526 contained value; else
<code class=
"computeroutput"><span class=
"number">0</span></code>
1527 (
<span class=
"emphasis"><em>null
</em></span>).
1529 <li class=
"listitem">
1530 <span class=
"bold"><strong>Throws:
</strong></span> Nothing.
1532 <li class=
"listitem">
1533 <span class=
"bold"><strong>Notes:
</strong></span> The contained value is permanently
1534 stored within
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>,
1535 so you should not hold nor delete this pointer
1537 <li class=
"listitem">
1538 <span class=
"bold"><strong>Example:
</strong></span>
1539 <pre class=
"programlisting"><span class=
"identifier">T
</span> <span class=
"identifier">v
</span><span class=
"special">;
</span>
1540 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span>
1541 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"keyword">const
</span> <span class=
"identifier">copt
</span><span class=
"special">(
</span><span class=
"identifier">v
</span><span class=
"special">);
</span>
1542 <span class=
"identifier">T
</span><span class=
"special">*
</span> <span class=
"identifier">p
</span> <span class=
"special">=
</span> <span class=
"identifier">opt
</span><span class=
"special">.
</span><span class=
"identifier">get_ptr
</span><span class=
"special">()
</span> <span class=
"special">;
</span>
1543 <span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">*
</span> <span class=
"identifier">cp
</span> <span class=
"special">=
</span> <span class=
"identifier">copt
</span><span class=
"special">.
</span><span class=
"identifier">get_ptr
</span><span class=
"special">();
</span>
1544 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">p
</span> <span class=
"special">==
</span> <span class=
"identifier">get_pointer
</span><span class=
"special">(
</span><span class=
"identifier">opt
</span><span class=
"special">)
</span> <span class=
"special">);
</span>
1545 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">cp
</span> <span class=
"special">==
</span> <span class=
"identifier">get_pointer
</span><span class=
"special">(
</span><span class=
"identifier">copt
</span><span class=
"special">)
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1550 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1552 <a name=
"reference_optional_operator_arrow"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1553 <code class=
"computeroutput"><span class=
"identifier">T
</span> <span class=
"keyword">const
</span><span class=
"special">*
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span>
1554 <span class=
"special">-
>()
</span> <span class=
"keyword">const
</span>
1555 <span class=
"special">;
</span></code>
1556 </p></blockquote></div>
1557 <div class=
"blockquote"><blockquote class=
"blockquote"><p>
1558 <code class=
"computeroutput"><span class=
"identifier">T
</span><span class=
"special">*
</span>
1559 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span> <span class=
"special">-
>()
</span>
1560 <span class=
"special">;
</span></code>
1561 </p></blockquote></div>
1562 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1563 <li class=
"listitem">
1564 <span class=
"bold"><strong>Requires:
</strong></span> <code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is initialized.
1566 <li class=
"listitem">
1567 <span class=
"bold"><strong>Returns:
</strong></span> A pointer to the contained
1570 <li class=
"listitem">
1571 <span class=
"bold"><strong>Throws:
</strong></span> Nothing.
1573 <li class=
"listitem">
1574 <span class=
"bold"><strong>Notes:
</strong></span> The requirement is asserted
1575 via
<code class=
"computeroutput"><span class=
"identifier">BOOST_ASSERT
</span><span class=
"special">()
</span></code>.
1577 <li class=
"listitem">
1578 <span class=
"bold"><strong>Example:
</strong></span>
1579 <pre class=
"programlisting"><span class=
"keyword">struct
</span> <span class=
"identifier">X
</span> <span class=
"special">{
</span> <span class=
"keyword">int
</span> <span class=
"identifier">mdata
</span> <span class=
"special">;
</span> <span class=
"special">}
</span> <span class=
"special">;
</span>
1580 <span class=
"identifier">X
</span> <span class=
"identifier">x
</span> <span class=
"special">;
</span>
1581 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">X
</span><span class=
"special">></span> <span class=
"identifier">opt
</span> <span class=
"special">(
</span><span class=
"identifier">x
</span><span class=
"special">);
</span>
1582 <span class=
"identifier">opt
</span><span class=
"special">-
></span><span class=
"identifier">mdata
</span> <span class=
"special">=
</span> <span class=
"number">2</span> <span class=
"special">;
</span>
1587 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1589 <a name=
"reference_optional_operator_bool"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1590 <code class=
"computeroutput"><span class=
"keyword">explicit
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span>
1591 <span class=
"keyword">bool
</span><span class=
"special">()
</span>
1592 <span class=
"keyword">const
</span> <span class=
"keyword">noexcept
</span>
1593 <span class=
"special">;
</span></code>
1594 </p></blockquote></div>
1595 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1596 <li class=
"listitem">
1597 <span class=
"bold"><strong>Returns:
</strong></span> <code class=
"computeroutput"><span class=
"identifier">get_ptr
</span><span class=
"special">()
</span> <span class=
"special">!=
</span> <span class=
"number">0</span></code>.
1599 <li class=
"listitem">
1600 <span class=
"bold"><strong>Notes:
</strong></span> On compilers that do not support
1601 explicit conversion operators this falls back to safe-bool idiom.
1603 <li class=
"listitem">
1604 <span class=
"bold"><strong>Example:
</strong></span>
1605 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">def
</span> <span class=
"special">;
</span>
1606 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">def
</span> <span class=
"special">==
</span> <span class=
"number">0</span> <span class=
"special">);
</span>
1607 <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span> <span class=
"special">(
</span> <span class=
"identifier">v
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1608 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">opt
</span> <span class=
"special">);
</span>
1609 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"identifier">opt
</span> <span class=
"special">!=
</span> <span class=
"number">0</span> <span class=
"special">);
</span>
1614 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1616 <a name=
"reference_optional_operator_not"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1617 <code class=
"computeroutput"><span class=
"keyword">bool
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"keyword">operator
</span><span class=
"special">!()
</span> <span class=
"keyword">noexcept
</span>
1618 <span class=
"special">;
</span></code>
1619 </p></blockquote></div>
1620 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; ">
1621 <li class=
"listitem">
1622 <span class=
"bold"><strong>Returns:
</strong></span> If
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code> is uninitialized,
<code class=
"computeroutput"><span class=
"keyword">true
</span></code>; else
<code class=
"computeroutput"><span class=
"keyword">false
</span></code>.
1624 <li class=
"listitem">
1625 <span class=
"bold"><strong>Notes:
</strong></span> This operator is provided for
1626 those compilers which can't use the
<span class=
"emphasis"><em>unspecified-bool-type
1627 operator
</em></span> in certain boolean contexts.
1629 <li class=
"listitem">
1630 <span class=
"bold"><strong>Example:
</strong></span>
1631 <pre class=
"programlisting"><span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">></span> <span class=
"identifier">opt
</span> <span class=
"special">;
</span>
1632 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">!
</span><span class=
"identifier">opt
</span> <span class=
"special">);
</span>
1633 <span class=
"special">*
</span><span class=
"identifier">opt
</span> <span class=
"special">=
</span> <span class=
"identifier">some_T
</span> <span class=
"special">;
</span>
1635 <span class=
"comment">// Notice the
"double-bang" idiom here.
</span>
1636 <span class=
"identifier">assert
</span> <span class=
"special">(
</span> <span class=
"special">!!
</span><span class=
"identifier">opt
</span> <span class=
"special">)
</span> <span class=
"special">;
</span>
1641 <span class=
"inlinemediaobject"><img src=
"../../../images/space.png" alt=
"space"></span>
1643 <a name=
"reference_optional_is_initialized"></a><div class=
"blockquote"><blockquote class=
"blockquote"><p>
1644 <code class=
"computeroutput"><span class=
"keyword">bool
</span> <span class=
"identifier">optional
</span><span class=
"special"><</span><span class=
"identifier">T
</span><span class=
"special">>::
</span><span class=
"identifier">is_initialized
</span><span class=
"special">()
</span> <span class=
"keyword">const
</span> <span class=
"special">;
</span></code>
1645 </p></blockquote></div>
1646 <div class=
"itemizedlist"><ul class=
"itemizedlist" style=
"list-style-type: disc; "><li class=
"listitem">
1647 <span class=
"bold"><strong>Deprecated:
</strong></span> Same as
<code class=
"computeroutput"><span class=
"keyword">explicit
</span> <span class=
"keyword">operator
</span>
1648 <span class=
"keyword">bool
</span> <span class=
"special">()
</span>
1649 <span class=
"special">;
</span></code>
1652 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
1653 <td align=
"left"></td>
1654 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2003-
2007 Fernando Luis Cacciola Carballal
<br>Copyright
© 2014-
2016 Andrzej Krzemie
ński
<p>
1655 Distributed under the Boost Software License, Version
1.0. (See accompanying
1656 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>)
1661 <div class=
"spirit-nav">
1662 <a accesskey=
"p" href=
"header_optional_optional_refs.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=
"detailed_semantics___optional_references.html"><img src=
"../../../../../../../doc/src/images/next.png" alt=
"Next"></a>