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 
9 
10 
11 
12 
13 
14 
15         template <typename F, typename A0>
16         struct function<F, A0>
17             : proto::result_of::make_expr<
18                 proto::tag::function
19               , phoenix_domain
20               , F
21               , A0
22             >
23         {};
24 
25 
26 
27 
28 
29 
30 
31         template <typename F, typename A0 , typename A1>
32         struct function<F, A0 , A1>
33             : proto::result_of::make_expr<
34                 proto::tag::function
35               , phoenix_domain
36               , F
37               , A0 , A1
38             >
39         {};
40 
41 
42 
43 
44 
45 
46 
47         template <typename F, typename A0 , typename A1 , typename A2>
48         struct function<F, A0 , A1 , A2>
49             : proto::result_of::make_expr<
50                 proto::tag::function
51               , phoenix_domain
52               , F
53               , A0 , A1 , A2
54             >
55         {};
56 
57 
58 
59 
60 
61 
62 
63         template <typename F, typename A0 , typename A1 , typename A2 , typename A3>
64         struct function<F, A0 , A1 , A2 , A3>
65             : proto::result_of::make_expr<
66                 proto::tag::function
67               , phoenix_domain
68               , F
69               , A0 , A1 , A2 , A3
70             >
71         {};
72 
73 
74 
75 
76 
77 
78 
79         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
80         struct function<F, A0 , A1 , A2 , A3 , A4>
81             : proto::result_of::make_expr<
82                 proto::tag::function
83               , phoenix_domain
84               , F
85               , A0 , A1 , A2 , A3 , A4
86             >
87         {};
88 
89 
90 
91 
92 
93 
94 
95         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
96         struct function<F, A0 , A1 , A2 , A3 , A4 , A5>
97             : proto::result_of::make_expr<
98                 proto::tag::function
99               , phoenix_domain
100               , F
101               , A0 , A1 , A2 , A3 , A4 , A5
102             >
103         {};
104 
105 
106 
107 
108 
109 
110 
111         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
112         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6>
113             : proto::result_of::make_expr<
114                 proto::tag::function
115               , phoenix_domain
116               , F
117               , A0 , A1 , A2 , A3 , A4 , A5 , A6
118             >
119         {};
120 
121 
122 
123 
124 
125 
126 
127         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
128         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
129             : proto::result_of::make_expr<
130                 proto::tag::function
131               , phoenix_domain
132               , F
133               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
134             >
135         {};
136 
137 
138 
139 
140 
141 
142 
143         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
144         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
145             : proto::result_of::make_expr<
146                 proto::tag::function
147               , phoenix_domain
148               , F
149               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
150             >
151         {};
152 
153 
154 
155 
156 
157 
158 
159         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
160         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
161             : proto::result_of::make_expr<
162                 proto::tag::function
163               , phoenix_domain
164               , F
165               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
166             >
167         {};
168 
169 
170 
171 
172 
173 
174 
175         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
176         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10>
177             : proto::result_of::make_expr<
178                 proto::tag::function
179               , phoenix_domain
180               , F
181               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
182             >
183         {};
184 
185 
186 
187 
188 
189 
190 
191         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
192         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11>
193             : proto::result_of::make_expr<
194                 proto::tag::function
195               , phoenix_domain
196               , F
197               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
198             >
199         {};
200 
201 
202 
203 
204 
205 
206 
207         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
208         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12>
209             : proto::result_of::make_expr<
210                 proto::tag::function
211               , phoenix_domain
212               , F
213               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
214             >
215         {};
216 
217 
218 
219 
220 
221 
222 
223         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
224         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13>
225             : proto::result_of::make_expr<
226                 proto::tag::function
227               , phoenix_domain
228               , F
229               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
230             >
231         {};
232 
233 
234 
235 
236 
237 
238 
239         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
240         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14>
241             : proto::result_of::make_expr<
242                 proto::tag::function
243               , phoenix_domain
244               , F
245               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
246             >
247         {};
248 
249 
250 
251 
252 
253 
254 
255         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
256         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15>
257             : proto::result_of::make_expr<
258                 proto::tag::function
259               , phoenix_domain
260               , F
261               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
262             >
263         {};
264 
265 
266 
267 
268 
269 
270 
271         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
272         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16>
273             : proto::result_of::make_expr<
274                 proto::tag::function
275               , phoenix_domain
276               , F
277               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
278             >
279         {};
280 
281 
282 
283 
284 
285 
286 
287         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
288         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17>
289             : proto::result_of::make_expr<
290                 proto::tag::function
291               , phoenix_domain
292               , F
293               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
294             >
295         {};
296 
297 
298 
299 
300 
301 
302 
303         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
304         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18>
305             : proto::result_of::make_expr<
306                 proto::tag::function
307               , phoenix_domain
308               , F
309               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
310             >
311         {};
312 
313 
314 
315 
316 
317 
318 
319         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
320         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19>
321             : proto::result_of::make_expr<
322                 proto::tag::function
323               , phoenix_domain
324               , F
325               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19
326             >
327         {};
328 
329 
330 
331 
332 
333 
334 
335         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20>
336         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20>
337             : proto::result_of::make_expr<
338                 proto::tag::function
339               , phoenix_domain
340               , F
341               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20
342             >
343         {};
344 
345 
346 
347 
348 
349 
350 
351         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21>
352         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21>
353             : proto::result_of::make_expr<
354                 proto::tag::function
355               , phoenix_domain
356               , F
357               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21
358             >
359         {};
360 
361 
362 
363 
364 
365 
366 
367         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22>
368         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22>
369             : proto::result_of::make_expr<
370                 proto::tag::function
371               , phoenix_domain
372               , F
373               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22
374             >
375         {};
376 
377 
378 
379 
380 
381 
382 
383         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23>
384         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23>
385             : proto::result_of::make_expr<
386                 proto::tag::function
387               , phoenix_domain
388               , F
389               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23
390             >
391         {};
392 
393 
394 
395 
396 
397 
398 
399         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24>
400         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24>
401             : proto::result_of::make_expr<
402                 proto::tag::function
403               , phoenix_domain
404               , F
405               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24
406             >
407         {};
408 
409 
410 
411 
412 
413 
414 
415         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25>
416         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25>
417             : proto::result_of::make_expr<
418                 proto::tag::function
419               , phoenix_domain
420               , F
421               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25
422             >
423         {};
424 
425 
426 
427 
428 
429 
430 
431         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26>
432         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26>
433             : proto::result_of::make_expr<
434                 proto::tag::function
435               , phoenix_domain
436               , F
437               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26
438             >
439         {};
440 
441 
442 
443 
444 
445 
446 
447         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27>
448         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27>
449             : proto::result_of::make_expr<
450                 proto::tag::function
451               , phoenix_domain
452               , F
453               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27
454             >
455         {};
456 
457 
458 
459 
460 
461 
462 
463         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28>
464         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28>
465             : proto::result_of::make_expr<
466                 proto::tag::function
467               , phoenix_domain
468               , F
469               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28
470             >
471         {};
472 
473 
474 
475 
476 
477 
478 
479         template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29>
480         struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29>
481             : proto::result_of::make_expr<
482                 proto::tag::function
483               , phoenix_domain
484               , F
485               , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29
486             >
487         {};
488