1 /*==============================================================================
2     Copyright (c) 2005-2010 Joel de Guzman
3     Copyright (c) 2010 Thomas Heller
4 
5     Distributed under the Boost Software License, Version 1.0. (See accompanying
6     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 ==============================================================================*/
8     namespace result_of
9     {
10         template <typename Expr
11             , typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void
12             , typename Dummy = void>
13         struct actor;
14         template <typename Expr>
15         struct nullary_actor_result
16         {
17             typedef
18                 typename boost::phoenix::evaluator::impl<
19                     Expr const&
20                   , vector2<
21                         vector1<const ::boost::phoenix::actor<Expr> *> &
22                       , default_actions
23                     > const &
24                   , proto::empty_env
25                 >::result_type
26                 type;
27         };
28         template <typename Expr>
29         struct actor<Expr>
30         {
31             typedef
32 
33                 typename mpl::eval_if_c<
34                     result_of::is_nullary<Expr>::value
35                   , nullary_actor_result<Expr>
36                   , mpl::identity<detail::error_expecting_arguments>
37                 >::type
38             type;
39         };
40 
41 
42 
43 
44 
45 
46 
47         template <typename Expr, typename A0>
48         struct actor<Expr, A0>
49         {
50             typedef
51                 typename phoenix::evaluator::
52                     impl<
53                         Expr const&
54                       , vector2<
55                             vector2<const ::boost::phoenix::actor<Expr> *, A0> &
56                           , default_actions
57                         > const &
58                       , proto::empty_env
59                     >::result_type
60                 type;
61         };
62 
63 
64 
65 
66 
67 
68 
69         template <typename Expr, typename A0 , typename A1>
70         struct actor<Expr, A0 , A1>
71         {
72             typedef
73                 typename phoenix::evaluator::
74                     impl<
75                         Expr const&
76                       , vector2<
77                             vector3<const ::boost::phoenix::actor<Expr> *, A0 , A1> &
78                           , default_actions
79                         > const &
80                       , proto::empty_env
81                     >::result_type
82                 type;
83         };
84 
85 
86 
87 
88 
89 
90 
91         template <typename Expr, typename A0 , typename A1 , typename A2>
92         struct actor<Expr, A0 , A1 , A2>
93         {
94             typedef
95                 typename phoenix::evaluator::
96                     impl<
97                         Expr const&
98                       , vector2<
99                             vector4<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2> &
100                           , default_actions
101                         > const &
102                       , proto::empty_env
103                     >::result_type
104                 type;
105         };
106 
107 
108 
109 
110 
111 
112 
113         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3>
114         struct actor<Expr, A0 , A1 , A2 , A3>
115         {
116             typedef
117                 typename phoenix::evaluator::
118                     impl<
119                         Expr const&
120                       , vector2<
121                             vector5<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3> &
122                           , default_actions
123                         > const &
124                       , proto::empty_env
125                     >::result_type
126                 type;
127         };
128 
129 
130 
131 
132 
133 
134 
135         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
136         struct actor<Expr, A0 , A1 , A2 , A3 , A4>
137         {
138             typedef
139                 typename phoenix::evaluator::
140                     impl<
141                         Expr const&
142                       , vector2<
143                             vector6<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4> &
144                           , default_actions
145                         > const &
146                       , proto::empty_env
147                     >::result_type
148                 type;
149         };
150 
151 
152 
153 
154 
155 
156 
157         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
158         struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5>
159         {
160             typedef
161                 typename phoenix::evaluator::
162                     impl<
163                         Expr const&
164                       , vector2<
165                             vector7<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5> &
166                           , default_actions
167                         > const &
168                       , proto::empty_env
169                     >::result_type
170                 type;
171         };
172 
173 
174 
175 
176 
177 
178 
179         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
180         struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6>
181         {
182             typedef
183                 typename phoenix::evaluator::
184                     impl<
185                         Expr const&
186                       , vector2<
187                             vector8<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6> &
188                           , default_actions
189                         > const &
190                       , proto::empty_env
191                     >::result_type
192                 type;
193         };
194 
195 
196 
197 
198 
199 
200 
201         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
202         struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
203         {
204             typedef
205                 typename phoenix::evaluator::
206                     impl<
207                         Expr const&
208                       , vector2<
209                             vector9<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> &
210                           , default_actions
211                         > const &
212                       , proto::empty_env
213                     >::result_type
214                 type;
215         };
216 
217 
218 
219 
220 
221 
222 
223         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
224         struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
225         {
226             typedef
227                 typename phoenix::evaluator::
228                     impl<
229                         Expr const&
230                       , vector2<
231                             vector10<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> &
232                           , default_actions
233                         > const &
234                       , proto::empty_env
235                     >::result_type
236                 type;
237         };
238 
239 
240 
241 
242 
243 
244 
245         template <typename Expr, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
246         struct actor<Expr, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
247         {
248             typedef
249                 typename phoenix::evaluator::
250                     impl<
251                         Expr const&
252                       , vector2<
253                             vector11<const ::boost::phoenix::actor<Expr> *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> &
254                           , default_actions
255                         > const &
256                       , proto::empty_env
257                     >::result_type
258                 type;
259         };
260     }
261