1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file generate_by_value.hpp
3 /// Contains definition of by_value_generator_\<\> class template.
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
6 // Software License, Version 1.0. (See accompanying file
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 template<typename Tag , typename Arg0 >
9 struct by_value_generator_<
10 proto::expr<Tag, list1<Arg0>, 1>
18 typename uncvref<Arg0 >::type
21 typedef proto::expr<Tag, src_args, 1> src_type;
22 typedef proto::expr<Tag, dst_args, 1> type;
24 static type const call(src_type const &e)
32 template<typename Tag , typename Arg0 >
33 struct by_value_generator_<
34 proto::basic_expr<Tag, list1<Arg0>, 1>
42 typename uncvref<Arg0 >::type
45 typedef proto::basic_expr<Tag, src_args, 1> src_type;
46 typedef proto::basic_expr<Tag, dst_args, 1> type;
48 static type const call(src_type const &e)
56 template<typename Tag , typename Arg0 , typename Arg1 >
57 struct by_value_generator_<
58 proto::expr<Tag, list2<Arg0 , Arg1>, 2>
66 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type
69 typedef proto::expr<Tag, src_args, 2> src_type;
70 typedef proto::expr<Tag, dst_args, 2> type;
72 static type const call(src_type const &e)
80 template<typename Tag , typename Arg0 , typename Arg1 >
81 struct by_value_generator_<
82 proto::basic_expr<Tag, list2<Arg0 , Arg1>, 2>
90 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type
93 typedef proto::basic_expr<Tag, src_args, 2> src_type;
94 typedef proto::basic_expr<Tag, dst_args, 2> type;
96 static type const call(src_type const &e)
104 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 >
105 struct by_value_generator_<
106 proto::expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3>
110 list3<Arg0 , Arg1 , Arg2>
114 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type
117 typedef proto::expr<Tag, src_args, 3> src_type;
118 typedef proto::expr<Tag, dst_args, 3> type;
120 static type const call(src_type const &e)
123 e.child0 , e.child1 , e.child2
128 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 >
129 struct by_value_generator_<
130 proto::basic_expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3>
134 list3<Arg0 , Arg1 , Arg2>
138 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type
141 typedef proto::basic_expr<Tag, src_args, 3> src_type;
142 typedef proto::basic_expr<Tag, dst_args, 3> type;
144 static type const call(src_type const &e)
147 e.child0 , e.child1 , e.child2
152 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 >
153 struct by_value_generator_<
154 proto::expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4>
158 list4<Arg0 , Arg1 , Arg2 , Arg3>
162 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type
165 typedef proto::expr<Tag, src_args, 4> src_type;
166 typedef proto::expr<Tag, dst_args, 4> type;
168 static type const call(src_type const &e)
171 e.child0 , e.child1 , e.child2 , e.child3
176 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 >
177 struct by_value_generator_<
178 proto::basic_expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4>
182 list4<Arg0 , Arg1 , Arg2 , Arg3>
186 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type
189 typedef proto::basic_expr<Tag, src_args, 4> src_type;
190 typedef proto::basic_expr<Tag, dst_args, 4> type;
192 static type const call(src_type const &e)
195 e.child0 , e.child1 , e.child2 , e.child3
200 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 >
201 struct by_value_generator_<
202 proto::expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5>
206 list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>
210 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type
213 typedef proto::expr<Tag, src_args, 5> src_type;
214 typedef proto::expr<Tag, dst_args, 5> type;
216 static type const call(src_type const &e)
219 e.child0 , e.child1 , e.child2 , e.child3 , e.child4
224 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 >
225 struct by_value_generator_<
226 proto::basic_expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5>
230 list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>
234 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type
237 typedef proto::basic_expr<Tag, src_args, 5> src_type;
238 typedef proto::basic_expr<Tag, dst_args, 5> type;
240 static type const call(src_type const &e)
243 e.child0 , e.child1 , e.child2 , e.child3 , e.child4
248 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 >
249 struct by_value_generator_<
250 proto::expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6>
254 list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>
258 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type
261 typedef proto::expr<Tag, src_args, 6> src_type;
262 typedef proto::expr<Tag, dst_args, 6> type;
264 static type const call(src_type const &e)
267 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5
272 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 >
273 struct by_value_generator_<
274 proto::basic_expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6>
278 list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>
282 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type
285 typedef proto::basic_expr<Tag, src_args, 6> src_type;
286 typedef proto::basic_expr<Tag, dst_args, 6> type;
288 static type const call(src_type const &e)
291 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5
296 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 >
297 struct by_value_generator_<
298 proto::expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7>
302 list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>
306 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type
309 typedef proto::expr<Tag, src_args, 7> src_type;
310 typedef proto::expr<Tag, dst_args, 7> type;
312 static type const call(src_type const &e)
315 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6
320 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 >
321 struct by_value_generator_<
322 proto::basic_expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7>
326 list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>
330 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type
333 typedef proto::basic_expr<Tag, src_args, 7> src_type;
334 typedef proto::basic_expr<Tag, dst_args, 7> type;
336 static type const call(src_type const &e)
339 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6
344 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 >
345 struct by_value_generator_<
346 proto::expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8>
350 list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>
354 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type
357 typedef proto::expr<Tag, src_args, 8> src_type;
358 typedef proto::expr<Tag, dst_args, 8> type;
360 static type const call(src_type const &e)
363 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7
368 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 >
369 struct by_value_generator_<
370 proto::basic_expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8>
374 list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>
378 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type
381 typedef proto::basic_expr<Tag, src_args, 8> src_type;
382 typedef proto::basic_expr<Tag, dst_args, 8> type;
384 static type const call(src_type const &e)
387 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7
392 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 >
393 struct by_value_generator_<
394 proto::expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9>
398 list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>
402 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type
405 typedef proto::expr<Tag, src_args, 9> src_type;
406 typedef proto::expr<Tag, dst_args, 9> type;
408 static type const call(src_type const &e)
411 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8
416 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 >
417 struct by_value_generator_<
418 proto::basic_expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9>
422 list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>
426 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type
429 typedef proto::basic_expr<Tag, src_args, 9> src_type;
430 typedef proto::basic_expr<Tag, dst_args, 9> type;
432 static type const call(src_type const &e)
435 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8
440 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9 >
441 struct by_value_generator_<
442 proto::expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10>
446 list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>
450 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type , typename uncvref<Arg9 >::type
453 typedef proto::expr<Tag, src_args, 10> src_type;
454 typedef proto::expr<Tag, dst_args, 10> type;
456 static type const call(src_type const &e)
459 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 , e.child9
464 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9 >
465 struct by_value_generator_<
466 proto::basic_expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10>
470 list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>
474 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type , typename uncvref<Arg9 >::type
477 typedef proto::basic_expr<Tag, src_args, 10> src_type;
478 typedef proto::basic_expr<Tag, dst_args, 10> type;
480 static type const call(src_type const &e)
483 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 , e.child9