3 Copyright 2008 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 <concept name=
"PrimitiveTransform" category=
"utility">
10 <param name=
"Fn" role=
"primitive-transform-type" />
11 <param name=
"Expr" role=
"expression-type" />
12 <param name=
"State" role=
"state-type" />
13 <param name=
"Data" role=
"data-type" />
16 The type
<arg num=
"1" /> must be a model of
<self/>.
21 A PrimitiveTransform is a class type that
22 has a nested class template called
23 <computeroutput>impl
<></computeroutput> that takes
24 three template parameters representing an expression
25 type, a state type and a data type. Specializations
26 of the nested impl template are ternary monomorphic
27 function objects that accept expression, state, and
28 data parameters. A PrimitiveTransform is also a
29 <conceptname>PolymorphicFunctionObject
</conceptname>
30 implemented in terms of the nested
31 <computeroutput>impl
<></computeroutput> template.
35 <notation variables=
"fn">
41 <notation variables=
"expr">
47 <notation variables=
"state">
53 <notation variables=
"data">
59 <associated-type name=
"result_type">
60 <get-member-type name=
"result_type">
61 <apply-template name=
"typename Fn::template impl">
68 <simpara>The return type of the overloaded function call operator.
</simpara>
72 <valid-expression name=
"Polymorphic Function Call 1">
73 <apply-function name=
"fn">
79 <require-same-type testable=
"yes">
80 <type name=
"result_type"/>
83 <semantics>Applies the transform.
</semantics>
86 <valid-expression name=
"Polymorphic Function Call 2">
87 <apply-function name=
"fn">
96 <require-same-type testable=
"yes">
97 <type name=
"result_type"/>
100 <semantics>Applies the transform.
</semantics>
103 <valid-expression name=
"Polymorphic Function Call 3">
104 <apply-function name=
"fn">
109 <type name=
"State" />
116 <require-same-type testable=
"yes">
117 <type name=
"result_type"/>
120 <semantics>Applies the transform.
</semantics>
123 <valid-expression name=
"Monomorphic Function Call">
124 <apply-function name=
"typename Fn::template impl< Expr, State, Data >()">
129 <type name=
"State" />
136 <require-same-type testable=
"yes">
137 <type name=
"result_type"/>
140 <semantics>Applies the transform.
</semantics>
144 <type name=
"boost::proto::_child_c< 0 >" />