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/traits.hpp">
11 Contains definitions for various expression traits and utilities like
12 <computeroutput><classname alt=
"boost::proto::tag_of">proto::tag_of
</classname><></computeroutput> and
13 <computeroutput><classname alt=
"boost::proto::arity_of">proto::arity_of
</classname><></computeroutput>;
15 <computeroutput><functionname alt=
"boost::proto::value">proto::value
</functionname>()
</computeroutput>,
16 <computeroutput><functionname alt=
"boost::proto::left">proto::left
</functionname>()
</computeroutput> and
17 <computeroutput><functionname alt=
"boost::proto::right">proto::right
</functionname>()
</computeroutput>;
18 <computeroutput><functionname alt=
"boost::proto::child">proto::child
</functionname>()
</computeroutput>,
19 <computeroutput><functionname alt=
"boost::proto::child_c">proto::child_c
</functionname>()
</computeroutput>,
20 <computeroutput><functionname alt=
"boost::proto::as_expr">proto::as_expr
</functionname>()
</computeroutput>,
21 <computeroutput><functionname alt=
"boost::proto::as_child">proto::as_child
</functionname>()
</computeroutput>,
24 <namespace name=
"boost">
25 <namespace name=
"proto">
27 <struct name=
"is_callable">
29 <template-type-parameter name=
"T"/>
31 <purpose>Boolean metafunction which tells whether a type is a callable
32 <conceptname>PolymorphicFunctionObject
</conceptname> or not.
</purpose>
35 <computeroutput>proto::is_callable
<></computeroutput> is used by the
36 <computeroutput><classname alt=
"proto::when">proto::when
<></classname></computeroutput>
37 transform to determine whether a function type
<computeroutput>R(A
<subscript>1</subscript>,...A
<subscript>n
</subscript>)
</computeroutput>
38 is a
<conceptname>CallableTransform
</conceptname> or an
<conceptname>ObjectTransform
</conceptname>.
39 The former are evaluated using
<computeroutput><classname>proto::call
<></classname></computeroutput>
40 and the later with
<computeroutput><classname>proto::make
<></classname></computeroutput>.
41 If
<computeroutput>proto::is_callable
<R
>::value
</computeroutput> is
<computeroutput>true
</computeroutput>,
42 the function type is a
<conceptname>CallableTransform
</conceptname>; otherwise, it is an
<conceptname>ObjectTransform
</conceptname>.
45 Unless specialized for a type
46 <computeroutput>T
</computeroutput>,
<computeroutput>proto::is_callable
<T
>::value
</computeroutput>
47 is computed as follows:
51 If
<computeroutput>T
</computeroutput> is a template type
52 <computeroutput>X
<Y
<subscript>0</subscript>,...Y
<subscript>n
</subscript>></computeroutput>,
53 where all
<computeroutput>Y
<subscript>x
</subscript></computeroutput> are types for
54 <computeroutput>x
</computeroutput> in
<computeroutput>[
0,n]
</computeroutput>,
55 <computeroutput>proto::is_callable
<T
>::value
</computeroutput> is
56 <computeroutput>boost::is_same
<Y
<subscript>n
</subscript>,
<classname>proto::callable
</classname>>::value
</computeroutput>.
61 If
<computeroutput>T
</computeroutput> is derived from
<computeroutput><classname>proto::callable
</classname></computeroutput>,
62 <computeroutput>proto::is_callable
<T
>::value
</computeroutput> is
<computeroutput>true
</computeroutput>.
67 Otherwise,
<computeroutput>proto::is_callable
<T
>::value
</computeroutput>
68 is
<computeroutput>false
</computeroutput>.
74 <inherit><type>mpl::bool_
<<replaceable>true-or-false
</replaceable>></type></inherit>
77 <struct name=
"is_transform">
79 <template-type-parameter name=
"T"/>
81 <purpose>Boolean metafunction which tells whether a type is a
82 <conceptname>PrimitiveTransform
</conceptname> or not.
</purpose>
85 <computeroutput>proto::is_transform
<></computeroutput> is used by the
86 <computeroutput><classname alt=
"proto::make">proto::make
<></classname></computeroutput>
87 transform to determine whether a type
<computeroutput>R
</computeroutput> represents a
88 <conceptname>PrimitiveTransform
</conceptname> to apply, or whether it merely represents itself.
91 It is also used by the
92 <computeroutput><classname alt=
"proto::call">proto::call
<></classname></computeroutput>
93 transform to determine whether the function types
<computeroutput>R()
</computeroutput>,
94 <computeroutput>R(A1)
</computeroutput>, and
<computeroutput>R(A1, A2)
</computeroutput> should
95 be passed the expression, state and data parameters (as needed).
98 Unless specialized for a type
99 <computeroutput>T
</computeroutput>,
<computeroutput>proto::is_transform
<T
>::value
</computeroutput>
100 is computed as follows:
104 If
<computeroutput>T
</computeroutput> is a class type that inherits directly or indirectly from
106 <computeroutput><classname alt=
"proto::transform">proto::transform
<></classname></computeroutput>,
107 <computeroutput>proto::is_transform
<T
>::value
</computeroutput> is
<computeroutput>true
</computeroutput>.
112 Otherwise,
<computeroutput>proto::is_transform
<T
>::value
</computeroutput>
113 is
<computeroutput>false
</computeroutput>.
119 <inherit><type>mpl::bool_
<<replaceable>true-or-false
</replaceable>></type></inherit>
122 <struct name=
"is_aggregate">
124 <template-type-parameter name=
"T"/>
126 <purpose>A Boolean metafunction that indicates whether a type requires aggregate initialization.
</purpose>
129 <computeroutput>proto::is_aggregate
<></computeroutput> is used by the
130 <computeroutput><classname>proto::make
<></classname></computeroutput> transform to determine how
131 to construct an object of some type
<computeroutput>T
</computeroutput>, given some initialization arguments
132 <computeroutput>a
<subscript>0</subscript>,...a
<subscript>n
</subscript></computeroutput>.
133 If
<computeroutput>proto::is_aggregate
<T
>::value
</computeroutput> is
<computeroutput>true
</computeroutput>,
134 then an object of type
<computeroutput>T
</computeroutput> will be initialized as
135 <computeroutput>T t = {a
<subscript>0</subscript>,...a
<subscript>n
</subscript>};
</computeroutput>.
136 Otherwise, it will be initialized as
137 <computeroutput>T t(a
<subscript>0</subscript>,...a
<subscript>n
</subscript>)
</computeroutput>.
140 Note:
<computeroutput><classname>proto::expr
<></classname></computeroutput> and
141 <computeroutput><classname>proto::basic_expr
<></classname></computeroutput>are aggregates.
144 <inherit><type>mpl::bool_
<<replaceable>true-or-false
</replaceable>></type></inherit>
147 <namespace name=
"functional">
148 <struct name=
"as_expr">
150 <template-type-parameter name=
"Domain">
151 <default><classname>proto::default_domain
</classname></default>
152 </template-type-parameter>
154 <purpose>A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
155 <computeroutput><functionname alt=
"proto::as_expr">proto::as_expr()
</functionname></computeroutput> function.
157 <inherit><type><classname>proto::callable
</classname></type></inherit>
158 <struct-specialization name=
"result">
160 <template-type-parameter name=
"This"/>
161 <template-type-parameter name=
"T"/>
164 <template-arg>This(T)
</template-arg>
166 <inherit><type><classname>proto::result_of::as_expr
</classname>< typename remove_reference
< T
>::type, Domain
></type></inherit>
167 </struct-specialization>
168 <method-group name=
"public member functions">
169 <method name=
"operator()" cv=
"const">
170 <type>typename
<classname>proto::result_of::as_expr
</classname>< T, Domain
>::type
</type>
172 <template-type-parameter name=
"T"/>
175 <paramtype>T
&</paramtype>
177 <para>The object to wrap.
</para>
182 Wrap an object in a Proto terminal if it isn't a Proto expression already.
187 <computeroutput><functionname>proto::as_expr
</functionname><Domain
>(t)
</computeroutput>
191 <method name=
"operator()" cv=
"const">
192 <type>typename
<classname>proto::result_of::as_expr
</classname>< T const, Domain
>::type
</type>
194 <template-type-parameter name=
"T"/>
197 <paramtype>T const
&</paramtype>
200 <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
</para>
206 <struct name=
"as_child">
208 <template-type-parameter name=
"Domain">
209 <default><classname>proto::default_domain
</classname></default>
210 </template-type-parameter>
213 A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
214 <computeroutput><functionname alt=
"proto::as_child">proto::as_child()
</functionname></computeroutput> function.
216 <inherit><type><classname>proto::callable
</classname></type></inherit>
217 <struct-specialization name=
"result">
219 <template-type-parameter name=
"This"/>
220 <template-type-parameter name=
"T"/>
223 <template-arg>This(T)
</template-arg>
225 <inherit><type><classname>proto::result_of::as_child
</classname>< typename remove_reference
< T
>::type, Domain
></type></inherit>
226 </struct-specialization>
227 <method-group name=
"public member functions">
228 <method name=
"operator()" cv=
"const">
229 <type>typename
<classname>proto::result_of::as_child
</classname>< T, Domain
>::type
</type>
231 <template-type-parameter name=
"T"/>
234 <paramtype>T
&</paramtype>
236 <para>The object to wrap.
</para>
241 Wrap an object in a Proto terminal if it isn't a Proto expression already.
246 <computeroutput><functionname>proto::as_child
</functionname><Domain
>(t)
</computeroutput>
250 <method name=
"operator()" cv=
"const">
251 <type>typename
<classname>proto::result_of::as_child
</classname>< T const, Domain
>::type
</type>
253 <template-type-parameter name=
"T"/>
256 <paramtype>T const
&</paramtype>
259 <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
</para>
265 <struct name=
"child_c">
267 <template-nontype-parameter name=
"N">
269 </template-nontype-parameter>
272 A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
273 <computeroutput><functionname alt=
"proto::child_c">proto::child_c()
</functionname></computeroutput> function.
275 <inherit><type><classname>proto::callable
</classname></type></inherit>
276 <struct-specialization name=
"result">
278 <template-type-parameter name=
"This"/>
279 <template-type-parameter name=
"Expr"/>
282 <template-arg>This(Expr)
</template-arg>
284 <inherit><type><classname>proto::result_of::child_c
</classname>< Expr, N
></type></inherit>
285 </struct-specialization>
286 <method-group name=
"public member functions">
287 <method name=
"operator()" cv=
"const">
288 <type>typename
<classname>proto::result_of::child_c
</classname>< Expr
&, N
>::type
</type>
290 <template-type-parameter name=
"Expr"/>
292 <parameter name=
"expr">
293 <paramtype>Expr
&</paramtype>
295 <para>The expression node.
</para>
300 Return the
<replaceable>N
</replaceable><superscript>th
</superscript> child of the given expression.
305 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
306 <computeroutput>true
</computeroutput>
309 <computeroutput>N
< Expr::proto_arity::value
</computeroutput>
314 <computeroutput><functionname>proto::child_c
</functionname><N
>(expr)
</computeroutput>
318 <simpara>Will not throw.
</simpara>
321 <method name=
"operator()" cv=
"const">
322 <type>typename
<classname>proto::result_of::child_c
</classname>< Expr const
&, N
>::type
</type>
324 <template-type-parameter name=
"Expr"/>
326 <parameter name=
"expr">
327 <paramtype>Expr const
&</paramtype>
330 <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
</para>
336 <struct name=
"child">
338 <template-type-parameter name=
"N">
339 <default>mpl::long_
<0></default>
340 </template-type-parameter>
342 <purpose>A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
343 <computeroutput><functionname alt=
"proto::child">proto::child()
</functionname></computeroutput> function.
</purpose>
346 A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
347 <computeroutput><functionname alt=
"proto::child">proto::child()
</functionname></computeroutput>
348 function.
<computeroutput>N
</computeroutput> is required to be an MPL Integral Constant.
351 <inherit><type><classname>proto::callable
</classname></type></inherit>
352 <struct-specialization name=
"result">
354 <template-type-parameter name=
"This"/>
355 <template-type-parameter name=
"Expr"/>
358 <template-arg>This(Expr)
</template-arg>
361 <type><classname>proto::result_of::child
</classname>< Expr, N
></type>
363 </struct-specialization>
364 <method-group name=
"public member functions">
365 <method name=
"operator()" cv=
"const">
366 <type>typename
<classname>proto::result_of::child
</classname>< Expr
&, N
>::type
</type>
368 <template-type-parameter name=
"Expr"/>
370 <parameter name=
"expr">
371 <paramtype>Expr
&</paramtype>
373 <para>The expression node.
</para>
378 Return the
<replaceable>N
</replaceable><superscript>th
</superscript> child of the given expression.
383 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
384 <computeroutput>true
</computeroutput>
387 <computeroutput>N::value
< Expr::proto_arity::value
</computeroutput>
392 <computeroutput><functionname>proto::child
</functionname><N
>(expr)
</computeroutput>
396 <simpara>Will not throw.
</simpara>
399 <method name=
"operator()" cv=
"const">
400 <type>typename
<classname>proto::result_of::child
</classname>< Expr const
&, N
>::type
</type>
402 <template-type-parameter name=
"Expr"/>
404 <parameter name=
"expr">
405 <paramtype>Expr const
&</paramtype>
408 <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
</para>
414 <struct name=
"value">
416 A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
417 <computeroutput><functionname alt=
"proto::value">proto::value()
</functionname></computeroutput> function.
419 <inherit><type><classname>proto::callable
</classname></type></inherit>
420 <struct-specialization name=
"result">
422 <template-type-parameter name=
"This"/>
423 <template-type-parameter name=
"Expr"/>
426 <template-arg>This(Expr)
</template-arg>
429 <type><classname>proto::result_of::value
</classname>< Expr
></type>
431 </struct-specialization>
432 <method-group name=
"public member functions">
433 <method name=
"operator()" cv=
"const">
434 <type>typename
<classname>proto::result_of::value
</classname>< Expr
& >::type
</type>
436 <template-type-parameter name=
"Expr"/>
438 <parameter name=
"expr">
439 <paramtype>Expr
&</paramtype>
441 <para>The terminal expression node.
</para>
446 Return the value of the given terminal expression.
451 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
452 <computeroutput>true
</computeroutput>
455 <computeroutput>0 == Expr::proto_arity::value
</computeroutput>
460 <computeroutput><functionname>proto::value
</functionname>(expr)
</computeroutput>
464 <simpara>Will not throw.
</simpara>
467 <method name=
"operator()" cv=
"const">
468 <type>typename
<classname>proto::result_of::value
</classname>< Expr const
& >::type
</type>
470 <template-type-parameter name=
"Expr"/>
472 <parameter name=
"expr">
473 <paramtype>Expr const
&</paramtype>
476 <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
</para>
483 <purpose>A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
484 <computeroutput><functionname alt=
"proto::left">proto::left()
</functionname></computeroutput> function.
</purpose>
485 <struct-specialization name=
"result">
487 <template-type-parameter name=
"This"/>
488 <template-type-parameter name=
"Expr"/>
491 <template-arg>This(Expr)
</template-arg>
494 <type><classname>proto::result_of::left
</classname>< Expr
></type>
496 </struct-specialization>
498 <type><classname>proto::callable
</classname></type>
500 <method-group name=
"public member functions">
501 <method name=
"operator()" cv=
"const">
502 <type>typename
<classname>proto::result_of::left
</classname>< Expr
& >::type
</type>
504 <template-type-parameter name=
"Expr"/>
506 <parameter name=
"expr">
507 <paramtype>Expr
&</paramtype>
509 <para>The expression node.
</para>
514 Return the left child of the given binary expression.
519 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
520 <computeroutput>true
</computeroutput>
523 <computeroutput>2 == Expr::proto_arity::value
</computeroutput>
528 <computeroutput><functionname>proto::left
</functionname>(expr)
</computeroutput>
532 <simpara>Will not throw.
</simpara>
535 <method name=
"operator()" cv=
"const">
536 <type>typename
<classname>proto::result_of::left
</classname>< Expr const
& >::type
</type>
538 <template-type-parameter name=
"Expr"/>
540 <parameter name=
"expr">
541 <paramtype>Expr const
&</paramtype>
544 <para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
</para>
550 <struct name=
"right">
551 <purpose>A callable
<conceptname>PolymorphicFunctionObject
</conceptname> that is equivalent to the
552 <computeroutput><functionname alt=
"proto::right">proto::right()
</functionname></computeroutput> function.
</purpose>
553 <struct-specialization name=
"result">
555 <template-type-parameter name=
"This"/>
556 <template-type-parameter name=
"Expr"/>
559 <template-arg>This(Expr)
</template-arg>
562 <type><classname>proto::result_of::right
</classname>< Expr
></type>
564 </struct-specialization>
566 <type><classname>proto::callable
</classname></type>
568 <method-group name=
"public member functions">
569 <method name=
"operator()" cv=
"const">
570 <type>typename
<classname>proto::result_of::right
</classname>< Expr
& >::type
</type>
572 <template-type-parameter name=
"Expr"/>
574 <parameter name=
"expr">
575 <paramtype>Expr
&</paramtype>
577 <para>The expression node.
</para>
581 <para>Return the right child of the given binary expression.
</para>
585 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
<computeroutput>true
</computeroutput>
588 <computeroutput>2 == Expr::proto_arity::value
</computeroutput>
593 <computeroutput><functionname>proto::right
</functionname>(expr)
</computeroutput>
597 <simpara>Will not throw.
</simpara>
600 <method name=
"operator()" cv=
"const">
601 <type>typename
<classname>proto::result_of::right
</classname>< Expr const
& >::type
</type>
603 <template-type-parameter name=
"Expr"/>
605 <parameter name=
"expr">
606 <paramtype>Expr const
&</paramtype>
613 <struct name=
"terminal">
615 <template-type-parameter name=
"T"/>
617 <inherit><classname>proto::transform
</classname>< terminal
<T
> ></inherit>
618 <purpose>A metafunction for generating terminal expression types, a grammar element for matching
619 terminal expressions, and
620 a
<conceptname>PrimitiveTransform
</conceptname> that returns the current expression unchanged.
</purpose>
623 <template-type-parameter name=
"Expr"/>
624 <template-type-parameter name=
"State"/>
625 <template-type-parameter name=
"Data"/>
627 <inherit><classname>proto::transform_impl
</classname>< Expr, State, Data
></inherit>
628 <typedef name=
"result_type">
631 <method-group name=
"public member functions">
632 <method name=
"operator()" cv=
"const">
634 <parameter name=
"expr">
635 <paramtype>typename impl::expr_param
</paramtype>
637 <para>The current expression
</para>
641 <paramtype>typename impl::state_param
</paramtype>
644 <paramtype>typename impl::data_param
</paramtype>
648 <computeroutput><classname>proto::matches
</classname><Expr, proto::terminal
<T
> >::value
</computeroutput> is
<computeroutput>true
</computeroutput>.
653 <computeroutput>expr
</computeroutput>
657 <simpara>Will not throw.
</simpara>
662 <typedef name=
"type">
663 <type><classname>proto::expr
</classname>< <classname>proto::tag::terminal
</classname>,
<classname>proto::term
</classname>< T
> ></type>
665 <typedef name=
"proto_grammar">
666 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::terminal
</classname>,
<classname>proto::term
</classname>< T
> ></type>
670 <struct name=
"if_else_">
672 <template-type-parameter name=
"T"/>
673 <template-type-parameter name=
"U"/>
674 <template-type-parameter name=
"V"/>
676 <inherit><classname>proto::transform
</classname>< if_else_
<T, U, V
> ></inherit>
677 <purpose>A metafunction for generating ternary conditional expression types, a grammar element for
678 matching ternary conditional expressions, and
679 a
<conceptname>PrimitiveTransform
</conceptname>
680 that dispatches to the
681 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
685 <template-type-parameter name=
"Expr"/>
686 <template-type-parameter name=
"State"/>
687 <template-type-parameter name=
"Data"/>
690 <type><classname>proto::pass_through
</classname><if_else_
>::template impl
<Expr, State, Data
></type>
693 <typedef name=
"type">
694 <type><classname>proto::expr
</classname>< <classname>proto::tag::if_else_
</classname>,
<classname alt=
"proto::listN">proto::list3
</classname>< T, U, V
> ></type>
696 <typedef name=
"proto_grammar">
697 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::if_else_
</classname>,
<classname alt=
"proto::listN">proto::list3
</classname>< T, U, V
> ></type>
701 <struct name=
"unary_plus">
703 <template-type-parameter name=
"T"/>
705 <inherit><classname>proto::transform
</classname>< unary_plus
<T
> ></inherit>
706 <purpose>A metafunction for generating unary plus expression types,
707 a grammar element for matching unary plus expressions, and
708 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
709 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
713 <template-type-parameter name=
"Expr"/>
714 <template-type-parameter name=
"State"/>
715 <template-type-parameter name=
"Data"/>
718 <type><classname>proto::pass_through
</classname><unary_plus
>::template impl
<Expr, State, Data
></type>
721 <typedef name=
"type">
722 <type><classname>proto::expr
</classname>< <classname>proto::tag::unary_plus
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
724 <typedef name=
"proto_grammar">
725 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::unary_plus
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
729 <struct name=
"negate">
731 <template-type-parameter name=
"T"/>
733 <inherit><classname>proto::transform
</classname>< negate
<T
> ></inherit>
734 <purpose>A metafunction for generating unary minus expression types,
735 a grammar element for matching unary minus expressions, and
736 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
737 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
741 <template-type-parameter name=
"Expr"/>
742 <template-type-parameter name=
"State"/>
743 <template-type-parameter name=
"Data"/>
746 <type><classname>proto::pass_through
</classname><negate
>::template impl
<Expr, State, Data
></type>
749 <typedef name=
"type">
750 <type><classname>proto::expr
</classname>< <classname>proto::tag::negate
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
752 <typedef name=
"proto_grammar">
753 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::negate
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
757 <struct name=
"dereference">
759 <template-type-parameter name=
"T"/>
761 <inherit><classname>proto::transform
</classname>< dereference
<T
> ></inherit>
762 <purpose>A metafunction for generating defereference expression types,
763 a grammar element for matching dereference expressions, and
764 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
765 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
769 <template-type-parameter name=
"Expr"/>
770 <template-type-parameter name=
"State"/>
771 <template-type-parameter name=
"Data"/>
774 <type><classname>proto::pass_through
</classname><dereference
>::template impl
<Expr, State, Data
></type>
777 <typedef name=
"type">
778 <type><classname>proto::expr
</classname>< <classname>proto::tag::dereference
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
780 <typedef name=
"proto_grammar">
781 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::dereference
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
785 <struct name=
"complement">
787 <template-type-parameter name=
"T"/>
789 <inherit><classname>proto::transform
</classname>< complement
<T
> ></inherit>
790 <purpose>A metafunction for generating complement expression types,
791 a grammar element for matching complement expressions, and
792 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
793 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
797 <template-type-parameter name=
"Expr"/>
798 <template-type-parameter name=
"State"/>
799 <template-type-parameter name=
"Data"/>
802 <type><classname>proto::pass_through
</classname><complement
>::template impl
<Expr, State, Data
></type>
805 <typedef name=
"type">
806 <type><classname>proto::expr
</classname>< <classname>proto::tag::complement
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
808 <typedef name=
"proto_grammar">
809 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::complement
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
813 <struct name=
"address_of">
815 <template-type-parameter name=
"T"/>
817 <inherit><classname>proto::transform
</classname>< address_of
<T
> ></inherit>
818 <purpose>A metafunction for generating address_of expression types,
819 a grammar element for matching address_of expressions, and
820 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
821 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
825 <template-type-parameter name=
"Expr"/>
826 <template-type-parameter name=
"State"/>
827 <template-type-parameter name=
"Data"/>
830 <type><classname>proto::pass_through
</classname><address_of
>::template impl
<Expr, State, Data
></type>
833 <typedef name=
"type">
834 <type><classname>proto::expr
</classname>< <classname>proto::tag::address_of
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
836 <typedef name=
"proto_grammar">
837 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::address_of
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
841 <struct name=
"logical_not">
843 <template-type-parameter name=
"T"/>
845 <inherit><classname>proto::transform
</classname>< logical_not
<T
> ></inherit>
846 <purpose>A metafunction for generating logical_not expression types,
847 a grammar element for matching logical_not expressions, and
848 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
849 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
853 <template-type-parameter name=
"Expr"/>
854 <template-type-parameter name=
"State"/>
855 <template-type-parameter name=
"Data"/>
858 <type><classname>proto::pass_through
</classname><logical_not
>::template impl
<Expr, State, Data
></type>
861 <typedef name=
"type">
862 <type><classname>proto::expr
</classname>< <classname>proto::tag::logical_not
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
864 <typedef name=
"proto_grammar">
865 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::logical_not
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
869 <struct name=
"pre_inc">
871 <template-type-parameter name=
"T"/>
873 <inherit><classname>proto::transform
</classname>< pre_inc
<T
> ></inherit>
874 <purpose>A metafunction for generating pre-increment expression types,
875 a grammar element for matching pre-increment expressions, and
876 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
877 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
881 <template-type-parameter name=
"Expr"/>
882 <template-type-parameter name=
"State"/>
883 <template-type-parameter name=
"Data"/>
886 <type><classname>proto::pass_through
</classname><pre_inc
>::template impl
<Expr, State, Data
></type>
889 <typedef name=
"type">
890 <type><classname>proto::expr
</classname>< <classname>proto::tag::pre_inc
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
892 <typedef name=
"proto_grammar">
893 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::pre_inc
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
897 <struct name=
"pre_dec">
899 <template-type-parameter name=
"T"/>
901 <inherit><classname>proto::transform
</classname>< pre_dec
<T
> ></inherit>
902 <purpose>A metafunction for generating pre-decrement expression types,
903 a grammar element for matching pre-decrement expressions, and
904 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
905 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
909 <template-type-parameter name=
"Expr"/>
910 <template-type-parameter name=
"State"/>
911 <template-type-parameter name=
"Data"/>
914 <type><classname>proto::pass_through
</classname><pre_dec
>::template impl
<Expr, State, Data
></type>
917 <typedef name=
"type">
918 <type><classname>proto::expr
</classname>< <classname>proto::tag::pre_dec
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
920 <typedef name=
"proto_grammar">
921 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::pre_dec
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
925 <struct name=
"post_inc">
927 <template-type-parameter name=
"T"/>
929 <inherit><classname>proto::transform
</classname>< post_inc
<T
> ></inherit>
930 <purpose>A metafunction for generating post-increment expression types,
931 a grammar element for matching post-increment expressions, and
932 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
933 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
937 <template-type-parameter name=
"Expr"/>
938 <template-type-parameter name=
"State"/>
939 <template-type-parameter name=
"Data"/>
942 <type><classname>proto::pass_through
</classname><post_inc
>::template impl
<Expr, State, Data
></type>
945 <typedef name=
"type">
946 <type><classname>proto::expr
</classname>< <classname>proto::tag::post_inc
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
948 <typedef name=
"proto_grammar">
949 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::post_inc
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
953 <struct name=
"post_dec">
955 <template-type-parameter name=
"T"/>
957 <inherit><classname>proto::transform
</classname>< post_dec
<T
> ></inherit>
958 <purpose>A metafunction for generating post-decrement expression types,
959 a grammar element for matching post-decrement expressions, and
960 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
961 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
965 <template-type-parameter name=
"Expr"/>
966 <template-type-parameter name=
"State"/>
967 <template-type-parameter name=
"Data"/>
970 <type><classname>proto::pass_through
</classname><post_dec
>::template impl
<Expr, State, Data
></type>
973 <typedef name=
"type">
974 <type><classname>proto::expr
</classname>< <classname>proto::tag::post_dec
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
976 <typedef name=
"proto_grammar">
978 <classname>proto::basic_expr
</classname>< <classname>proto::tag::post_dec
</classname>,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> >
983 <struct name=
"shift_left">
985 <template-type-parameter name=
"T"/>
986 <template-type-parameter name=
"U"/>
988 <inherit><classname>proto::transform
</classname>< shift_left
<T, U
> ></inherit>
989 <purpose>A metafunction for generating left-shift expression types,
990 a grammar element for matching left-shift expressions, and
991 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
992 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
996 <template-type-parameter name=
"Expr"/>
997 <template-type-parameter name=
"State"/>
998 <template-type-parameter name=
"Data"/>
1001 <type><classname>proto::pass_through
</classname><shift_left
>::template impl
<Expr, State, Data
></type>
1004 <typedef name=
"type">
1005 <type><classname>proto::expr
</classname>< <classname>proto::tag::shift_left
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1007 <typedef name=
"proto_grammar">
1008 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::shift_left
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1012 <struct name=
"shift_right">
1014 <template-type-parameter name=
"T"/>
1015 <template-type-parameter name=
"U"/>
1017 <inherit><classname>proto::transform
</classname>< shift_right
<T, U
> ></inherit>
1018 <purpose>A metafunction for generating right-shift expression types,
1019 a grammar element for matching right-shift expressions, and a
1020 <conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1021 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1022 transform.
</purpose>
1023 <struct name=
"impl">
1025 <template-type-parameter name=
"Expr"/>
1026 <template-type-parameter name=
"State"/>
1027 <template-type-parameter name=
"Data"/>
1030 <type><classname>proto::pass_through
</classname><shift_right
>::template impl
<Expr, State, Data
></type>
1033 <typedef name=
"type">
1034 <type><classname>proto::expr
</classname>< <classname>proto::tag::shift_right
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1036 <typedef name=
"proto_grammar">
1037 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::shift_right
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1041 <struct name=
"multiplies">
1043 <template-type-parameter name=
"T"/>
1044 <template-type-parameter name=
"U"/>
1046 <inherit><classname>proto::transform
</classname>< multiplies
<T, U
> ></inherit>
1047 <purpose>A metafunction for generating multiplies expression types,
1048 a grammar element for matching multiplies expressions, and
1049 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1050 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1051 transform.
</purpose>
1052 <struct name=
"impl">
1054 <template-type-parameter name=
"Expr"/>
1055 <template-type-parameter name=
"State"/>
1056 <template-type-parameter name=
"Data"/>
1059 <type><classname>proto::pass_through
</classname><multiplies
>::template impl
<Expr, State, Data
></type>
1062 <typedef name=
"type">
1063 <type><classname>proto::expr
</classname>< <classname>proto::tag::multiplies
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1065 <typedef name=
"proto_grammar">
1066 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::multiplies
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1070 <struct name=
"divides">
1072 <template-type-parameter name=
"T"/>
1073 <template-type-parameter name=
"U"/>
1075 <inherit><classname>proto::transform
</classname>< divides
<T, U
> ></inherit>
1076 <purpose>A metafunction for generating divides expression types,
1077 a grammar element for matching divides expressions, and
1078 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1079 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1080 transform.
</purpose>
1081 <struct name=
"impl">
1083 <template-type-parameter name=
"Expr"/>
1084 <template-type-parameter name=
"State"/>
1085 <template-type-parameter name=
"Data"/>
1088 <type><classname>proto::pass_through
</classname><divides
>::template impl
<Expr, State, Data
></type>
1091 <typedef name=
"type">
1092 <type><classname>proto::expr
</classname>< <classname>proto::tag::divides
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1094 <typedef name=
"proto_grammar">
1095 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::divides
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1099 <struct name=
"modulus">
1101 <template-type-parameter name=
"T"/>
1102 <template-type-parameter name=
"U"/>
1104 <inherit><classname>proto::transform
</classname>< modulus
<T, U
> ></inherit>
1105 <purpose>A metafunction for generating modulus expression types,
1106 a grammar element for matching modulus expressions, and
1107 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1108 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1109 transform.
</purpose>
1110 <struct name=
"impl">
1112 <template-type-parameter name=
"Expr"/>
1113 <template-type-parameter name=
"State"/>
1114 <template-type-parameter name=
"Data"/>
1117 <type><classname>proto::pass_through
</classname><modulus
>::template impl
<Expr, State, Data
></type>
1120 <typedef name=
"type">
1121 <type><classname>proto::expr
</classname>< <classname>proto::tag::modulus
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1123 <typedef name=
"proto_grammar">
1124 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::modulus
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1128 <struct name=
"plus">
1130 <template-type-parameter name=
"T"/>
1131 <template-type-parameter name=
"U"/>
1133 <inherit><classname>proto::transform
</classname>< plus
<T, U
> ></inherit>
1134 <purpose>A metafunction for generating binary plus expression types,
1135 a grammar element for matching binary plus expressions, and
1136 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1137 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1138 transform.
</purpose>
1139 <struct name=
"impl">
1141 <template-type-parameter name=
"Expr"/>
1142 <template-type-parameter name=
"State"/>
1143 <template-type-parameter name=
"Data"/>
1146 <type><classname>proto::pass_through
</classname><plus
>::template impl
<Expr, State, Data
></type>
1149 <typedef name=
"type">
1150 <type><classname>proto::expr
</classname>< <classname>proto::tag::plus
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1152 <typedef name=
"proto_grammar">
1153 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::plus
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1157 <struct name=
"minus">
1159 <template-type-parameter name=
"T"/>
1160 <template-type-parameter name=
"U"/>
1162 <inherit><classname>proto::transform
</classname>< minus
<T, U
> ></inherit>
1163 <purpose>A metafunction for generating binary minus expression types,
1164 a grammar element for matching binary minus expressions, and
1165 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1166 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1167 transform.
</purpose>
1168 <struct name=
"impl">
1170 <template-type-parameter name=
"Expr"/>
1171 <template-type-parameter name=
"State"/>
1172 <template-type-parameter name=
"Data"/>
1175 <type><classname>proto::pass_through
</classname><minus
>::template impl
<Expr, State, Data
></type>
1178 <typedef name=
"type">
1179 <type><classname>proto::expr
</classname>< <classname>proto::tag::minus
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1181 <typedef name=
"proto_grammar">
1182 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::minus
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1186 <struct name=
"less">
1188 <template-type-parameter name=
"T"/>
1189 <template-type-parameter name=
"U"/>
1191 <inherit><classname>proto::transform
</classname>< less
<T, U
> ></inherit>
1192 <purpose>A metafunction for generating less expression types,
1193 a grammar element for matching less expressions, and
1194 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1195 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1196 transform.
</purpose>
1197 <struct name=
"impl">
1199 <template-type-parameter name=
"Expr"/>
1200 <template-type-parameter name=
"State"/>
1201 <template-type-parameter name=
"Data"/>
1204 <type><classname>proto::pass_through
</classname><less
>::template impl
<Expr, State, Data
></type>
1207 <typedef name=
"type">
1208 <type><classname>proto::expr
</classname>< <classname>proto::tag::less
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1210 <typedef name=
"proto_grammar">
1211 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::less
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1215 <struct name=
"greater">
1217 <template-type-parameter name=
"T"/>
1218 <template-type-parameter name=
"U"/>
1220 <inherit><classname>proto::transform
</classname>< greater
<T, U
> ></inherit>
1221 <purpose>A metafunction for generating greater expression types,
1222 a grammar element for matching greater expressions, and
1223 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1224 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1225 transform.
</purpose>
1226 <struct name=
"impl">
1228 <template-type-parameter name=
"Expr"/>
1229 <template-type-parameter name=
"State"/>
1230 <template-type-parameter name=
"Data"/>
1233 <type><classname>proto::pass_through
</classname><greater
>::template impl
<Expr, State, Data
></type>
1236 <typedef name=
"type">
1237 <type><classname>proto::expr
</classname>< <classname>proto::tag::greater
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1239 <typedef name=
"proto_grammar">
1240 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::greater
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1244 <struct name=
"less_equal">
1246 <template-type-parameter name=
"T"/>
1247 <template-type-parameter name=
"U"/>
1249 <inherit><classname>proto::transform
</classname>< less_equal
<T, U
> ></inherit>
1250 <purpose>A metafunction for generating less-or-equal expression types,
1251 a grammar element for matching less-or-equal expressions, and
1252 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1253 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1254 transform.
</purpose>
1255 <struct name=
"impl">
1257 <template-type-parameter name=
"Expr"/>
1258 <template-type-parameter name=
"State"/>
1259 <template-type-parameter name=
"Data"/>
1262 <type><classname>proto::pass_through
</classname><less_equal
>::template impl
<Expr, State, Data
></type>
1265 <typedef name=
"type">
1266 <type><classname>proto::expr
</classname>< <classname>proto::tag::less_equal
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1268 <typedef name=
"proto_grammar">
1269 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::less_equal
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1273 <struct name=
"greater_equal">
1275 <template-type-parameter name=
"T"/>
1276 <template-type-parameter name=
"U"/>
1278 <inherit><classname>proto::transform
</classname>< greater_equal
<T, U
> ></inherit>
1279 <purpose>A metafunction for generating greater-or-equal expression types,
1280 a grammar element for matching greater-or-equal expressions, and
1281 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1282 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1283 transform.
</purpose>
1284 <struct name=
"impl">
1286 <template-type-parameter name=
"Expr"/>
1287 <template-type-parameter name=
"State"/>
1288 <template-type-parameter name=
"Data"/>
1291 <type><classname>proto::pass_through
</classname><greater_equal
>::template impl
<Expr, State, Data
></type>
1294 <typedef name=
"type">
1295 <type><classname>proto::expr
</classname>< <classname>proto::tag::greater_equal
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1297 <typedef name=
"proto_grammar">
1298 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::greater_equal
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1302 <struct name=
"equal_to">
1304 <template-type-parameter name=
"T"/>
1305 <template-type-parameter name=
"U"/>
1307 <inherit><classname>proto::transform
</classname>< equal_to
<T, U
> ></inherit>
1308 <purpose>A metafunction for generating equal-to expression types,
1309 a grammar element for matching equal-to expressions, and
1310 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1311 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1312 transform.
</purpose>
1313 <struct name=
"impl">
1315 <template-type-parameter name=
"Expr"/>
1316 <template-type-parameter name=
"State"/>
1317 <template-type-parameter name=
"Data"/>
1320 <type><classname>proto::pass_through
</classname><equal_to
>::template impl
<Expr, State, Data
></type>
1323 <typedef name=
"type">
1324 <type><classname>proto::expr
</classname>< <classname>proto::tag::equal_to
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1326 <typedef name=
"proto_grammar">
1327 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::equal_to
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1331 <struct name=
"not_equal_to">
1333 <template-type-parameter name=
"T"/>
1334 <template-type-parameter name=
"U"/>
1336 <inherit><classname>proto::transform
</classname>< not_equal_to
<T, U
> ></inherit>
1337 <purpose>A metafunction for generating not-equal-to expression types,
1338 a grammar element for matching not-equal-to expressions, and
1339 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1340 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1341 transform.
</purpose>
1342 <struct name=
"impl">
1344 <template-type-parameter name=
"Expr"/>
1345 <template-type-parameter name=
"State"/>
1346 <template-type-parameter name=
"Data"/>
1349 <type><classname>proto::pass_through
</classname><mot_equal_to
>::template impl
<Expr, State, Data
></type>
1352 <typedef name=
"type">
1353 <type><classname>proto::expr
</classname>< <classname>proto::tag::not_equal_to
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1355 <typedef name=
"proto_grammar">
1356 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::not_equal_to
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1360 <struct name=
"logical_or">
1362 <template-type-parameter name=
"T"/>
1363 <template-type-parameter name=
"U"/>
1365 <inherit><classname>proto::transform
</classname>< logical_or
<T, U
> ></inherit>
1366 <purpose>A metafunction for generating logical-or expression types,
1367 a grammar element for matching logical-or expressions, and
1368 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1369 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1370 transform.
</purpose>
1371 <struct name=
"impl">
1373 <template-type-parameter name=
"Expr"/>
1374 <template-type-parameter name=
"State"/>
1375 <template-type-parameter name=
"Data"/>
1378 <type><classname>proto::pass_through
</classname><logical_or
>::template impl
<Expr, State, Data
></type>
1381 <typedef name=
"type">
1382 <type><classname>proto::expr
</classname>< <classname>proto::tag::logical_or
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1384 <typedef name=
"proto_grammar">
1385 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::logical_or
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1389 <struct name=
"logical_and">
1391 <template-type-parameter name=
"T"/>
1392 <template-type-parameter name=
"U"/>
1394 <inherit><classname>proto::transform
</classname>< logical_and
<T, U
> ></inherit>
1395 <purpose>A metafunction for generating logical-and expression types,
1396 a grammar element for matching logical-and expressions, and
1397 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1398 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1399 transform.
</purpose>
1400 <struct name=
"impl">
1402 <template-type-parameter name=
"Expr"/>
1403 <template-type-parameter name=
"State"/>
1404 <template-type-parameter name=
"Data"/>
1407 <type><classname>proto::pass_through
</classname><logical_and
>::template impl
<Expr, State, Data
></type>
1410 <typedef name=
"type">
1411 <type><classname>proto::expr
</classname>< <classname>proto::tag::logical_and
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1413 <typedef name=
"proto_grammar">
1414 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::logical_and
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1418 <struct name=
"bitwise_and">
1420 <template-type-parameter name=
"T"/>
1421 <template-type-parameter name=
"U"/>
1423 <inherit><classname>proto::transform
</classname>< bitwise_and
<T, U
> ></inherit>
1424 <purpose>A metafunction for generating bitwise-and expression types,
1425 a grammar element for matching bitwise-and expressions, and
1426 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1427 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1428 transform.
</purpose>
1429 <struct name=
"impl">
1431 <template-type-parameter name=
"Expr"/>
1432 <template-type-parameter name=
"State"/>
1433 <template-type-parameter name=
"Data"/>
1436 <type><classname>proto::pass_through
</classname><bitwise_and
>::template impl
<Expr, State, Data
></type>
1439 <typedef name=
"type">
1440 <type><classname>proto::expr
</classname>< <classname>proto::tag::bitwise_and
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1442 <typedef name=
"proto_grammar">
1443 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::bitwise_and
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1447 <struct name=
"bitwise_or">
1449 <template-type-parameter name=
"T"/>
1450 <template-type-parameter name=
"U"/>
1452 <inherit><classname>proto::transform
</classname>< bitwise_or
<T, U
> ></inherit>
1453 <purpose>A metafunction for generating bitwise-or expression types,
1454 a grammar element for matching bitwise-or expressions, and
1455 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1456 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1457 transform.
</purpose>
1458 <struct name=
"impl">
1460 <template-type-parameter name=
"Expr"/>
1461 <template-type-parameter name=
"State"/>
1462 <template-type-parameter name=
"Data"/>
1465 <type><classname>proto::pass_through
</classname><bitwise_or
>::template impl
<Expr, State, Data
></type>
1468 <typedef name=
"type">
1469 <type><classname>proto::expr
</classname>< <classname>proto::tag::bitwise_or
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1471 <typedef name=
"proto_grammar">
1472 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::bitwise_or
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1476 <struct name=
"bitwise_xor">
1478 <template-type-parameter name=
"T"/>
1479 <template-type-parameter name=
"U"/>
1481 <inherit><classname>proto::transform
</classname>< bitwise_xor
<T, U
> ></inherit>
1482 <purpose>A metafunction for generating bitwise-xor expression types,
1483 a grammar element for matching bitwise-xor expressions, and
1484 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1485 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1486 transform.
</purpose>
1487 <struct name=
"impl">
1489 <template-type-parameter name=
"Expr"/>
1490 <template-type-parameter name=
"State"/>
1491 <template-type-parameter name=
"Data"/>
1494 <type><classname>proto::pass_through
</classname><bitwise_xor
>::template impl
<Expr, State, Data
></type>
1497 <typedef name=
"type">
1498 <type><classname>proto::expr
</classname>< <classname>proto::tag::bitwise_xor
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1500 <typedef name=
"proto_grammar">
1501 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::bitwise_xor
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1505 <struct name=
"comma">
1507 <template-type-parameter name=
"T"/>
1508 <template-type-parameter name=
"U"/>
1510 <inherit><classname>proto::transform
</classname>< comma
<T, U
> ></inherit>
1511 <purpose>A metafunction for generating comma expression types,
1512 a grammar element for matching comma expressions, and
1513 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1514 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1515 transform.
</purpose>
1516 <struct name=
"impl">
1518 <template-type-parameter name=
"Expr"/>
1519 <template-type-parameter name=
"State"/>
1520 <template-type-parameter name=
"Data"/>
1523 <type><classname>proto::pass_through
</classname><comma
>::template impl
<Expr, State, Data
></type>
1526 <typedef name=
"type">
1527 <type><classname>proto::expr
</classname>< <classname>proto::tag::comma
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1529 <typedef name=
"proto_grammar">
1530 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::comma
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1534 <struct name=
"mem_ptr">
1536 <template-type-parameter name=
"T"/>
1537 <template-type-parameter name=
"U"/>
1539 <inherit><classname>proto::transform
</classname>< mem_ptr
<T, U
> ></inherit>
1540 <struct name=
"impl">
1542 <template-type-parameter name=
"Expr"/>
1543 <template-type-parameter name=
"State"/>
1544 <template-type-parameter name=
"Data"/>
1547 <type><classname>proto::pass_through
</classname><mem_ptr
>::template impl
<Expr, State, Data
></type>
1550 <typedef name=
"type">
1551 <type><classname>proto::expr
</classname>< <classname>proto::tag::mem_ptr
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1553 <typedef name=
"proto_grammar">
1554 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::mem_ptr
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1558 <struct name=
"assign">
1560 <template-type-parameter name=
"T"/>
1561 <template-type-parameter name=
"U"/>
1563 <inherit><classname>proto::transform
</classname>< assign
<T, U
> ></inherit>
1564 <purpose>A metafunction for generating assignment expression types,
1565 a grammar element for matching assignment expressions, and
1566 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1567 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1568 transform.
</purpose>
1569 <struct name=
"impl">
1571 <template-type-parameter name=
"Expr"/>
1572 <template-type-parameter name=
"State"/>
1573 <template-type-parameter name=
"Data"/>
1576 <type><classname>proto::pass_through
</classname><assign
>::template impl
<Expr, State, Data
></type>
1579 <typedef name=
"type">
1580 <type><classname>proto::expr
</classname>< <classname>proto::tag::assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1582 <typedef name=
"proto_grammar">
1583 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1587 <struct name=
"shift_left_assign">
1589 <template-type-parameter name=
"T"/>
1590 <template-type-parameter name=
"U"/>
1592 <inherit><classname>proto::transform
</classname>< shift_left_assign
<T, U
> ></inherit>
1593 <purpose>A metafunction for generating left-shift-assign expression types,
1594 a grammar element for matching left-shift-assign expressions, and
1595 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1596 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1597 transform.
</purpose>
1598 <struct name=
"impl">
1600 <template-type-parameter name=
"Expr"/>
1601 <template-type-parameter name=
"State"/>
1602 <template-type-parameter name=
"Data"/>
1605 <type><classname>proto::pass_through
</classname><shift_left_assign
>::template impl
<Expr, State, Data
></type>
1608 <typedef name=
"type">
1609 <type><classname>proto::expr
</classname>< <classname>proto::tag::shift_left_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1611 <typedef name=
"proto_grammar">
1612 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::shift_left_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1616 <struct name=
"shift_right_assign">
1618 <template-type-parameter name=
"T"/>
1619 <template-type-parameter name=
"U"/>
1621 <inherit><classname>proto::transform
</classname>< shift_right_assign
<T, U
> ></inherit>
1622 <purpose>A metafunction for generating right-shift-assign expression types,
1623 a grammar element for matching right-shift-assign expressions, and
1624 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1625 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1626 transform.
</purpose>
1627 <struct name=
"impl">
1629 <template-type-parameter name=
"Expr"/>
1630 <template-type-parameter name=
"State"/>
1631 <template-type-parameter name=
"Data"/>
1634 <type><classname>proto::pass_through
</classname><shift_right_assign
>::template impl
<Expr, State, Data
></type>
1637 <typedef name=
"type">
1638 <type><classname>proto::expr
</classname>< <classname>proto::tag::shift_right_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1640 <typedef name=
"proto_grammar">
1641 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::shift_right_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1645 <struct name=
"multiplies_assign">
1647 <template-type-parameter name=
"T"/>
1648 <template-type-parameter name=
"U"/>
1650 <inherit><classname>proto::transform
</classname>< multiplies_assign
<T, U
> ></inherit>
1651 <purpose>A metafunction for generating multiplies-assign expression types,
1652 a grammar element for matching multiplies-assign expressions, and
1653 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1654 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1655 transform.
</purpose>
1656 <struct name=
"impl">
1658 <template-type-parameter name=
"Expr"/>
1659 <template-type-parameter name=
"State"/>
1660 <template-type-parameter name=
"Data"/>
1663 <type><classname>proto::pass_through
</classname><multiplies_assign
>::template impl
<Expr, State, Data
></type>
1666 <typedef name=
"type">
1667 <type><classname>proto::expr
</classname>< <classname>proto::tag::multiplies_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1669 <typedef name=
"proto_grammar">
1670 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::multiplies_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1674 <struct name=
"divides_assign">
1676 <template-type-parameter name=
"T"/>
1677 <template-type-parameter name=
"U"/>
1679 <inherit><classname>proto::transform
</classname>< divides_assign
<T, U
> ></inherit>
1680 <purpose>A metafunction for generating divides-assign expression types,
1681 a grammar element for matching divides-assign expressions, and
1682 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1683 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1684 transform.
</purpose>
1685 <struct name=
"impl">
1687 <template-type-parameter name=
"Expr"/>
1688 <template-type-parameter name=
"State"/>
1689 <template-type-parameter name=
"Data"/>
1692 <type><classname>proto::pass_through
</classname><divides_assign
>::template impl
<Expr, State, Data
></type>
1695 <typedef name=
"type">
1696 <type><classname>proto::expr
</classname>< <classname>proto::tag::divides_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1698 <typedef name=
"proto_grammar">
1699 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::divides_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1703 <struct name=
"modulus_assign">
1705 <template-type-parameter name=
"T"/>
1706 <template-type-parameter name=
"U"/>
1708 <inherit><classname>proto::transform
</classname>< modulus_assign
<T, U
> ></inherit>
1709 <purpose>A metafunction for generating modulus-assign expression types,
1710 a grammar element for matching modulus-assign expressions, and
1711 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1712 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1713 transform.
</purpose>
1714 <struct name=
"impl">
1716 <template-type-parameter name=
"Expr"/>
1717 <template-type-parameter name=
"State"/>
1718 <template-type-parameter name=
"Data"/>
1721 <type><classname>proto::pass_through
</classname><modulus_assign
>::template impl
<Expr, State, Data
></type>
1724 <typedef name=
"type">
1725 <type><classname>proto::expr
</classname>< <classname>proto::tag::modulus_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1727 <typedef name=
"proto_grammar">
1728 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::modulus_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1732 <struct name=
"plus_assign">
1734 <template-type-parameter name=
"T"/>
1735 <template-type-parameter name=
"U"/>
1737 <inherit><classname>proto::transform
</classname>< plus_assign
<T, U
> ></inherit>
1738 <purpose>A metafunction for generating plus-assign expression types,
1739 a grammar element for matching plus-assign expressions, and
1740 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1741 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1742 transform.
</purpose>
1743 <struct name=
"impl">
1745 <template-type-parameter name=
"Expr"/>
1746 <template-type-parameter name=
"State"/>
1747 <template-type-parameter name=
"Data"/>
1750 <type><classname>proto::pass_through
</classname><plus_assign
>::template impl
<Expr, State, Data
></type>
1753 <typedef name=
"type">
1754 <type><classname>proto::expr
</classname>< <classname>proto::tag::plus_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1756 <typedef name=
"proto_grammar">
1757 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::plus_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1761 <struct name=
"minus_assign">
1763 <template-type-parameter name=
"T"/>
1764 <template-type-parameter name=
"U"/>
1766 <inherit><classname>proto::transform
</classname>< minus_assign
<T, U
> ></inherit>
1767 <purpose>A metafunction for generating minus-assign expression types,
1768 a grammar element for matching minus-assign expressions, and
1769 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1770 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1771 transform.
</purpose>
1772 <struct name=
"impl">
1774 <template-type-parameter name=
"Expr"/>
1775 <template-type-parameter name=
"State"/>
1776 <template-type-parameter name=
"Data"/>
1779 <type><classname>proto::pass_through
</classname><minus_assign
>::template impl
<Expr, State, Data
></type>
1782 <typedef name=
"type">
1783 <type><classname>proto::expr
</classname>< <classname>proto::tag::minus_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1785 <typedef name=
"proto_grammar">
1786 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::minus_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1790 <struct name=
"bitwise_and_assign">
1792 <template-type-parameter name=
"T"/>
1793 <template-type-parameter name=
"U"/>
1795 <inherit><classname>proto::transform
</classname>< bitwise_and_assign
<T, U
> ></inherit>
1796 <purpose>A metafunction for generating bitwise-and-assign expression types,
1797 a grammar element for matching bitwise-and-assign expressions, and
1798 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1799 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1800 transform.
</purpose>
1801 <struct name=
"impl">
1803 <template-type-parameter name=
"Expr"/>
1804 <template-type-parameter name=
"State"/>
1805 <template-type-parameter name=
"Data"/>
1808 <type><classname>proto::pass_through
</classname><bitwise_and_assign
>::template impl
<Expr, State, Data
></type>
1811 <typedef name=
"type">
1812 <type><classname>proto::expr
</classname>< <classname>proto::tag::bitwise_and_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1814 <typedef name=
"proto_grammar">
1815 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::bitwise_and_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1819 <struct name=
"bitwise_or_assign">
1821 <template-type-parameter name=
"T"/>
1822 <template-type-parameter name=
"U"/>
1824 <inherit><classname>proto::transform
</classname>< bitwise_or_assign
<T, U
> ></inherit>
1825 <purpose>A metafunction for generating bitwise-or-assign expression types,
1826 a grammar element for matching bitwise-or-assign expressions, and
1827 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1828 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1829 transform.
</purpose>
1830 <struct name=
"impl">
1832 <template-type-parameter name=
"Expr"/>
1833 <template-type-parameter name=
"State"/>
1834 <template-type-parameter name=
"Data"/>
1837 <type><classname>proto::pass_through
</classname><bitwise_or_assign
>::template impl
<Expr, State, Data
></type>
1840 <typedef name=
"type">
1841 <type><classname>proto::expr
</classname>< <classname>proto::tag::bitwise_or_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1843 <typedef name=
"proto_grammar">
1844 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::bitwise_or_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1848 <struct name=
"bitwise_xor_assign">
1850 <template-type-parameter name=
"T"/>
1851 <template-type-parameter name=
"U"/>
1853 <inherit><classname>proto::transform
</classname>< bitwise_xor_assign
<T, U
> ></inherit>
1854 <purpose>A metafunction for generating bitwise-xor-assign expression types,
1855 a grammar element for matching bitwise-xor-assign expressions, and
1856 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1857 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1858 transform.
</purpose>
1859 <struct name=
"impl">
1861 <template-type-parameter name=
"Expr"/>
1862 <template-type-parameter name=
"State"/>
1863 <template-type-parameter name=
"Data"/>
1866 <type><classname>proto::pass_through
</classname><bitwise_xor_assign
>::template impl
<Expr, State, Data
></type>
1869 <typedef name=
"type">
1870 <type><classname>proto::expr
</classname>< <classname>proto::tag::bitwise_xor_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1872 <typedef name=
"proto_grammar">
1873 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::bitwise_xor_assign
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1877 <struct name=
"subscript">
1879 <template-type-parameter name=
"T"/>
1880 <template-type-parameter name=
"U"/>
1882 <inherit><classname>proto::transform
</classname>< subscript
<T, U
> ></inherit>
1883 <purpose>A metafunction for generating subscript expression types,
1884 a grammar element for matching subscript expressions, and
1885 a
<conceptname>PrimitiveTransform
</conceptname> that dispatches to the
1886 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1887 transform.
</purpose>
1888 <struct name=
"impl">
1890 <template-type-parameter name=
"Expr"/>
1891 <template-type-parameter name=
"State"/>
1892 <template-type-parameter name=
"Data"/>
1895 <type><classname>proto::pass_through
</classname><subscript
>::template impl
<Expr, State, Data
></type>
1898 <typedef name=
"type">
1899 <type><classname>proto::expr
</classname>< <classname>proto::tag::subscript
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1901 <typedef name=
"proto_grammar">
1902 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::subscript
</classname>,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
1906 <struct name=
"function">
1908 <template-type-parameter name=
"A" pack=
"1"/>
1910 <inherit><classname>proto::transform
</classname>< function
<A...
> ></inherit>
1911 <purpose>A metafunction for generating function-call expression types, a grammar element for
1912 matching function-call expressions, and
1913 a
<conceptname>PrimitiveTransform
</conceptname>
1914 that dispatches to the
1915 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
1916 transform.
</purpose>
1917 <struct name=
"impl">
1919 <template-type-parameter name=
"Expr"/>
1920 <template-type-parameter name=
"State"/>
1921 <template-type-parameter name=
"Data"/>
1924 <type><classname>proto::pass_through
</classname><function
>::template impl
<Expr, State, Data
></type>
1927 <typedef name=
"type">
1928 <type><classname>proto::expr
</classname>< <classname>proto::tag::function
</classname>,
<classname alt=
"proto::listN">proto::list
<replaceable>N
</replaceable></classname>< A...
> ></type>
1930 <typedef name=
"proto_grammar">
1931 <type><classname>proto::basic_expr
</classname>< <classname>proto::tag::function
</classname>,
<classname alt=
"proto::listN">proto::list
<replaceable>N
</replaceable></classname>< A...
> ></type>
1935 <struct name=
"nullary_expr">
1937 <template-type-parameter name=
"Tag"/>
1938 <template-type-parameter name=
"T"/>
1940 <inherit><classname>proto::transform
</classname>< nullary_expr
<Tag, T
> ></inherit>
1941 <purpose>A metafunction for generating nullary expression types, a grammar element for matching
1942 nullary expressions, and
1943 a
<conceptname>PrimitiveTransform
</conceptname> that returns the current expression unchanged.
</purpose>
1946 Use
<computeroutput>proto::nullary_expr
<<classname>proto::_
</classname>,
<classname>proto::_
</classname>></computeroutput>
1947 as a grammar element to match any nullary expression.
1950 <struct name=
"impl">
1952 <template-type-parameter name=
"Expr"/>
1953 <template-type-parameter name=
"State"/>
1954 <template-type-parameter name=
"Data"/>
1956 <inherit><classname>proto::transform_impl
</classname>< Expr, State, Data
></inherit>
1957 <typedef name=
"result_type">
1960 <method-group name=
"public member functions">
1961 <method name=
"operator()" cv=
"const">
1963 <parameter name=
"expr">
1964 <paramtype>typename impl::expr_param
</paramtype>
1966 <para>The current expression
</para>
1970 <paramtype>typename impl::state_param
</paramtype>
1973 <paramtype>typename impl::data_param
</paramtype>
1977 <computeroutput><classname>proto::matches
</classname><Expr, proto::nullary_expr
<Tag, T
> >::value
</computeroutput> is
<computeroutput>true
</computeroutput>.
1982 <computeroutput>expr
</computeroutput>
1986 <simpara>Will not throw.
</simpara>
1991 <typedef name=
"type">
1992 <type><classname>proto::expr
</classname>< Tag,
<classname>proto::term
</classname>< T
> ></type>
1994 <typedef name=
"proto_grammar">
1995 <type><classname>proto::basic_expr
</classname>< Tag,
<classname>proto::term
</classname>< T
> ></type>
1999 <struct name=
"unary_expr">
2001 <template-type-parameter name=
"Tag"/>
2002 <template-type-parameter name=
"T"/>
2004 <inherit><classname>proto::transform
</classname>< unary_expr
<Tag, T
> ></inherit>
2005 <purpose>A metafunction for generating unary expression types with a specified tag type,
2006 a grammar element for matching unary expressions, and
2007 a
<conceptname>PrimitiveTransform
</conceptname>
2008 that dispatches to the
2009 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
2010 transform.
</purpose>
2013 Use
<computeroutput>proto::unary_expr
<<classname>proto::_
</classname>,
<classname>proto::_
</classname>></computeroutput>
2014 as a grammar element to match any unary expression.
2017 <struct name=
"impl">
2019 <template-type-parameter name=
"Expr"/>
2020 <template-type-parameter name=
"State"/>
2021 <template-type-parameter name=
"Data"/>
2024 <type><classname>proto::pass_through
</classname><unary_expr
>::template impl
<Expr, State, Data
></type>
2027 <typedef name=
"type">
2028 <type><classname>proto::expr
</classname>< Tag,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
2030 <typedef name=
"proto_grammar">
2031 <type><classname>proto::basic_expr
</classname>< Tag,
<classname alt=
"proto::listN">proto::list1
</classname>< T
> ></type>
2035 <struct name=
"binary_expr">
2037 <template-type-parameter name=
"Tag"/>
2038 <template-type-parameter name=
"T"/>
2039 <template-type-parameter name=
"U"/>
2041 <inherit><classname>proto::transform
</classname>< binary_expr
<Tag, T, U
> ></inherit>
2042 <purpose>A metafunction for generating binary expression types with a specified tag type,
2043 a grammar element for matching binary expressions, and
2044 a
<conceptname>PrimitiveTransform
</conceptname>
2045 that dispatches to the
2046 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
2047 transform.
</purpose>
2050 Use
<computeroutput>proto::binary_expr
<<classname>proto::_
</classname>,
<classname>proto::_
</classname>,
<classname>proto::_
</classname>></computeroutput> as a grammar element to match any binary expression.
2053 <struct name=
"impl">
2055 <template-type-parameter name=
"Expr"/>
2056 <template-type-parameter name=
"State"/>
2057 <template-type-parameter name=
"Data"/>
2060 <type><classname>proto::pass_through
</classname><binary_expr
>::template impl
<Expr, State, Data
></type>
2063 <typedef name=
"type">
2064 <type><classname>proto::expr
</classname>< Tag,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
2066 <typedef name=
"proto_grammar">
2067 <type><classname>proto::basic_expr
</classname>< Tag,
<classname alt=
"proto::listN">proto::list2
</classname>< T, U
> ></type>
2071 <struct name=
"nary_expr">
2073 <template-type-parameter name=
"Tag"/>
2074 <template-type-parameter name=
"A" pack=
"1"/>
2076 <inherit><classname>proto::transform
</classname>< nary_expr
<Tag, A...
> ></inherit>
2077 <purpose>A metafunction for generating n-ary expression types with a specified tag type,
2078 a grammar element for matching n-ary expressions, and
2079 a
<conceptname>PrimitiveTransform
</conceptname>
2080 that dispatches to the
2081 <computeroutput><classname alt=
"proto::pass_through">proto::pass_through
<></classname></computeroutput>
2082 transform.
</purpose>
2085 Use
<computeroutput>proto::nary_expr
<<classname>proto::_
</classname>,
<classname>proto::vararg
</classname><<classname>proto::_
</classname>> ></computeroutput>
2086 as a grammar element to match any n-ary expression; that is, any non-terminal.
2089 <struct name=
"impl">
2091 <template-type-parameter name=
"Expr"/>
2092 <template-type-parameter name=
"State"/>
2093 <template-type-parameter name=
"Data"/>
2096 <type><classname>proto::pass_through
</classname><nary_expr
>::template impl
<Expr, State, Data
></type>
2099 <typedef name=
"type">
2100 <type><classname>proto::expr
</classname>< Tag,
<classname alt=
"proto::listN">proto::list
<replaceable>N
</replaceable></classname>< A...
> ></type>
2102 <typedef name=
"proto_grammar">
2103 <type><classname>proto::basic_expr
</classname>< Tag,
<classname alt=
"proto::listN">proto::list
<replaceable>N
</replaceable></classname>< A...
> ></type>
2107 <struct name=
"is_expr">
2109 <template-type-parameter name=
"T"/>
2111 <inherit><type>mpl::bool_
<<replaceable>true-or-false
</replaceable>></type></inherit>
2112 <purpose>A Boolean metafunction that indicates whether a given type
<computeroutput>T
</computeroutput>
2113 is a Proto expression type.
</purpose>
2116 If
<computeroutput>T
</computeroutput> is an instantiation of
2117 <computeroutput><classname alt=
"proto::expr">proto::expr
<></classname></computeroutput> or
2118 <computeroutput><classname alt=
"proto::basic_expr">proto::basic_expr
<></classname></computeroutput> or is an extension
2119 (via
<classname alt=
"proto::extends">proto::extends
<></classname> or
2120 <macroname>BOOST_PROTO_EXTENDS
</macroname>()) of such an instantiation,
2121 <computeroutput><classname>proto::is_expr
</classname><T
>::value
</computeroutput>
2122 is
<computeroutput>true
</computeroutput>.
2123 Otherwise,
<computeroutput><classname>proto::is_expr
</classname><T
>::value
</computeroutput>
2124 is
<computeroutput>false
</computeroutput>.
2129 <struct name=
"tag_of">
2131 <template-type-parameter name=
"Expr"/>
2133 <purpose>A metafunction that returns the tag type of a Proto expression.
</purpose>
2134 <typedef name=
"type">
2135 <type>typename Expr::proto_tag
</type>
2139 <struct name=
"arity_of">
2141 <template-type-parameter name=
"Expr"/>
2143 <purpose>A metafunction that returns the arity of a Proto expression.
</purpose>
2144 <inherit><type>Expr::proto_arity
</type></inherit>
2147 <namespace name=
"result_of">
2148 <struct name=
"as_expr">
2150 <template-type-parameter name=
"T"/>
2151 <template-type-parameter name=
"Domain">
2152 <default><classname>proto::default_domain
</classname></default>
2153 </template-type-parameter>
2155 <purpose>A metafunction that computes the return type of the
2156 <computeroutput><functionname>proto::as_expr
</functionname>()
</computeroutput> function.
</purpose>
2159 The
<computeroutput>proto::result_of::as_expr
<></computeroutput> metafunction turns types
2160 into Proto expression types, if they are not already, in a domain-specific way. It is intended
2161 for use to compute the type of a local variable that can hold the result of the
2162 <computeroutput><functionname>proto::as_expr
</functionname>()
</computeroutput> function.
2165 See
<computeroutput><classname>proto::domain::as_expr
</classname><></computeroutput>
2166 for a complete description of the default behavior.
2169 <typedef name=
"type">
2170 <type>typename Domain::template as_expr
< T
>::result_type
</type>
2174 <struct name=
"as_child">
2176 <template-type-parameter name=
"T"/>
2177 <template-type-parameter name=
"Domain">
2178 <default><classname>proto::default_domain
</classname></default>
2179 </template-type-parameter>
2181 <purpose>A metafunction that computes the return type of the
2182 <computeroutput><functionname>proto::as_child
</functionname>()
</computeroutput> function.
</purpose>
2185 The
<computeroutput>proto::result_of::as_child
<></computeroutput> metafunction turns types
2186 into Proto expression types, if they are not already, in a domain-specific way. It is used by Proto
2187 to compute the type of an object to store as a child in another expression node.
2190 See
<computeroutput><classname>proto::domain::as_child
</classname><></computeroutput>
2191 for a complete description of the default behavior.
2194 <typedef name=
"type">
2195 <type>typename Domain::template as_child
< T
>::result_type
</type>
2199 <struct name=
"child">
2201 <template-type-parameter name=
"Expr"/>
2202 <template-type-parameter name=
"N">
2203 <default>mpl::long_
<0></default>
2204 </template-type-parameter>
2206 <inherit><type><classname>proto::result_of::child_c
</classname><Expr, N::value
></type></inherit>
2207 <purpose>A metafunction that returns the type of the
<replaceable>N
</replaceable><superscript>th
</superscript>
2208 child of a Proto expression, where N is an MPL Integral Constant.
</purpose>
2211 <computeroutput>proto::result_of::child
<Expr, N
></computeroutput> is equivalent to
2212 <computeroutput><classname>proto::result_of::child_c
</classname><Expr, N::value
></computeroutput>.
2217 <struct name=
"value">
2219 <template-type-parameter name=
"Expr"/>
2221 <purpose>A metafunction that returns the type of the value of a terminal Proto expression.
</purpose>
2222 <typedef name=
"value_type">
2225 The raw type of the value as it is
2226 stored within
<computeroutput>Expr
</computeroutput>. This may be a value or a reference.
2229 <type>typename Expr::proto_child0
</type>
2231 <typedef name=
"type">
2234 If
<computeroutput>Expr
</computeroutput> is not a reference type,
<computeroutput>type
</computeroutput>
2235 is computed as follows:
2239 <computeroutput>T const(
&)[N]
</computeroutput> becomes
<computeroutput>T[N]
</computeroutput>
2244 <computeroutput>T[N]
</computeroutput> becomes
<computeroutput>T[N]
</computeroutput>
2249 <computeroutput>T(
&)[N]
</computeroutput> becomes
<computeroutput>T[N]
</computeroutput>
2254 <computeroutput>R(
&)(A...)
</computeroutput> becomes
<computeroutput>R(
&)(A...)
</computeroutput>
2259 <computeroutput>T const
&</computeroutput> becomes
<computeroutput>T
</computeroutput>
2264 <computeroutput>T
&</computeroutput> becomes
<computeroutput>T
</computeroutput>
2269 <computeroutput>T
</computeroutput> becomes
<computeroutput>T
</computeroutput>
2275 If
<computeroutput>Expr
</computeroutput> is a non-const reference type,
<computeroutput>type
</computeroutput>
2276 is computed as follows:
2280 <computeroutput>T const(
&)[N]
</computeroutput> becomes
<computeroutput>T const(
&)[N]
</computeroutput>
2285 <computeroutput>T[N]
</computeroutput> becomes
<computeroutput>T(
&)[N]
</computeroutput>
2290 <computeroutput>T(
&)[N]
</computeroutput> becomes
<computeroutput>T(
&)[N]
</computeroutput>
2295 <computeroutput>R(
&)(A...)
</computeroutput> becomes
<computeroutput>R(
&)(A...)
</computeroutput>
2300 <computeroutput>T const
&</computeroutput> becomes
<computeroutput>T const
&</computeroutput>
2305 <computeroutput>T
&</computeroutput> becomes
<computeroutput>T
&</computeroutput>
2310 <computeroutput>T
</computeroutput> becomes
<computeroutput>T
&</computeroutput>
2316 If
<computeroutput>Expr
</computeroutput> is a const reference type,
<computeroutput>type
</computeroutput>
2317 is computed as follows:
2321 <computeroutput>T const(
&)[N]
</computeroutput> becomes
<computeroutput>T const(
&)[N]
</computeroutput>
2326 <computeroutput>T[N]
</computeroutput> becomes
<computeroutput>T const(
&)[N]
</computeroutput>
2331 <computeroutput>T(
&)[N]
</computeroutput> becomes
<computeroutput>T(
&)[N]
</computeroutput>
2336 <computeroutput>R(
&)(A...)
</computeroutput> becomes
<computeroutput>R(
&)(A...)
</computeroutput>
2341 <computeroutput>T const
&</computeroutput> becomes
<computeroutput>T const
&</computeroutput>
2346 <computeroutput>T
&</computeroutput> becomes
<computeroutput>T
&</computeroutput>
2351 <computeroutput>T
</computeroutput> becomes
<computeroutput>T const
&</computeroutput>
2357 <type><replaceable>see-below
</replaceable></type>
2361 <struct name=
"left">
2363 <template-type-parameter name=
"Expr"/>
2365 <inherit>proto::result_of::child_c
< Expr,
0 ></inherit>
2366 <purpose>A metafunction that returns the type of the left child of a binary Proto expression.
</purpose>
2369 <computeroutput>proto::result_of::left
<Expr
></computeroutput> is equivalent to
2370 <computeroutput><classname>proto::result_of::child_c
</classname><Expr,
0></computeroutput>.
2375 <struct name=
"right">
2377 <template-type-parameter name=
"Expr"/>
2379 <inherit>proto::result_of::child_c
< Expr,
1 ></inherit>
2380 <purpose>A metafunction that returns the type of the right child of a binary Proto expression.
</purpose>
2383 <computeroutput>proto::result_of::right
<Expr
></computeroutput> is equivalent to
2384 <computeroutput><classname>proto::result_of::child_c
</classname><Expr,
1></computeroutput>.
2389 <struct name=
"child_c">
2391 <template-type-parameter name=
"Expr"/>
2392 <template-nontype-parameter name=
"N">
2394 </template-nontype-parameter>
2396 <purpose>A metafunction that returns the type of the
<replaceable>N
</replaceable><superscript>th
</superscript>
2397 child of a Proto expression.
</purpose>
2400 A metafunction that returns the type of the
<replaceable>N
</replaceable><superscript>th
</superscript>
2401 child of a Proto expression.
<computeroutput>N
</computeroutput> must be
0 or less than
2402 <computeroutput>Expr::proto_arity::value
</computeroutput>.
2405 <typedef name=
"value_type">
2408 The raw type of the
<replaceable>N
</replaceable><superscript>th
</superscript> child as it is stored
2409 within
<computeroutput>Expr
</computeroutput>. This may be a value or a reference.
2412 <type>typename Expr::proto_child0
</type>
2414 <typedef name=
"type">
2417 If
<computeroutput>Expr
</computeroutput> is not a reference type,
<computeroutput>type
</computeroutput>
2418 is computed as follows:
2422 <computeroutput>T const
&</computeroutput> becomes
<computeroutput>T
</computeroutput>
2427 <computeroutput>T
&</computeroutput> becomes
<computeroutput>T
</computeroutput>
2432 <computeroutput>T
</computeroutput> becomes
<computeroutput>T
</computeroutput>
2438 If
<computeroutput>Expr
</computeroutput> is a non-const reference type,
<computeroutput>type
</computeroutput>
2439 is computed as follows:
2443 <computeroutput>T const
&</computeroutput> becomes
<computeroutput>T const
&</computeroutput>
2448 <computeroutput>T
&</computeroutput> becomes
<computeroutput>T
&</computeroutput>
2453 <computeroutput>T
</computeroutput> becomes
<computeroutput>T
&</computeroutput>
2459 If
<computeroutput>Expr
</computeroutput> is a const reference type,
<computeroutput>type
</computeroutput>
2460 is computed as follows:
2464 <computeroutput>T const
&</computeroutput> becomes
<computeroutput>T const
&</computeroutput>
2469 <computeroutput>T
&</computeroutput> becomes
<computeroutput>T
&</computeroutput>
2474 <computeroutput>T
</computeroutput> becomes
<computeroutput>T const
&</computeroutput>
2480 <type><replaceable>see-below
</replaceable></type>
2486 <overloaded-function name=
"as_expr">
2488 <type>typename
<classname>proto::result_of::as_expr
</classname>< T
>::type
</type>
2490 <template-type-parameter name=
"T"/>
2492 <parameter name=
"t">
2493 <paramtype>T
&</paramtype>
2497 <type>typename
<classname>proto::result_of::as_expr
</classname>< T const
>::type
</type>
2499 <template-type-parameter name=
"T"/>
2501 <parameter name=
"t">
2502 <paramtype>T const
&</paramtype>
2506 <type>typename
<classname>proto::result_of::as_expr
</classname>< T, Domain
>::type
</type>
2508 <template-type-parameter name=
"Domain"/>
2509 <template-type-parameter name=
"T"/>
2511 <parameter name=
"t">
2512 <paramtype>T
&</paramtype>
2516 <type>typename
<classname>proto::result_of::as_expr
</classname>< T const, Domain
>::type
</type>
2518 <template-type-parameter name=
"Domain"/>
2519 <template-type-parameter name=
"T"/>
2521 <parameter name=
"t">
2522 <paramtype>T const
&</paramtype>
2525 <purpose>A function that wraps non-Proto expression types in Proto terminals and leaves Proto
2526 expression types alone.
</purpose>
2529 The
<computeroutput>proto::as_expr()
</computeroutput> function returns Proto expression
2530 objects that are suitable for storage in a local variable. It turns non-Proto objects
2531 into Proto terminals. Its behavior is domain-specific. By default,
2532 non-Proto types are wrapped by value (if possible) in a new Proto terminal expression,
2533 and objects that are already Proto expressions are returned by value.
2536 If
<computeroutput>Domain
</computeroutput> is not explicitly specified, it is assumed to
2537 be
<computeroutput><classname>proto::default_domain
</classname></computeroutput>.
2540 See
<computeroutput><classname>proto::domain::as_expr
</classname><></computeroutput>
2541 for a complete description of this function's default behavior.
2545 <computeroutput>typename Domain::template as_expr
< T
>()(t)
</computeroutput>
2547 </overloaded-function>
2549 <overloaded-function name=
"as_child">
2551 <type>typename
<classname>proto::result_of::as_child
</classname>< T
>::type
</type>
2553 <template-type-parameter name=
"T"/>
2555 <parameter name=
"t">
2556 <paramtype>T
&</paramtype>
2560 <type>typename
<classname>proto::result_of::as_child
</classname>< T const
>::type
</type>
2562 <template-type-parameter name=
"T"/>
2564 <parameter name=
"t">
2565 <paramtype>T const
&</paramtype>
2569 <type>typename
<classname>proto::result_of::as_child
</classname>< T, Domain
>::type
</type>
2571 <template-type-parameter name=
"Domain"/>
2572 <template-type-parameter name=
"T"/>
2574 <parameter name=
"t">
2575 <paramtype>T
&</paramtype>
2579 <type>typename
<classname>proto::result_of::as_child
</classname>< T const, Domain
>::type
</type>
2581 <template-type-parameter name=
"Domain"/>
2582 <template-type-parameter name=
"T"/>
2584 <parameter name=
"t">
2585 <paramtype>T const
&</paramtype>
2588 <purpose>A function that wraps non-Proto objects in Proto terminals (by reference) and leaves
2589 Proto expression types alone.
</purpose>
2592 The
<computeroutput>proto::as_child()
</computeroutput> function returns Proto expression
2593 objects that are suitable for storage as child nodes in an expression tree. It turns
2594 non-Proto objects into Proto terminals. Its behavior is domain-specific. By default,
2595 non-Proto types are held wrapped by reference in a new Proto terminal expression, and
2596 objects that are already Proto expressions are simply returned by reference.
2599 If
<computeroutput>Domain
</computeroutput> is not explicitly specified, it is assumed to
2600 be
<computeroutput><classname>proto::default_domain
</classname></computeroutput>.
2603 See
<computeroutput><classname>proto::domain::as_child
</classname><></computeroutput>
2604 for a complete description of this function's default behavior.
2608 <computeroutput>typename Domain::template as_child
< T
>()(t)
</computeroutput>
2610 </overloaded-function>
2612 <overloaded-function name=
"child">
2614 <type>typename
<classname>proto::result_of::child
</classname>< Expr
&, N
>::type
</type>
2616 <template-type-parameter name=
"N"/>
2617 <template-type-parameter name=
"Expr"/>
2619 <parameter name=
"expr">
2620 <paramtype>Expr
&</paramtype>
2622 <para>The Proto expression.
</para>
2627 <type>typename
<classname>proto::result_of::child
</classname>< Expr const
&, N
>::type
</type>
2629 <template-type-parameter name=
"N"/>
2630 <template-type-parameter name=
"Expr"/>
2632 <parameter name=
"expr">
2633 <paramtype>Expr const
&</paramtype>
2637 <type>typename
<classname>proto::result_of::child
</classname>< Expr
& >::type
</type>
2639 <template-type-parameter name=
"Expr"/>
2641 <parameter name=
"expr">
2642 <paramtype>Expr
&</paramtype>
2646 <type>typename
<classname>proto::result_of::child
</classname>< Expr const
& >::type
</type>
2648 <template-type-parameter name=
"Expr"/>
2650 <parameter name=
"expr">
2651 <paramtype>Expr const
&</paramtype>
2654 <purpose>Return the
<replaceable>N
</replaceable><superscript>th
</superscript> child of the specified Proto expression.
</purpose>
2657 Return the
<replaceable>N
</replaceable><superscript>th
</superscript> child of the specified Proto expression.
2658 If
<computeroutput>N
</computeroutput> is not specified, as in
<computeroutput>proto::child(expr)
</computeroutput>,
2659 then
<computeroutput>N
</computeroutput> is assumed to be
<computeroutput>mpl::long_
<0></computeroutput>.
2660 The child is returned by reference.
2665 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
2666 <computeroutput>true
</computeroutput>.
2669 <computeroutput>N
</computeroutput> is an MPL Integral Constant.
2672 <computeroutput>N::value
< Expr::proto_arity::value
</computeroutput>
2676 <para>A reference to the
<replaceable>N
</replaceable><superscript>th
</superscript> child
2677 of
<computeroutput>expr
</computeroutput>.
</para>
2680 <simpara>Will not throw.
</simpara>
2682 </overloaded-function>
2684 <overloaded-function name=
"child_c">
2686 <type>typename
<classname>proto::result_of::child_c
</classname>< Expr
&, N
>::type
</type>
2688 <template-nontype-parameter name=
"N">
2690 </template-nontype-parameter>
2691 <template-type-parameter name=
"Expr"/>
2693 <parameter name=
"expr">
2694 <paramtype>Expr
&</paramtype>
2698 <type>typename
<classname>proto::result_of::child_c
</classname>< Expr const
&, N
>::type
</type>
2700 <template-nontype-parameter name=
"N">
2702 </template-nontype-parameter>
2703 <template-type-parameter name=
"Expr"/>
2705 <parameter name=
"expr">
2706 <paramtype>Expr const
&</paramtype>
2709 <purpose>Return the
<replaceable>N
</replaceable><superscript>th
</superscript> child of the specified
2710 Proto expression.
</purpose>
2713 Return the
<replaceable>N
</replaceable><superscript>th
</superscript> child of the specified Proto
2714 expression. The child is returned by reference.
2719 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
2720 <computeroutput>true
</computeroutput>.
2723 <computeroutput>N
< Expr::proto_arity::value
</computeroutput>
2727 <para>A reference to the
<replaceable>N
</replaceable><superscript>th
</superscript> child
2728 of
<computeroutput>expr
</computeroutput>.
</para>
2731 <simpara>Will not throw.
</simpara>
2733 </overloaded-function>
2735 <overloaded-function name=
"value">
2737 <type>typename
<classname>proto::result_of::value
</classname>< Expr
& >::type
</type>
2739 <template-type-parameter name=
"Expr"/>
2741 <parameter name=
"expr">
2742 <paramtype>Expr
&</paramtype>
2746 <type>typename
<classname>proto::result_of::value
</classname>< Expr const
& >::type
</type>
2748 <template-type-parameter name=
"Expr"/>
2750 <parameter name=
"expr">
2751 <paramtype>Expr const
&</paramtype>
2754 <purpose>Return the value stored within the specified Proto terminal expression.
</purpose>
2757 Return the the value stored within the specified Proto terminal expression. The value is
2758 returned by reference.
2763 <computeroutput>0 == Expr::proto_arity::value
</computeroutput>
2767 <para>A reference to the terminal's value
</para>
2770 <simpara>Will not throw.
</simpara>
2772 </overloaded-function>
2774 <overloaded-function name=
"left">
2776 <type>typename
<classname>proto::result_of::left
</classname>< Expr
& >::type
</type>
2778 <template-type-parameter name=
"Expr"/>
2780 <parameter name=
"expr">
2781 <paramtype>Expr
&</paramtype>
2785 <type>typename
<classname>proto::result_of::left
</classname>< Expr const
& >::type
</type>
2787 <template-type-parameter name=
"Expr"/>
2789 <parameter name=
"expr">
2790 <paramtype>Expr const
&</paramtype>
2793 <purpose>Return the left child of the specified binary Proto expression.
</purpose>
2795 <para>Return the left child of the specified binary Proto expression. The child is returned by reference.
</para>
2799 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
2800 <computeroutput>true
</computeroutput>.
2803 <computeroutput>2 == Expr::proto_arity::value
</computeroutput>
2807 <para>A reference to the left child of
<computeroutput>expr
</computeroutput>.
2811 <simpara>Will not throw.
</simpara>
2813 </overloaded-function>
2815 <overloaded-function name=
"right">
2817 <type>typename
<classname>proto::result_of::right
</classname>< Expr
& >::type
</type>
2819 <template-type-parameter name=
"Expr"/>
2821 <parameter name=
"expr">
2822 <paramtype>Expr
&</paramtype>
2824 <para>The Proto expression.
</para>
2829 <type>typename
<classname>proto::result_of::right
</classname>< Expr const
& >::type
</type>
2831 <template-type-parameter name=
"Expr"/>
2833 <parameter name=
"expr">
2834 <paramtype>Expr const
&</paramtype>
2837 <purpose>Return the right child of the specified binary Proto expression.
</purpose>
2839 <para>Return the right child of the specified binary Proto expression. The child is returned by reference.
</para>
2843 <computeroutput><classname>proto::is_expr
</classname><Expr
>::value
</computeroutput> is
2844 <computeroutput>true
</computeroutput>.
2847 <computeroutput>2 == Expr::proto_arity::value
</computeroutput>
2852 A reference to the right child of
<computeroutput>expr
</computeroutput>.
2856 <simpara>Will not throw.
</simpara>
2858 </overloaded-function>