]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/context/doc/html/context/abstract_context/ccontext.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / context / doc / html / context / abstract_context / ccontext.html
CommitLineData
7c673cae
FG
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4<title>Class captured_context</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&#160;1.&#160;Context">
8<link rel="up" href="../abstract_context.html" title="Context classes">
9<link rel="prev" href="econtext.html" title="Class execution_context">
10<link rel="next" href="stack.html" title="Stack allocation">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="econtext.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../abstract_context.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="stack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h3 class="title">
27<a name="context.abstract_context.ccontext"></a><a class="link" href="ccontext.html" title="Class captured_context">Class captured_context</a>
28</h3></div></div></div>
29<div class="important"><table border="0" summary="Important">
30<tr>
31<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../doc/src/images/important.png"></td>
32<th align="left">Important</th>
33</tr>
34<tr><td align="left" valign="top"><p>
35 <span class="emphasis"><em>captured_context</em></span> requires C++11!
36 </p></td></tr>
37</table></div>
38<p>
39 Class <span class="emphasis"><em>captured_context</em></span> encapsulates <span class="emphasis"><em>fcontext_t</em></span>
40 and manages the context' stack (allocation/deallocation).
41 </p>
42<p>
43 <span class="emphasis"><em>captured_context</em></span> allocates the context stack (using
44 its <span class="emphasis"><em>StackAllocator</em></span> argument) and creates a control structure
45 on top of it. This structure controls the life time of the stack. The address
46 of the control structure is stored in the first frame of context' stack (e.g.
47 it can not accessed by instances of <span class="emphasis"><em>captured_context</em></span>
48 directly). In contrast to <span class="emphasis"><em>execution_context</em></span> the ownership
49 of the control structure is not shared A call of<span class="emphasis"><em>captured_context::operator()</em></span>
50 enters the context represented by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and invalidates <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. The context that has been suspended
51 by calling <span class="emphasis"><em>captured_context::operator()</em></span> is passed to
52 the resumed context, e.g. as argument of the context-function if the context
53 was resumed the first time or returned by <span class="emphasis"><em>captured_context::operator()</em></span>.
54 <span class="emphasis"><em>captured_context</em></span> is only move-constructible and move-assignable.
55 If the last reference (<span class="emphasis"><em>captured_context</em></span>) goes out of
56 scope, the control structure is destroyed and the stack gets deallocated
57 via the <span class="emphasis"><em>StackAllocator</em></span>. <span class="emphasis"><em>captured_context</em></span>
58 maintains a static, thread-local pointer (smart pointer), accessed by <span class="emphasis"><em>execution_context::current()</em></span>,
59 pointing to the active context. On each context switch the static, thread-local
60 pointer is updated. This makes the context switch a little bit slower, but
61 enables faster context destruction (stack unwinding) compared to <span class="emphasis"><em>captured_context</em></span>.
62 </p>
63<p>
64 <span class="emphasis"><em>captured_context</em></span> expects a function/functor with signature
65 <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">(</span>
66 <span class="identifier">captured_context</span> <span class="identifier">ctx</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span>
67 <span class="identifier">vp</span><span class="special">)</span></code>.
68 The parameter <code class="computeroutput"><span class="identifier">ctx</span></code> represents
69 the context from which this context was resumed (e.g. that has called <span class="emphasis"><em>captured_context::operator()</em></span>
70 on <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>)
71 and <code class="computeroutput"><span class="identifier">vp</span></code> is the data passed
72 to <span class="emphasis"><em>captured_context::operator()</em></span>. The function/functor
73 has to return the captured_context that has to be resumed, while this context
74 terminates.
75 </p>
76<div class="important"><table border="0" summary="Important">
77<tr>
78<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../doc/src/images/important.png"></td>
79<th align="left">Important</th>
80</tr>
81<tr><td align="left" valign="top"><p>
82 Segemnted stacks are not supported together with <span class="emphasis"><em>captured_context</em></span>.
83 </p></td></tr>
84</table></div>
85<h5>
86<a name="context.abstract_context.ccontext.h0"></a>
87 <span><a name="context.abstract_context.ccontext.usage_of__emphasis_captured_context__emphasis_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.usage_of__emphasis_captured_context__emphasis_">usage
88 of <span class="emphasis"><em>captured_context</em></span></a>
89 </h5>
90<pre class="programlisting"><span class="comment">/*
91 * grammar:
92 * P ---&gt; E '\0'
93 * E ---&gt; T {('+'|'-') T}
94 * T ---&gt; S {('*'|'/') S}
95 * S ---&gt; digit | '(' E ')'
96 */</span>
97<span class="keyword">class</span> <span class="identifier">Parser</span><span class="special">{</span>
98 <span class="comment">// implementation omitted; see examples directory</span>
99<span class="special">};</span>
100
101<span class="identifier">std</span><span class="special">::</span><span class="identifier">istringstream</span> <span class="identifier">is</span><span class="special">(</span><span class="string">"1+1"</span><span class="special">);</span>
102<span class="keyword">bool</span> <span class="identifier">done</span><span class="special">=</span><span class="keyword">false</span><span class="special">;</span>
103<span class="identifier">std</span><span class="special">::</span><span class="identifier">exception_ptr</span> <span class="identifier">except</span><span class="special">;</span>
104
105<span class="comment">// execute parser in new execution context</span>
106<span class="identifier">boost</span><span class="special">::</span><span class="identifier">context</span><span class="special">::</span><span class="identifier">captured_context</span> <span class="identifier">pctx</span><span class="special">(</span>
107 <span class="special">[&amp;</span><span class="identifier">is</span><span class="special">,&amp;</span><span class="identifier">done</span><span class="special">,&amp;</span><span class="identifier">except</span><span class="special">](</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">captured_context</span> <span class="identifier">mctx</span><span class="special">,</span><span class="keyword">void</span><span class="special">*</span> <span class="identifier">ignored</span><span class="special">){</span>
108 <span class="comment">// create parser with callback function</span>
109 <span class="identifier">Parser</span> <span class="identifier">p</span><span class="special">(</span> <span class="identifier">is</span><span class="special">,</span>
110 <span class="special">[&amp;</span><span class="identifier">mctx</span><span class="special">](</span><span class="keyword">char</span> <span class="identifier">ch</span><span class="special">){</span>
111 <span class="comment">// resume main execution context</span>
112 <span class="keyword">auto</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">mctx</span><span class="special">(</span> <span class="special">&amp;</span> <span class="identifier">ch</span><span class="special">);</span>
113 <span class="identifier">mctx</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">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">)</span> <span class="special">);</span>
114 <span class="special">});</span>
115 <span class="keyword">try</span> <span class="special">{</span>
116 <span class="comment">// start recursive parsing</span>
117 <span class="identifier">p</span><span class="special">.</span><span class="identifier">run</span><span class="special">();</span>
118 <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span> <span class="special">...</span> <span class="special">)</span> <span class="special">{</span>
119 <span class="comment">// store other exceptions in exception-pointer</span>
120 <span class="identifier">except</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">current_exception</span><span class="special">();</span>
121 <span class="special">}</span>
122 <span class="comment">// set termination flag</span>
123 <span class="identifier">done</span><span class="special">=</span><span class="keyword">true</span><span class="special">;</span>
124 <span class="comment">// resume main execution context</span>
125 <span class="keyword">return</span> <span class="identifier">mctx</span><span class="special">;</span>
126 <span class="special">});</span>
127
128<span class="comment">// user-code pulls parsed data from parser</span>
129<span class="comment">// invert control flow</span>
130<span class="keyword">auto</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">pctx</span><span class="special">();</span>
131<span class="identifier">pctx</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">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">)</span> <span class="special">);</span>
132<span class="keyword">void</span> <span class="special">*</span> <span class="identifier">vp</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">);</span>
133<span class="keyword">if</span> <span class="special">(</span> <span class="identifier">except</span><span class="special">)</span> <span class="special">{</span>
134 <span class="identifier">std</span><span class="special">::</span><span class="identifier">rethrow_exception</span><span class="special">(</span> <span class="identifier">except</span><span class="special">);</span>
135<span class="special">}</span>
136<span class="keyword">while</span><span class="special">(</span> <span class="special">!</span> <span class="identifier">done</span><span class="special">)</span> <span class="special">{</span>
137 <span class="identifier">printf</span><span class="special">(</span><span class="string">"Parsed: %c\n"</span><span class="special">,*</span> <span class="keyword">static_cast</span><span class="special">&lt;</span> <span class="keyword">char</span><span class="special">*</span> <span class="special">&gt;(</span> <span class="identifier">vp</span><span class="special">)</span> <span class="special">);</span>
138 <span class="identifier">std</span><span class="special">::</span><span class="identifier">tie</span><span class="special">(</span><span class="identifier">pctx</span><span class="special">,</span><span class="identifier">vp</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">pctx</span><span class="special">();</span>
139 <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">except</span><span class="special">)</span> <span class="special">{</span>
140 <span class="identifier">std</span><span class="special">::</span><span class="identifier">rethrow_exception</span><span class="special">(</span> <span class="identifier">except</span><span class="special">);</span>
141 <span class="special">}</span>
142<span class="special">}</span>
143
144<span class="identifier">output</span><span class="special">:</span>
145 <span class="identifier">Parsed</span><span class="special">:</span> <span class="number">1</span>
146 <span class="identifier">Parsed</span><span class="special">:</span> <span class="special">+</span>
147 <span class="identifier">Parsed</span><span class="special">:</span> <span class="number">1</span>
148</pre>
149<p>
150 In this example a recursive descent parser uses a callback to emit a newly
151 passed symbol. Using <span class="emphasis"><em>captured_context</em></span> the control flow
152 can be inverted, e.g. the user-code pulls parsed symbols from the parser
153 - instead to get pushed from the parser (via callback).
154 </p>
155<p>
156 The data (character) is transferred between the two <span class="emphasis"><em>captured_context</em></span>.
157 </p>
158<p>
159 If the code executed by <span class="emphasis"><em>captured_context</em></span> emits an exception,
160 the application is terminated. <span class="emphasis"><em>std::exception_ptr</em></span> can
161 be used to transfer exceptions between different execution contexts.
162 </p>
163<p>
164 Sometimes it is necessary to unwind the stack of an unfinished context to
165 destroy local stack variables so they can release allocated resources (RAII
166 pattern). The user is responsible for this task.
167 </p>
168<h5>
169<a name="context.abstract_context.ccontext.h1"></a>
170 <span><a name="context.abstract_context.ccontext.allocating_control_structures_on_top_of_stack"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.allocating_control_structures_on_top_of_stack">allocating
171 control structures on top of stack</a>
172 </h5>
173<p>
174 Allocating control structures on top of the stack requires to allocated the
175 <span class="emphasis"><em>stack_context</em></span> and create the control structure with
176 placement new before <span class="emphasis"><em>captured_context</em></span> is created.
177 </p>
178<div class="note"><table border="0" summary="Note">
179<tr>
180<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td>
181<th align="left">Note</th>
182</tr>
183<tr><td align="left" valign="top"><p>
184 The user is responsible for destructing the control structure at the top
185 of the stack.
186 </p></td></tr>
187</table></div>
188<pre class="programlisting"><span class="comment">// stack-allocator used for (de-)allocating stack</span>
189<span class="identifier">fixedsize_stack</span> <span class="identifier">salloc</span><span class="special">(</span> <span class="number">4048</span><span class="special">);</span>
190<span class="comment">// allocate stack space</span>
191<span class="identifier">stack_context</span> <span class="identifier">sctx</span><span class="special">(</span> <span class="identifier">salloc</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">()</span> <span class="special">);</span>
192<span class="comment">// reserve space for control structure on top of the stack</span>
193<span class="keyword">void</span> <span class="special">*</span> <span class="identifier">sp</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span> <span class="keyword">char</span> <span class="special">*</span> <span class="special">&gt;(</span> <span class="identifier">sctx</span><span class="special">.</span><span class="identifier">sp</span><span class="special">)</span> <span class="special">-</span> <span class="keyword">sizeof</span><span class="special">(</span> <span class="identifier">my_control_structure</span><span class="special">);</span>
194<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span> <span class="special">=</span> <span class="identifier">sctx</span><span class="special">.</span><span class="identifier">size</span> <span class="special">-</span> <span class="keyword">sizeof</span><span class="special">(</span> <span class="identifier">my_control_structure</span><span class="special">);</span>
195<span class="comment">// placement new creates control structure on reserved space</span>
196<span class="identifier">my_control_structure</span> <span class="special">*</span> <span class="identifier">cs</span> <span class="special">=</span> <span class="keyword">new</span> <span class="special">(</span> <span class="identifier">sp</span><span class="special">)</span> <span class="identifier">my_control_structure</span><span class="special">(</span> <span class="identifier">sp</span><span class="special">,</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">sctx</span><span class="special">,</span> <span class="identifier">salloc</span><span class="special">);</span>
197<span class="special">...</span>
198<span class="comment">// destructing the control structure</span>
199<span class="identifier">cs</span><span class="special">-&gt;~</span><span class="identifier">my_control_structure</span><span class="special">();</span>
200<span class="special">...</span>
201<span class="keyword">struct</span> <span class="identifier">my_control_structure</span> <span class="special">{</span>
202 <span class="comment">// captured context</span>
203 <span class="identifier">captured_context</span> <span class="identifier">cctx</span><span class="special">;</span>
204
205 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">StackAllocator</span> <span class="special">&gt;</span>
206 <span class="identifier">my_control_structure</span><span class="special">(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">sp</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">stack_context</span> <span class="identifier">sctx</span><span class="special">,</span> <span class="identifier">StackAllocator</span> <span class="identifier">salloc</span><span class="special">)</span> <span class="special">:</span>
207 <span class="comment">// create captured context</span>
208 <span class="identifier">cctx</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg</span><span class="special">,</span> <span class="identifier">preallocated</span><span class="special">(</span> <span class="identifier">sp</span><span class="special">,</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">sctx</span><span class="special">),</span> <span class="identifier">salloc</span><span class="special">,</span> <span class="identifier">entry_func</span><span class="special">)</span> <span class="special">{</span>
209 <span class="special">}</span>
210 <span class="special">...</span>
211<span class="special">};</span>
212</pre>
213<h5>
214<a name="context.abstract_context.ccontext.h2"></a>
215 <span><a name="context.abstract_context.ccontext.exception_handling"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.exception_handling">exception
216 handling</a>
217 </h5>
218<p>
219 If the function executed inside a <span class="emphasis"><em>captured_context</em></span> emits
220 ans exception, the application is terminated by calling ['std::terminate().
221 <span class="emphasis"><em>std::exception_ptr</em></span> can be used to transfer exceptions
222 between different execution contexts.
223 </p>
224<h5>
225<a name="context.abstract_context.ccontext.h3"></a>
226 <span><a name="context.abstract_context.ccontext.parameter_passing"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.parameter_passing">parameter
227 passing</a>
228 </h5>
229<p>
230 The void pointer argument passed to <span class="emphasis"><em>captured_context::operator()</em></span>,
231 in one context, is passed as the last argument of the <span class="emphasis"><em>context-function</em></span>
232 if the context is started for the first time. In all following invocations
233 of <span class="emphasis"><em>captured_context::operator()</em></span> the void pointer passed
234 to <span class="emphasis"><em>captured_context::operator()</em></span>, in one context, is
235 returned by <span class="emphasis"><em>captured_context::operator()</em></span> in the other
236 context.
237 </p>
238<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">X</span> <span class="special">{</span>
239<span class="keyword">private</span><span class="special">:</span>
240 <span class="identifier">std</span><span class="special">::</span><span class="identifier">exception_ptr</span> <span class="identifier">excptr_</span><span class="special">;</span>
241 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">context</span><span class="special">::</span><span class="identifier">captured_context</span> <span class="identifier">ctx_</span><span class="special">;</span>
242
243<span class="keyword">public</span><span class="special">:</span>
244 <span class="identifier">X</span><span class="special">()</span> <span class="special">:</span>
245 <span class="identifier">excptr_</span><span class="special">(),</span>
246 <span class="identifier">ctx_</span><span class="special">(</span> <span class="special">[=](</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">captured_context</span> <span class="identifier">ctx</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">vp</span><span class="special">)-&gt;</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">captured_context</span><span class="special">{</span>
247 <span class="keyword">try</span> <span class="special">{</span>
248 <span class="keyword">for</span> <span class="special">(;;)</span> <span class="special">{</span>
249 <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="special">*</span> <span class="keyword">static_cast</span><span class="special">&lt;</span> <span class="keyword">int</span> <span class="special">*</span> <span class="special">&gt;(</span> <span class="identifier">vp</span><span class="special">);</span>
250 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">lexical_cast</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;(</span><span class="identifier">i</span><span class="special">);</span>
251 <span class="keyword">auto</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">ctx</span><span class="special">(</span> <span class="special">&amp;</span> <span class="identifier">str</span><span class="special">);</span>
252 <span class="identifier">ctx</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">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">)</span> <span class="special">);</span>
253 <span class="identifier">vp</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">);</span>
254 <span class="special">}</span>
255 <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">forced_unwind</span> <span class="keyword">const</span><span class="special">&amp;)</span> <span class="special">{</span>
256 <span class="keyword">throw</span><span class="special">;</span>
257 <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(...)</span> <span class="special">{</span>
258 <span class="identifier">excptr_</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">current_exception</span><span class="special">();</span>
259 <span class="special">}</span>
260 <span class="keyword">return</span> <span class="identifier">ctx</span><span class="special">;</span>
261 <span class="special">})</span>
262 <span class="special">{}</span>
263
264 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
265 <span class="keyword">auto</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">ctx_</span><span class="special">(</span> <span class="special">&amp;</span> <span class="identifier">i</span><span class="special">);</span>
266 <span class="identifier">ctx_</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">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">)</span> <span class="special">);</span>
267 <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">ret</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span> <span class="identifier">result</span><span class="special">);</span>
268 <span class="keyword">if</span><span class="special">(</span><span class="identifier">excptr_</span><span class="special">){</span>
269 <span class="identifier">std</span><span class="special">::</span><span class="identifier">rethrow_exception</span><span class="special">(</span><span class="identifier">excptr_</span><span class="special">);</span>
270 <span class="special">}</span>
271 <span class="keyword">return</span> <span class="special">*</span> <span class="keyword">static_cast</span><span class="special">&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">*</span> <span class="special">&gt;(</span> <span class="identifier">ret</span><span class="special">);</span>
272 <span class="special">}</span>
273<span class="special">};</span>
274
275<span class="identifier">X</span> <span class="identifier">x</span><span class="special">;</span>
276<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">x</span><span class="special">(</span> <span class="number">7</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
277
278<span class="identifier">output</span><span class="special">:</span>
279<span class="number">7</span>
280</pre>
281<h5>
282<a name="context.abstract_context.ccontext.h4"></a>
283 <span><a name="context.abstract_context.ccontext.class__code__phrase_role__identifier__captured_context__phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.class__code__phrase_role__identifier__captured_context__phrase___code_">Class
284 <code class="computeroutput"><span class="identifier">captured_context</span></code></a>
285 </h5>
286<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">captured_context</span> <span class="special">{</span>
287<span class="keyword">public</span><span class="special">:</span>
288 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
289 <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
290
291 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">StackAlloc</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
292 <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span><span class="special">,</span> <span class="identifier">StackAlloc</span> <span class="identifier">salloc</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
293
294 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">StackAlloc</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
295 <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span><span class="special">,</span> <span class="identifier">preallocated</span> <span class="identifier">palloc</span><span class="special">,</span> <span class="identifier">StackAlloc</span> <span class="identifier">salloc</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
296
297 <span class="special">~</span><span class="identifier">captured_context</span><span class="special">();</span>
298
299 <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">captured_context</span> <span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
300 <span class="identifier">captured_context</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">captured_context</span> <span class="special">&amp;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
301
302 <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
303 <span class="identifier">captured_context</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
304
305 <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="keyword">bool</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
306 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
307
308 <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">data</span> <span class="special">=</span> <span class="keyword">nullptr</span><span class="special">);</span>
309
310 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
311 <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="identifier">exec_ontop_arg_t</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
312
313 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
314 <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">data</span><span class="special">,</span> <span class="identifier">exec_ontop_arg_t</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
315
316 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
317
318 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
319
320 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
321
322 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
323
324 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
325
326 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
327
328 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traitsT</span> <span class="special">&gt;</span>
329 <span class="keyword">friend</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traitsT</span> <span class="special">&gt;</span> <span class="special">&amp;</span>
330 <span class="keyword">operator</span><span class="special">&lt;&lt;(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traitsT</span> <span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
331<span class="special">};</span>
332</pre>
333<h5>
334<a name="context.abstract_context.ccontext.h5"></a>
335 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__template__phrase__phrase_role__special___lt___phrase___phrase_role__identifier__typname__phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__keyword__typename__phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase___phrase_role__special___gt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__fn__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__identifier__args__phrase___phrase_role__special___amp__amp___phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__template__phrase__phrase_role__special___lt___phrase___phrase_role__identifier__typname__phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__keyword__typename__phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase___phrase_role__special___gt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__fn__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__identifier__args__phrase___phrase_role__special___amp__amp___phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span> <span class="identifier">typname</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span> <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span>
336 <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span>
337 <span class="special">...</span> <span class="identifier">args</span><span class="special">)</span></code></a>
338 </h5>
339<div class="variablelist">
340<p class="title"><b></b></p>
341<dl>
342<dt><span class="term">Effects:</span></dt>
343<dd><p>
344 Creates a new execution context and prepares the context to execute
345 <code class="computeroutput"><span class="identifier">fn</span></code>. <code class="computeroutput"><span class="identifier">fixedsize_stack</span></code>
346 is used as default stack allocator (stack size == fixedsize_stack::traits::default_size().
347 </p></dd>
348</dl>
349</div>
350<h5>
351<a name="context.abstract_context.ccontext.h6"></a>
352 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__template__phrase__phrase_role__special___lt___phrase___phrase_role__keyword__typename__phrase___phrase_role__identifier__stackalloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__typname__phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__keyword__typename__phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase___phrase_role__special___gt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__allocator_arg_t__phrase__phrase_role__special_____phrase___phrase_role__identifier__stackalloc__phrase___phrase_role__identifier__salloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__fn__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__identifier__args__phrase___phrase_role__special___amp__amp___phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__template__phrase__phrase_role__special___lt___phrase___phrase_role__keyword__typename__phrase___phrase_role__identifier__stackalloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__typname__phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__keyword__typename__phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase___phrase_role__special___gt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__allocator_arg_t__phrase__phrase_role__special_____phrase___phrase_role__identifier__stackalloc__phrase___phrase_role__identifier__salloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__fn__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__identifier__args__phrase___phrase_role__special___amp__amp___phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">StackAlloc</span><span class="special">,</span> <span class="identifier">typname</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span>
353 <span class="special">...</span> <span class="identifier">Args</span>
354 <span class="special">&gt;</span> <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span><span class="special">,</span>
355 <span class="identifier">StackAlloc</span> <span class="identifier">salloc</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span>
356 <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span>
357 <span class="special">...</span> <span class="identifier">args</span><span class="special">)</span></code></a>
358 </h5>
359<div class="variablelist">
360<p class="title"><b></b></p>
361<dl>
362<dt><span class="term">Effects:</span></dt>
363<dd><p>
364 Creates a new execution context and prepares the context to execute
365 <code class="computeroutput"><span class="identifier">fn</span></code>.
366 </p></dd>
367</dl>
368</div>
369<h5>
370<a name="context.abstract_context.ccontext.h7"></a>
371 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__template__phrase__phrase_role__special___lt___phrase___phrase_role__keyword__typename__phrase___phrase_role__identifier__stackalloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__typname__phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__keyword__typename__phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase___phrase_role__special___gt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__allocator_arg_t__phrase__phrase_role__special_____phrase___phrase_role__identifier__preallocated__phrase___phrase_role__identifier__palloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__stackalloc__phrase___phrase_role__identifier__salloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__fn__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__identifier__args__phrase___phrase_role__special___amp__amp___phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__template__phrase__phrase_role__special___lt___phrase___phrase_role__keyword__typename__phrase___phrase_role__identifier__stackalloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__typname__phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__keyword__typename__phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase___phrase_role__special___gt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__allocator_arg_t__phrase__phrase_role__special_____phrase___phrase_role__identifier__preallocated__phrase___phrase_role__identifier__palloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__stackalloc__phrase___phrase_role__identifier__salloc__phrase__phrase_role__special_____phrase___phrase_role__identifier__fn__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__fn__phrase__phrase_role__special_____phrase___phrase_role__identifier__args__phrase___phrase_role__special___amp__amp___phrase___phrase_role__special_______phrase___phrase_role__identifier__args__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">StackAlloc</span><span class="special">,</span> <span class="identifier">typname</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span>
372 <span class="special">...</span> <span class="identifier">Args</span>
373 <span class="special">&gt;</span> <span class="identifier">captured_context</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_arg_t</span><span class="special">,</span>
374 <span class="identifier">preallocated</span> <span class="identifier">palloc</span><span class="special">,</span> <span class="identifier">StackAlloc</span>
375 <span class="identifier">salloc</span><span class="special">,</span>
376 <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span>
377 <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span>
378 <span class="special">...</span> <span class="identifier">args</span><span class="special">)</span></code></a>
379 </h5>
380<div class="variablelist">
381<p class="title"><b></b></p>
382<dl>
383<dt><span class="term">Effects:</span></dt>
384<dd><p>
385 Creates a new execution context and prepares the context to execute
386 <code class="computeroutput"><span class="identifier">fn</span></code>. Used to store control
387 structures on top of the stack.
388 </p></dd>
389</dl>
390</div>
391<h5>
392<a name="context.abstract_context.ccontext.h8"></a>
393 <span><a name="context.abstract_context.ccontext._code__phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__captured_context__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__other__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__identifier__captured_context__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__other__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="identifier">captured_context</span><span class="special">(</span>
394 <span class="identifier">captured_context</span> <span class="special">&amp;&amp;</span>
395 <span class="identifier">other</span><span class="special">)</span></code></a>
396 </h5>
397<div class="variablelist">
398<p class="title"><b></b></p>
399<dl>
400<dt><span class="term">Effects:</span></dt>
401<dd><p>
402 Moves underlying capture record to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
403 </p></dd>
404<dt><span class="term">Throws:</span></dt>
405<dd><p>
406 Nothing.
407 </p></dd>
408</dl>
409</div>
410<h5>
411<a name="context.abstract_context.ccontext.h9"></a>
412 <span><a name="context.abstract_context.ccontext._code__phrase_role__identifier__captured_context__phrase___phrase_role__special___amp___phrase___phrase_role__keyword__operator__phrase__phrase_role__special______phrase___phrase_role__identifier__captured_context__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__other__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__identifier__captured_context__phrase___phrase_role__special___amp___phrase___phrase_role__keyword__operator__phrase__phrase_role__special______phrase___phrase_role__identifier__captured_context__phrase___phrase_role__special___amp__amp___phrase___phrase_role__identifier__other__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="identifier">captured_context</span> <span class="special">&amp;</span>
413 <span class="keyword">operator</span><span class="special">=(</span>
414 <span class="identifier">captured_context</span> <span class="special">&amp;&amp;</span>
415 <span class="identifier">other</span><span class="special">)</span></code></a>
416 </h5>
417<div class="variablelist">
418<p class="title"><b></b></p>
419<dl>
420<dt><span class="term">Effects:</span></dt>
421<dd><p>
422 Moves the state of <code class="computeroutput"><span class="identifier">other</span></code>
423 to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
424 using move semantics.
425 </p></dd>
426<dt><span class="term">Throws:</span></dt>
427<dd><p>
428 Nothing.
429 </p></dd>
430</dl>
431</div>
432<h5>
433<a name="context.abstract_context.ccontext.h10"></a>
434 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__explicit__phrase___phrase_role__keyword__operator__phrase___phrase_role__keyword__bool__phrase__phrase_role__special______phrase___phrase_role__keyword__const__phrase___phrase_role__keyword__noexcept__phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__explicit__phrase___phrase_role__keyword__operator__phrase___phrase_role__keyword__bool__phrase__phrase_role__special______phrase___phrase_role__keyword__const__phrase___phrase_role__keyword__noexcept__phrase___code_"><code class="computeroutput"><span class="keyword">explicit</span> <span class="keyword">operator</span>
435 <span class="keyword">bool</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span></code></a>
436 </h5>
437<div class="variablelist">
438<p class="title"><b></b></p>
439<dl>
440<dt><span class="term">Returns:</span></dt>
441<dd><p>
442 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
443 points to a capture record.
444 </p></dd>
445<dt><span class="term">Throws:</span></dt>
446<dd><p>
447 Nothing.
448 </p></dd>
449</dl>
450</div>
451<h5>
452<a name="context.abstract_context.ccontext.h11"></a>
453 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__bool__phrase___phrase_role__keyword__operator__phrase__phrase_role__special_______phrase___phrase_role__keyword__const__phrase___phrase_role__keyword__noexcept__phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__bool__phrase___phrase_role__keyword__operator__phrase__phrase_role__special_______phrase___phrase_role__keyword__const__phrase___phrase_role__keyword__noexcept__phrase___code_"><code class="computeroutput"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span></code></a>
454 </h5>
455<div class="variablelist">
456<p class="title"><b></b></p>
457<dl>
458<dt><span class="term">Returns:</span></dt>
459<dd><p>
460 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
461 does not point to a capture record.
462 </p></dd>
463<dt><span class="term">Throws:</span></dt>
464<dd><p>
465 Nothing.
466 </p></dd>
467</dl>
468</div>
469<h5>
470<a name="context.abstract_context.ccontext.h12"></a>
471 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__keyword__operator__phrase__phrase_role__special_______phrase___phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__identifier__vp__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__keyword__operator__phrase__phrase_role__special_______phrase___phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__identifier__vp__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="keyword">void</span> <span class="special">*</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">vp</span><span class="special">)</span></code></a>
472 </h5>
473<pre class="programlisting"><span class="keyword">void</span> <span class="special">*</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">vp</span> <span class="special">=</span> <span class="keyword">nullptr</span><span class="special">);</span>
474
475<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
476<span class="keyword">void</span> <span class="special">*</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="identifier">exec_ontop_arg_t</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
477
478<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
479<span class="keyword">void</span> <span class="special">*</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">vp</span><span class="special">,</span> <span class="identifier">exec_ontop_arg_t</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
480</pre>
481<div class="variablelist">
482<p class="title"><b></b></p>
483<dl>
484<dt><span class="term">Effects:</span></dt>
485<dd>
486<p>
487 Stores internally the current context data (stack pointer, instruction
488 pointer, and CPU registers) to the current active context and restores
489 the context data from <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, which implies jumping to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>'s
490 execution context. The void pointer argument, <code class="computeroutput"><span class="identifier">vp</span></code>,
491 is passed to the current context to be returned by the most recent
492 call to <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">::</span><span class="keyword">operator</span><span class="special">()</span></code> in the same thread. [[Note:
493 </p>
494<p>
495 The behaviour is undefined if <code class="computeroutput"><span class="keyword">operator</span><span class="special">()()</span></code> is called while <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">::</span><span class="identifier">current</span><span class="special">()</span></code> returns <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> (e.g. resuming an already running
496 context). If the top-level context function returns, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exit</span><span class="special">()</span></code>
497 is called.
498 </p>
499</dd>
500<dt><span class="term">Returns:</span></dt>
501<dd><p>
502 The void pointer argument passed to the most recent call to <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">::</span><span class="keyword">operator</span><span class="special">()</span></code>,
503 if any.
504 </p></dd>
505<dt><span class="term">Throws:</span></dt>
506<dd><p>
507 Nothing.
508 </p></dd>
509</dl>
510</div>
511<h5>
512<a name="context.abstract_context.ccontext.h13"></a>
513 <span><a name="context.abstract_context.ccontext._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__tuple__phrase__phrase_role__special___lt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__keyword__void__phrase___phrase_role__special___gt___phrase___phrase_role__keyword__operator__phrase__phrase_role__special_______phrase___phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__identifier__vp__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__tuple__phrase__phrase_role__special___lt___phrase___phrase_role__identifier__captured_context__phrase__phrase_role__special_____phrase___phrase_role__keyword__void__phrase___phrase_role__special___gt___phrase___phrase_role__keyword__operator__phrase__phrase_role__special_______phrase___phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__identifier__vp__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">&gt;</span>
514 <span class="keyword">operator</span><span class="special">()(</span>
515 <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">vp</span><span class="special">)</span></code></a>
516 </h5>
517<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">data</span> <span class="special">=</span> <span class="keyword">nullptr</span><span class="special">);</span>
518
519<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
520<span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="identifier">exec_ontop_arg_t</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
521
522<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
523<span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span> <span class="identifier">captured_context</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">*</span> <span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">()(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">data</span><span class="special">,</span> <span class="identifier">exec_ontop_arg_t</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="special">&amp;&amp;</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
524</pre>
525<div class="variablelist">
526<p class="title"><b></b></p>
527<dl>
528<dt><span class="term">Effects:</span></dt>
529<dd>
530<p>
531 Stores internally the current context data (stack pointer, instruction
532 pointer, and CPU registers) of the current active context and restores
533 the context data from <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, which implies jumping to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>'s
534 context. The void pointer argument, <code class="computeroutput"><span class="identifier">vp</span></code>,
535 is passed to the current context to be returned by the most recent
536 call to <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">::</span><span class="keyword">operator</span><span class="special">()</span></code> in the same thread. <code class="computeroutput"><span class="identifier">fn</span></code> is executed with arguments <code class="computeroutput"><span class="identifier">args</span></code> on top of the stack of <code class="computeroutput"><span class="keyword">this</span></code>. [[Note:
537 </p>
538<p>
539 The behaviour is undefined if <code class="computeroutput"><span class="keyword">operator</span><span class="special">()()</span></code> is called while <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">::</span><span class="identifier">current</span><span class="special">()</span></code> returns <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> (e.g. resuming an already running
540 context). If the top-level context function returns, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exit</span><span class="special">()</span></code>
541 is called.
542 </p>
543</dd>
544<dt><span class="term">Returns:</span></dt>
545<dd><p>
546 The tuple of void pointer argument passed to the most recent call to
547 <code class="computeroutput"><span class="identifier">captured_context</span><span class="special">::</span><span class="keyword">operator</span><span class="special">()</span></code>,
548 if any and a captured_context representing the context that has been
549 suspended .
550 </p></dd>
551</dl>
552</div>
553<h5>
554<a name="context.abstract_context.ccontext.h14"></a>
555 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code></a>
556 </h5>
557<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
558</pre>
559<div class="variablelist">
560<p class="title"><b></b></p>
561<dl>
562<dt><span class="term">Returns:</span></dt>
563<dd><p>
564 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
565 and <code class="computeroutput"><span class="identifier">other</span></code> represent
566 the same execution context, <code class="computeroutput"><span class="keyword">false</span></code>
567 otherwise.
568 </p></dd>
569<dt><span class="term">Throws:</span></dt>
570<dd><p>
571 Nothing.
572 </p></dd>
573</dl>
574</div>
575<h5>
576<a name="context.abstract_context.ccontext.h15"></a>
577 <span><a name="context.abstract_context.ccontext.code_phrase_role_keyword_operat0"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.code_phrase_role_keyword_operat0"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code></a>
578 </h5>
579<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
580</pre>
581<div class="variablelist">
582<p class="title"><b></b></p>
583<dl>
584<dt><span class="term">Returns:</span></dt>
585<dd><p>
586 [`! (other == * this)
587 </p></dd>
588</dl>
589</div>
590<p>
591 [[Throws:] [Nothing.]] ]
592 </p>
593<h5>
594<a name="context.abstract_context.ccontext.h16"></a>
595 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___lt___phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___lt___phrase___code_"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code></a>
596 </h5>
597<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
598</pre>
599<div class="variablelist">
600<p class="title"><b></b></p>
601<dl>
602<dt><span class="term">Returns:</span></dt>
603<dd><p>
604 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">!=</span> <span class="identifier">other</span></code>
605 is true and the implementation-defined total order of <code class="computeroutput"><span class="identifier">captured_context</span></code> values places <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
606 before <code class="computeroutput"><span class="identifier">other</span></code>, false
607 otherwise.
608 </p></dd>
609<dt><span class="term">Throws:</span></dt>
610<dd><p>
611 Nothing.
612 </p></dd>
613</dl>
614</div>
615<h5>
616<a name="context.abstract_context.ccontext.h17"></a>
617 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___gt___phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___gt___phrase___code_"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;</span></code></a>
618 </h5>
619<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
620</pre>
621<div class="variablelist">
622<p class="title"><b></b></p>
623<dl>
624<dt><span class="term">Returns:</span></dt>
625<dd><p>
626 <code class="computeroutput"><span class="identifier">other</span> <span class="special">&lt;</span>
627 <span class="special">*</span> <span class="keyword">this</span></code>
628 </p></dd>
629<dt><span class="term">Throws:</span></dt>
630<dd><p>
631 Nothing.
632 </p></dd>
633</dl>
634</div>
635<h5>
636<a name="context.abstract_context.ccontext.h18"></a>
637 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___lt____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___lt____phrase___code_"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;=</span></code></a>
638 </h5>
639<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
640</pre>
641<div class="variablelist">
642<p class="title"><b></b></p>
643<dl>
644<dt><span class="term">Returns:</span></dt>
645<dd><p>
646 <code class="computeroutput"><span class="special">!</span> <span class="special">(</span><span class="identifier">other</span> <span class="special">&lt;</span>
647 <span class="special">*</span> <span class="keyword">this</span><span class="special">)</span></code>
648 </p></dd>
649<dt><span class="term">Throws:</span></dt>
650<dd><p>
651 Nothing.
652 </p></dd>
653</dl>
654</div>
655<h5>
656<a name="context.abstract_context.ccontext.h19"></a>
657 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___gt____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___gt____phrase___code_"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;=</span></code></a>
658 </h5>
659<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
660</pre>
661<div class="variablelist">
662<p class="title"><b></b></p>
663<dl>
664<dt><span class="term">Returns:</span></dt>
665<dd><p>
666 <code class="computeroutput"><span class="special">!</span> <span class="special">(*</span>
667 <span class="keyword">this</span> <span class="special">&lt;</span>
668 <span class="identifier">other</span><span class="special">)</span></code>
669 </p></dd>
670<dt><span class="term">Throws:</span></dt>
671<dd><p>
672 Nothing.
673 </p></dd>
674</dl>
675</div>
676<h5>
677<a name="context.abstract_context.ccontext.h20"></a>
678 <span><a name="context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___lt__lt___phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__keyword__operator__phrase__phrase_role__special___lt__lt___phrase___code_"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></code></a>
679 </h5>
680<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traitsT</span> <span class="special">&gt;</span>
681<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traitsT</span> <span class="special">&gt;</span> <span class="special">&amp;</span>
682<span class="keyword">operator</span><span class="special">&lt;&lt;(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traitsT</span> <span class="special">&gt;</span> <span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">captured_context</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
683</pre>
684<div class="variablelist">
685<p class="title"><b></b></p>
686<dl>
687<dt><span class="term">Efects:</span></dt>
688<dd><p>
689 Writes the representation of <code class="computeroutput"><span class="identifier">other</span></code>
690 to stream <code class="computeroutput"><span class="identifier">os</span></code>.
691 </p></dd>
692<dt><span class="term">Returns:</span></dt>
693<dd><p>
694 <code class="computeroutput"><span class="identifier">os</span></code>
695 </p></dd>
696</dl>
697</div>
698<h5>
699<a name="context.abstract_context.ccontext.h21"></a>
700 <span><a name="context.abstract_context.ccontext.struct__code__phrase_role__identifier__preallocated__phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext.struct__code__phrase_role__identifier__preallocated__phrase___code_">Struct
701 <code class="computeroutput"><span class="identifier">preallocated</span></code></a>
702 </h5>
703<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">preallocated</span> <span class="special">{</span>
704 <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">sp</span><span class="special">;</span>
705 <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">;</span>
706 <span class="identifier">stack_context</span> <span class="identifier">sctx</span><span class="special">;</span>
707
708 <span class="identifier">preallocated</span><span class="special">(</span> <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">sp</span><span class="special">,</span> <span class="identifier">std</span><span class="special">:</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">stack_allocator</span> <span class="identifier">sctx</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
709<span class="special">};</span>
710</pre>
711<h5>
712<a name="context.abstract_context.ccontext.h22"></a>
713 <span><a name="context.abstract_context.ccontext._code__phrase_role__identifier__preallocated__phrase__phrase_role__special_____phrase___phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__identifier__sp__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special_____phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__size__phrase__phrase_role__special_____phrase___phrase_role__identifier__stack_allocator__phrase___phrase_role__identifier__sctx__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="ccontext.html#context.abstract_context.ccontext._code__phrase_role__identifier__preallocated__phrase__phrase_role__special_____phrase___phrase_role__keyword__void__phrase___phrase_role__special_____phrase___phrase_role__identifier__sp__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special_____phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__size__phrase__phrase_role__special_____phrase___phrase_role__identifier__stack_allocator__phrase___phrase_role__identifier__sctx__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="identifier">preallocated</span><span class="special">(</span>
714 <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">sp</span><span class="special">,</span> <span class="identifier">std</span><span class="special">:</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">stack_allocator</span> <span class="identifier">sctx</span><span class="special">)</span></code></a>
715 </h5>
716<div class="variablelist">
717<p class="title"><b></b></p>
718<dl>
719<dt><span class="term">Effects:</span></dt>
720<dd><p>
721 Creates an object of preallocated.
722 </p></dd>
723</dl>
724</div>
725</div>
726<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
727<td align="left"></td>
728<td align="right"><div class="copyright-footer">Copyright &#169; 2014 Oliver Kowalke<p>
729 Distributed under the Boost Software License, Version 1.0. (See accompanying
730 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>)
731 </p>
732</div></td>
733</tr></table>
734<hr>
735<div class="spirit-nav">
736<a accesskey="p" href="econtext.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../abstract_context.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="stack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
737</div>
738</body>
739</html>