3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Template promise
<></title>
5 <link rel=
"stylesheet" href=
"../../../../../../../doc/src/boostbook.css" type=
"text/css">
6 <meta name=
"generator" content=
"DocBook XSL Stylesheets V1.75.2">
7 <link rel=
"home" href=
"../../../index.html" title=
"Chapter 1. Fiber">
8 <link rel=
"up" href=
"../futures.html" title=
"Futures">
9 <link rel=
"prev" href=
"future.html" title=
"Future">
10 <link rel=
"next" href=
"packaged_task.html" title=
"Template packaged_task<>">
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=
"future.html"><img src=
"../../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../futures.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=
"packaged_task.html"><img src=
"../../../../../../../doc/src/images/next.png" alt=
"Next"></a>
26 <div class=
"titlepage"><div><div><h4 class=
"title">
27 <a name=
"fiber.synchronization.futures.promise"></a><a name=
"class_promise"></a><a class=
"link" href=
"promise.html" title=
"Template promise<>">Template
28 <code class=
"computeroutput"><span class=
"identifier">promise
</span><span class=
"special"><></span></code></a>
29 </h4></div></div></div>
31 A
<a class=
"link" href=
"promise.html#class_promise"><code class=
"computeroutput">promise
<></code></a> provides a mechanism to store a value (or
32 exception) that can later be retrieved from the corresponding
<a class=
"link" href=
"future.html#class_future"><code class=
"computeroutput">future
<></code></a> object.
33 <code class=
"computeroutput"><span class=
"identifier">promise
</span><span class=
"special"><></span></code>
34 and
<code class=
"computeroutput"><span class=
"identifier">future
</span><span class=
"special"><></span></code>
35 communicate via their underlying
<a class=
"link" href=
"future.html#shared_state">shared state
</a>.
37 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">fiber
</span><span class=
"special">/
</span><span class=
"identifier">future
</span><span class=
"special">/
</span><span class=
"identifier">promise
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
39 <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
40 <span class=
"keyword">namespace
</span> <span class=
"identifier">fibers
</span> <span class=
"special">{
</span>
42 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">R
</span> <span class=
"special">></span>
43 <span class=
"keyword">class
</span> <span class=
"identifier">promise
</span> <span class=
"special">{
</span>
44 <span class=
"keyword">public
</span><span class=
"special">:
</span>
45 <span class=
"identifier">promise
</span><span class=
"special">();
</span>
47 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <a href=
"http://en.cppreference.com/w/cpp/concept/Allocator" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">Allocator
</span></code></a> <span class=
"special">></span>
48 <span class=
"identifier">promise
</span><span class=
"special">(
</span> <a href=
"http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">allocator_arg_t
</span></code></a><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span><span class=
"special">);
</span>
50 <span class=
"identifier">promise
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span> <span class=
"special">&&)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
52 <span class=
"identifier">promise
</span> <span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">promise
</span> <span class=
"special">&&)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
54 <span class=
"identifier">promise
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span> <span class=
"keyword">const
</span><span class=
"special">&)
</span> <span class=
"special">=
</span> <span class=
"keyword">delete
</span><span class=
"special">;
</span>
56 <span class=
"identifier">promise
</span> <span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">promise
</span> <span class=
"keyword">const
</span><span class=
"special">&)
</span> <span class=
"special">=
</span> <span class=
"keyword">delete
</span><span class=
"special">;
</span>
58 <span class=
"special">~
</span><span class=
"identifier">promise
</span><span class=
"special">();
</span>
60 <span class=
"keyword">void
</span> <span class=
"identifier">swap
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span> <span class=
"special">&)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
62 <span class=
"identifier">future
</span><span class=
"special"><</span> <span class=
"identifier">R
</span> <span class=
"special">></span> <span class=
"identifier">get_future
</span><span class=
"special">();
</span>
64 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">(
</span> <span class=
"identifier">R
</span> <span class=
"keyword">const
</span><span class=
"special">&);
</span> <span class=
"comment">// member only of generic promise template
</span>
65 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">(
</span> <span class=
"identifier">R
</span> <span class=
"special">&&);
</span> <span class=
"comment">// member only of generic promise template
</span>
66 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">(
</span> <span class=
"identifier">R
</span> <span class=
"special">&);
</span> <span class=
"comment">// member only of promise
< R
& > template
</span>
67 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">();
</span> <span class=
"comment">// member only of promise
< void
> template
</span>
69 <span class=
"keyword">void
</span> <span class=
"identifier">set_exception
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">exception_ptr
</span> <span class=
"identifier">p
</span><span class=
"special">);
</span>
70 <span class=
"special">};
</span>
72 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">R
</span> <span class=
"special">></span>
73 <span class=
"keyword">void
</span> <span class=
"identifier">swap
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span><span class=
"special"><</span> <span class=
"identifier">R
</span> <span class=
"special">></span> <span class=
"special">&,
</span> <span class=
"identifier">promise
</span><span class=
"special"><</span> <span class=
"identifier">R
</span> <span class=
"special">></span> <span class=
"special">&)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
75 <span class=
"special">}
</span>
78 <a name=
"fiber.synchronization.futures.promise.h0"></a>
79 <span><a name=
"fiber.synchronization.futures.promise.default_constructor"></a></span><a class=
"link" href=
"promise.html#fiber.synchronization.futures.promise.default_constructor">Default
82 <pre class=
"programlisting"><span class=
"identifier">promise
</span><span class=
"special">();
</span>
84 <div class=
"variablelist">
85 <p class=
"title"><b></b></p>
87 <dt><span class=
"term">Effects:
</span></dt>
89 Creates a promise with an empty
<a class=
"link" href=
"future.html#shared_state">shared
92 <dt><span class=
"term">Throws:
</span></dt>
94 Exceptions caused by memory allocation.
99 <a name=
"fiber.synchronization.futures.promise.h1"></a>
100 <span><a name=
"fiber.synchronization.futures.promise.constructor"></a></span><a class=
"link" href=
"promise.html#fiber.synchronization.futures.promise.constructor">Constructor
</a>
102 <pre class=
"programlisting"><span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <a href=
"http://en.cppreference.com/w/cpp/concept/Allocator" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">Allocator
</span></code></a> <span class=
"special">></span>
103 <span class=
"identifier">promise
</span><span class=
"special">(
</span> <a href=
"http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">allocator_arg_t
</span></code></a><span class=
"special">,
</span> <span class=
"identifier">Allocator
</span> <span class=
"identifier">alloc
</span><span class=
"special">);
</span>
105 <div class=
"variablelist">
106 <p class=
"title"><b></b></p>
108 <dt><span class=
"term">Effects:
</span></dt>
110 Creates a promise with an empty
<a class=
"link" href=
"future.html#shared_state">shared
111 state
</a> by using
<code class=
"computeroutput"><span class=
"identifier">alloc
</span></code>.
113 <dt><span class=
"term">Throws:
</span></dt>
115 Exceptions caused by memory allocation.
117 <dt><span class=
"term">See also:
</span></dt>
119 <a href=
"http://en.cppreference.com/w/cpp/memory/allocator_arg_t" target=
"_top"><code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">allocator_arg_t
</span></code></a>
124 <a name=
"fiber.synchronization.futures.promise.h2"></a>
125 <span><a name=
"fiber.synchronization.futures.promise.move_constructor"></a></span><a class=
"link" href=
"promise.html#fiber.synchronization.futures.promise.move_constructor">Move constructor
</a>
127 <pre class=
"programlisting"><span class=
"identifier">promise
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span> <span class=
"special">&&</span> <span class=
"identifier">other
</span><span class=
"special">)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
129 <div class=
"variablelist">
130 <p class=
"title"><b></b></p>
132 <dt><span class=
"term">Effects:
</span></dt>
134 Creates a promise by moving the
<a class=
"link" href=
"future.html#shared_state">shared
135 state
</a> from
<code class=
"computeroutput"><span class=
"identifier">other
</span></code>.
137 <dt><span class=
"term">Postcondition:
</span></dt>
139 <code class=
"computeroutput"><span class=
"identifier">other
</span></code> contains no
142 <dt><span class=
"term">Throws:
</span></dt>
149 <a name=
"fiber.synchronization.futures.promise.h3"></a>
150 <span><a name=
"fiber.synchronization.futures.promise.destructor"></a></span><a class=
"link" href=
"promise.html#fiber.synchronization.futures.promise.destructor">Destructor
</a>
152 <pre class=
"programlisting"><span class=
"special">~
</span><span class=
"identifier">promise
</span><span class=
"special">();
</span>
154 <div class=
"variablelist">
155 <p class=
"title"><b></b></p>
157 <dt><span class=
"term">Effects:
</span></dt>
159 Destroys
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>
160 and abandons the
<a class=
"link" href=
"future.html#shared_state">shared state
</a>
161 if shared state is ready; otherwise stores
<code class=
"computeroutput"><span class=
"identifier">future_error
</span></code>
162 with error condition
<code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">broken_promise
</span></code>
163 as if by
<a class=
"link" href=
"promise.html#promise_set_exception"><code class=
"computeroutput">promise::set_exception()
</code></a>: the shared
171 <a name=
"promise_operator_assign_bridgehead"></a>
172 <span><a name=
"promise_operator_assign"></a></span>
173 <a class=
"link" href=
"promise.html#promise_operator_assign">Member
174 function
<code class=
"computeroutput">operator=
</code>()
</a>
178 <pre class=
"programlisting"><span class=
"identifier">promise
</span> <span class=
"special">&</span> <span class=
"keyword">operator
</span><span class=
"special">=(
</span> <span class=
"identifier">promise
</span> <span class=
"special">&&</span> <span class=
"identifier">other
</span><span class=
"special">)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
180 <div class=
"variablelist">
181 <p class=
"title"><b></b></p>
183 <dt><span class=
"term">Effects:
</span></dt>
185 Transfers the ownership of
<a class=
"link" href=
"future.html#shared_state">shared state
</a>
186 to
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>.
188 <dt><span class=
"term">Postcondition:
</span></dt>
190 <code class=
"computeroutput"><span class=
"identifier">other
</span></code> contains no
193 <dt><span class=
"term">Throws:
</span></dt>
202 <a name=
"promise_swap_bridgehead"></a>
203 <span><a name=
"promise_swap"></a></span>
204 <a class=
"link" href=
"promise.html#promise_swap">Member function
<code class=
"computeroutput">swap
</code>()
</a>
208 <pre class=
"programlisting"><span class=
"keyword">void
</span> <span class=
"identifier">swap
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span> <span class=
"special">&</span> <span class=
"identifier">other
</span><span class=
"special">)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
210 <div class=
"variablelist">
211 <p class=
"title"><b></b></p>
213 <dt><span class=
"term">Effects:
</span></dt>
215 Swaps the
<a class=
"link" href=
"future.html#shared_state">shared state
</a> between
216 other and
<code class=
"computeroutput"><span class=
"special">*
</span><span class=
"keyword">this
</span></code>.
218 <dt><span class=
"term">Throws:
</span></dt>
227 <a name=
"promise_get_future_bridgehead"></a>
228 <span><a name=
"promise_get_future"></a></span>
229 <a class=
"link" href=
"promise.html#promise_get_future">Member
230 function
<code class=
"computeroutput">get_future
</code>()
</a>
234 <pre class=
"programlisting"><span class=
"identifier">future
</span><span class=
"special"><</span> <span class=
"identifier">R
</span> <span class=
"special">></span> <span class=
"identifier">get_future
</span><span class=
"special">();
</span>
236 <div class=
"variablelist">
237 <p class=
"title"><b></b></p>
239 <dt><span class=
"term">Returns:
</span></dt>
241 A
<a class=
"link" href=
"future.html#class_future"><code class=
"computeroutput">future
<></code></a> with the same
<a class=
"link" href=
"future.html#shared_state">shared
244 <dt><span class=
"term">Throws:
</span></dt>
246 <code class=
"computeroutput"><span class=
"identifier">future_error
</span></code> with
247 <code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">future_already_retrieved
</span></code> or
<code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">no_state
</span></code>.
254 <a name=
"promise_set_value_bridgehead"></a>
255 <span><a name=
"promise_set_value"></a></span>
256 <a class=
"link" href=
"promise.html#promise_set_value">Member function
257 <code class=
"computeroutput">set_value
</code>()
</a>
261 <pre class=
"programlisting"><span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">(
</span> <span class=
"identifier">R
</span> <span class=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span> <span class=
"comment">// member only of generic promise template
</span>
262 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">(
</span> <span class=
"identifier">R
</span> <span class=
"special">&&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span> <span class=
"comment">// member only of generic promise template
</span>
263 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">(
</span> <span class=
"identifier">R
</span> <span class=
"special">&</span> <span class=
"identifier">value
</span><span class=
"special">);
</span> <span class=
"comment">// member only of promise
< R
& > template
</span>
264 <span class=
"keyword">void
</span> <span class=
"identifier">set_value
</span><span class=
"special">();
</span> <span class=
"comment">// member only of promise
< void
> template
</span>
266 <div class=
"variablelist">
267 <p class=
"title"><b></b></p>
269 <dt><span class=
"term">Effects:
</span></dt>
271 Store the result in the
<a class=
"link" href=
"future.html#shared_state">shared state
</a>
272 and marks the state as ready.
274 <dt><span class=
"term">Throws:
</span></dt>
276 <code class=
"computeroutput"><span class=
"identifier">future_error
</span></code> with
277 <code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">future_already_satisfied
</span></code> or
<code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">no_state
</span></code>.
284 <a name=
"promise_set_exception_bridgehead"></a>
285 <span><a name=
"promise_set_exception"></a></span>
286 <a class=
"link" href=
"promise.html#promise_set_exception">Member
287 function
<code class=
"computeroutput">set_exception
</code>()
</a>
291 <pre class=
"programlisting"><span class=
"keyword">void
</span> <span class=
"identifier">set_exception
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">exception_ptr
</span><span class=
"special">);
</span>
293 <div class=
"variablelist">
294 <p class=
"title"><b></b></p>
296 <dt><span class=
"term">Effects:
</span></dt>
298 Store an exception pointer in the
<a class=
"link" href=
"future.html#shared_state">shared
299 state
</a> and marks the state as ready.
301 <dt><span class=
"term">Throws:
</span></dt>
303 <code class=
"computeroutput"><span class=
"identifier">future_error
</span></code> with
304 <code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">future_already_satisfied
</span></code> or
<code class=
"computeroutput"><span class=
"identifier">future_errc
</span><span class=
"special">::
</span><span class=
"identifier">no_state
</span></code>.
311 <a name=
"swap_for_promise_bridgehead"></a>
312 <span><a name=
"swap_for_promise"></a></span>
313 <a class=
"link" href=
"promise.html#swap_for_promise">Non-member function
314 <code class=
"computeroutput">swap()
</code></a>
318 <pre class=
"programlisting"><span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">R
</span> <span class=
"special">></span>
319 <span class=
"keyword">void
</span> <span class=
"identifier">swap
</span><span class=
"special">(
</span> <span class=
"identifier">promise
</span><span class=
"special"><</span> <span class=
"identifier">R
</span> <span class=
"special">></span> <span class=
"special">&</span> <span class=
"identifier">l
</span><span class=
"special">,
</span> <span class=
"identifier">promise
</span><span class=
"special"><</span> <span class=
"identifier">R
</span> <span class=
"special">></span> <span class=
"special">&</span> <span class=
"identifier">r
</span><span class=
"special">)
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
321 <div class=
"variablelist">
322 <p class=
"title"><b></b></p>
324 <dt><span class=
"term">Effects:
</span></dt>
326 Same as
<code class=
"computeroutput"><span class=
"identifier">l
</span><span class=
"special">.
</span><span class=
"identifier">swap
</span><span class=
"special">(
</span>
327 <span class=
"identifier">r
</span><span class=
"special">)
</span></code>.
332 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
333 <td align=
"left"></td>
334 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2013 Oliver Kowalke
<p>
335 Distributed under the Boost Software License, Version
1.0. (See accompanying
336 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>)
341 <div class=
"spirit-nav">
342 <a accesskey=
"p" href=
"future.html"><img src=
"../../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../futures.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=
"packaged_task.html"><img src=
"../../../../../../../doc/src/images/next.png" alt=
"Next"></a>