1
<?xml version=
"1.0" encoding=
"utf-8"?>
3 Copyright 2012 Eric Niebler
5 Distributed under the Boost
6 Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 <header name=
"boost/proto/proto_fwd.hpp">
10 <para>Forward declarations of all of proto's public types and functions.
</para>
11 <namespace name=
"boost">
12 <namespace name=
"proto">
13 <struct name=
"callable">
14 <purpose>Base class for callable
<conceptname>PolymorphicFunctionObject
</conceptname>s
</purpose>
17 When defining a callable
<conceptname>PolymorphicFunctionObject
</conceptname>, inherit
18 from
<computeroutput>proto::callable
</computeroutput> so that it can be used to create
19 a
<conceptname>CallableTransform
</conceptname>.
22 <computeroutput><classname>proto::is_callable
</classname><T
>::value
</computeroutput> is
23 <computeroutput>true
</computeroutput> for types that inherit from
24 <computeroutput>proto::callable
</computeroutput>.
28 <data-member name=
"N">
30 <para>Array size wildcard for Proto grammars that match array terminals.
</para></description>
31 <type>int const
</type>
33 <namespace name=
"functional">
34 <typedef name=
"make_terminal">
35 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::terminal
</classname> ></type>
37 <typedef name=
"make_unary_plus">
38 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::unary_plus
</classname> ></type>
40 <typedef name=
"make_negate">
41 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::negate
</classname> ></type>
43 <typedef name=
"make_dereference">
44 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::dereference
</classname> ></type>
46 <typedef name=
"make_complement">
47 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::complement
</classname> ></type>
49 <typedef name=
"make_address_of">
50 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::address_of
</classname> ></type>
52 <typedef name=
"make_logical_not">
53 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::logical_not
</classname> ></type>
55 <typedef name=
"make_pre_inc">
56 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::pre_inc
</classname> ></type>
58 <typedef name=
"make_pre_dec">
59 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::pre_dec
</classname> ></type>
61 <typedef name=
"make_post_inc">
62 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::post_inc
</classname> ></type>
64 <typedef name=
"make_post_dec">
65 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::post_dec
</classname> ></type>
67 <typedef name=
"make_shift_left">
68 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_left
</classname> ></type>
70 <typedef name=
"make_shift_right">
71 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_right
</classname> ></type>
73 <typedef name=
"make_multiplies">
74 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::multiplies
</classname> ></type>
76 <typedef name=
"make_divides">
77 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::divides
</classname> ></type>
79 <typedef name=
"make_modulus">
80 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::modulus
</classname> ></type>
82 <typedef name=
"make_plus">
83 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::plus
</classname> ></type>
85 <typedef name=
"make_minus">
86 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::minus
</classname> ></type>
88 <typedef name=
"make_less">
89 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::less
</classname> ></type>
91 <typedef name=
"make_greater">
92 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::greater
</classname> ></type>
94 <typedef name=
"make_less_equal">
95 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::less_equal
</classname> ></type>
97 <typedef name=
"make_greater_equal">
98 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::greater_equal
</classname> ></type>
100 <typedef name=
"make_equal_to">
101 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::equal_to
</classname> ></type>
103 <typedef name=
"make_not_equal_to">
104 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::not_equal_to
</classname> ></type>
106 <typedef name=
"make_logical_or">
107 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::logical_or
</classname> ></type>
109 <typedef name=
"make_logical_and">
110 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::logical_and
</classname> ></type>
112 <typedef name=
"make_bitwise_and">
113 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_and
</classname> ></type>
115 <typedef name=
"make_bitwise_or">
116 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_or
</classname> ></type>
118 <typedef name=
"make_bitwise_xor">
119 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_xor
</classname> ></type>
121 <typedef name=
"make_comma">
122 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::comma
</classname> ></type>
124 <typedef name=
"make_mem_ptr">
125 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::mem_ptr
</classname> ></type>
127 <typedef name=
"make_assign">
128 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::assign
</classname> ></type>
130 <typedef name=
"make_shift_left_assign">
131 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_left_assign
</classname> ></type>
133 <typedef name=
"make_shift_right_assign">
134 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_right_assign
</classname> ></type>
136 <typedef name=
"make_multiplies_assign">
137 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::multiplies_assign
</classname> ></type>
139 <typedef name=
"make_divides_assign">
140 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::divides_assign
</classname> ></type>
142 <typedef name=
"make_modulus_assign">
143 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::modulus_assign
</classname> ></type>
145 <typedef name=
"make_plus_assign">
146 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::plus_assign
</classname> ></type>
148 <typedef name=
"make_minus_assign">
149 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::minus_assign
</classname> ></type>
151 <typedef name=
"make_bitwise_and_assign">
152 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_and_assign
</classname> ></type>
154 <typedef name=
"make_bitwise_or_assign">
155 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_or_assign
</classname> ></type>
157 <typedef name=
"make_bitwise_xor_assign">
158 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_xor_assign
</classname> ></type>
160 <typedef name=
"make_subscript">
161 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::subscript
</classname> ></type>
163 <typedef name=
"make_if_else">
164 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::if_else_
</classname> ></type>
166 <typedef name=
"make_function">
167 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::function
</classname> ></type>
170 <typedef name=
"_flatten">
171 <type><classname>proto::functional::flatten
</classname></type>
173 <typedef name=
"_make_pair">
174 <type><classname>proto::functional::make_pair
</classname></type>
176 <typedef name=
"_first">
177 <type><classname>proto::functional::first
</classname></type>
179 <typedef name=
"_second">
180 <type><classname>proto::functional::second
</classname></type>
182 <typedef name=
"_pop_back">
183 <type><classname>proto::functional::pop_back
</classname></type>
185 <typedef name=
"_pop_front">
186 <type><classname>proto::functional::pop_front
</classname></type>
188 <typedef name=
"_push_back">
189 <type><classname>proto::functional::push_back
</classname></type>
191 <typedef name=
"_push_front">
192 <type><classname>proto::functional::push_front
</classname></type>
194 <typedef name=
"_reverse">
195 <type><classname>proto::functional::reverse
</classname></type>
197 <typedef name=
"_eval">
198 <type><classname>proto::functional::eval
</classname></type>
200 <typedef name=
"_deep_copy">
201 <type><classname>proto::functional::deep_copy
</classname></type>
203 <typedef name=
"_make_terminal">
204 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::terminal
</classname> ></type>
206 <typedef name=
"_make_unary_plus">
207 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::unary_plus
</classname> ></type>
209 <typedef name=
"_make_negate">
210 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::negate
</classname> ></type>
212 <typedef name=
"_make_dereference">
213 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::dereference
</classname> ></type>
215 <typedef name=
"_make_complement">
216 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::complement
</classname> ></type>
218 <typedef name=
"_make_address_of">
219 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::address_of
</classname> ></type>
221 <typedef name=
"_make_logical_not">
222 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::logical_not
</classname> ></type>
224 <typedef name=
"_make_pre_inc">
225 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::pre_inc
</classname> ></type>
227 <typedef name=
"_make_pre_dec">
228 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::pre_dec
</classname> ></type>
230 <typedef name=
"_make_post_inc">
231 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::post_inc
</classname> ></type>
233 <typedef name=
"_make_post_dec">
234 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::post_dec
</classname> ></type>
236 <typedef name=
"_make_shift_left">
237 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_left
</classname> ></type>
239 <typedef name=
"_make_shift_right">
240 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_right
</classname> ></type>
242 <typedef name=
"_make_multiplies">
243 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::multiplies
</classname> ></type>
245 <typedef name=
"_make_divides">
246 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::divides
</classname> ></type>
248 <typedef name=
"_make_modulus">
249 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::modulus
</classname> ></type>
251 <typedef name=
"_make_plus">
252 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::plus
</classname> ></type>
254 <typedef name=
"_make_minus">
255 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::minus
</classname> ></type>
257 <typedef name=
"_make_less">
258 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::less
</classname> ></type>
260 <typedef name=
"_make_greater">
261 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::greater
</classname> ></type>
263 <typedef name=
"_make_less_equal">
264 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::less_equal
</classname> ></type>
266 <typedef name=
"_make_greater_equal">
267 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::greater_equal
</classname> ></type>
269 <typedef name=
"_make_equal_to">
270 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::equal_to
</classname> ></type>
272 <typedef name=
"_make_not_equal_to">
273 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::not_equal_to
</classname> ></type>
275 <typedef name=
"_make_logical_or">
276 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::logical_or
</classname> ></type>
278 <typedef name=
"_make_logical_and">
279 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::logical_and
</classname> ></type>
281 <typedef name=
"_make_bitwise_and">
282 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_and
</classname> ></type>
284 <typedef name=
"_make_bitwise_or">
285 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_or
</classname> ></type>
287 <typedef name=
"_make_bitwise_xor">
288 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_xor
</classname> ></type>
290 <typedef name=
"_make_comma">
291 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::comma
</classname> ></type>
293 <typedef name=
"_make_mem_ptr">
294 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::mem_ptr
</classname> ></type>
296 <typedef name=
"_make_assign">
297 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::assign
</classname> ></type>
299 <typedef name=
"_make_shift_left_assign">
300 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_left_assign
</classname> ></type>
302 <typedef name=
"_make_shift_right_assign">
303 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::shift_right_assign
</classname> ></type>
305 <typedef name=
"_make_multiplies_assign">
306 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::multiplies_assign
</classname> ></type>
308 <typedef name=
"_make_divides_assign">
309 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::divides_assign
</classname> ></type>
311 <typedef name=
"_make_modulus_assign">
312 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::modulus_assign
</classname> ></type>
314 <typedef name=
"_make_plus_assign">
315 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::plus_assign
</classname> ></type>
317 <typedef name=
"_make_minus_assign">
318 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::minus_assign
</classname> ></type>
320 <typedef name=
"_make_bitwise_and_assign">
321 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_and_assign
</classname> ></type>
323 <typedef name=
"_make_bitwise_or_assign">
324 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_or_assign
</classname> ></type>
326 <typedef name=
"_make_bitwise_xor_assign">
327 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::bitwise_xor_assign
</classname> ></type>
329 <typedef name=
"_make_subscript">
330 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::subscript
</classname> ></type>
332 <typedef name=
"_make_if_else">
333 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::if_else_
</classname> ></type>
335 <typedef name=
"_make_function">
336 <type><classname>proto::functional::make_expr
</classname>< <classname>proto::tag::function
</classname> ></type>
338 <typedef name=
"_childN">
339 <purpose>For each
<replaceable>N
</replaceable> in
<computeroutput>[
0,BOOST_PROTO_MAX_ARITY)
</computeroutput></purpose>
340 <type><classname>proto::_child_c
</classname>< <replaceable>N
</replaceable> ></type>
342 <typedef name=
"_child">
343 <type><classname alt=
"proto::_childN">proto::_child0
</classname></type>
345 <typedef name=
"_left">
346 <type><classname alt=
"proto::_childN">proto::_child0
</classname></type>
348 <typedef name=
"_right">
349 <type><classname alt=
"proto::_childN">proto::_child1
</classname></type>
353 <macro name=
"BOOST_PROTO_MAX_ARITY">
354 <purpose>Controls the maximum number of child nodes an expression may have.
</purpose>
357 <computeroutput>BOOST_PROTO_MAX_ARITY
</computeroutput> defaults to
10. It may be set higher or lower, but not
358 lower than
3. Setting it higher will have a negative effect on compile times.
361 See also
<computeroutput><macroname>BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
</macroname></computeroutput>.
365 <macro name=
"BOOST_PROTO_MAX_LOGICAL_ARITY">
366 <purpose>Controls the maximum number of sub-grammars that
368 <classname alt=
"boost::proto::or_">proto::or_
<></classname>
369 </computeroutput> and
371 <classname alt=
"boost::proto::and_">proto::and_
<></classname>
372 </computeroutput> accept.
</purpose>
375 <computeroutput>BOOST_PROTO_MAX_LOGICAL_ARITY
</computeroutput> defaults to
10. It may be set higher or lower. Setting
376 it higher will have a negative effect on compile times.
380 <macro name=
"BOOST_PROTO_MAX_FUNCTION_CALL_ARITY">
381 <purpose>Controls the maximum number of arguments that
<computeroutput>operator()
</computeroutput> overloads
387 <macroname>BOOST_PROTO_MAX_ARITY
</macroname>
388 </computeroutput> higher than the default, compile times
389 slow down considerably. That is due in large part to the explosion in the number of
390 <computeroutput>operator()
</computeroutput> overloads that must be generated for each
391 Proto expression type. By setting
<computeroutput>BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
</computeroutput>
392 lower than
<computeroutput><macroname>BOOST_PROTO_MAX_ARITY
</macroname></computeroutput>,
393 compile times can be sped up considerably.