1 ///////////////////////////////////////////////////////////////////////////////
3 /// Definitions of proto::function, proto::nary_expr and proto::result_of::child_c
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)
16 template<typename Expr>
17 struct child_c<Expr, 0>
20 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
23 typedef typename Expr::proto_child0 value_type;
29 typedef typename detail::expr_traits<typename Expr::proto_child0>::value_type type;
31 template<typename Expr>
32 struct child_c<Expr &, 0>
35 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
38 typedef typename Expr::proto_child0 value_type;
44 typedef typename detail::expr_traits<typename Expr::proto_child0>::reference type;
48 static type call(Expr &e)
50 return e.proto_base().child0;
53 template<typename Expr>
54 struct child_c<Expr const &, 0>
57 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
60 typedef typename Expr::proto_child0 value_type;
66 typedef typename detail::expr_traits<typename Expr::proto_child0>::const_reference type;
70 static type call(Expr const &e)
72 return e.proto_base().child0;
84 , void , void , void , void , void , void , void , void , void
89 , void , void , void , void , void , void , void , void , void
94 typedef proto::expr<proto::tag::function, list1<A0>, 1> type;
95 typedef proto::basic_expr<proto::tag::function, list1<A0>, 1> proto_grammar;
96 template<typename Expr, typename State, typename Data>
98 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
101 typedef proto::tag::function proto_tag;
102 typedef A0 proto_child0;
103 typedef detail::if_vararg<A0> proto_child1; typedef detail::if_vararg<A0> proto_child2; typedef detail::if_vararg<A0> proto_child3; typedef detail::if_vararg<A0> proto_child4; typedef detail::if_vararg<A0> proto_child5; typedef detail::if_vararg<A0> proto_child6; typedef detail::if_vararg<A0> proto_child7; typedef detail::if_vararg<A0> proto_child8; typedef detail::if_vararg<A0> proto_child9;
113 template<typename Tag , typename A0>
118 , void , void , void , void , void , void , void , void , void
124 , void , void , void , void , void , void , void , void , void
129 typedef proto::expr<Tag, list1<A0>, 1> type;
130 typedef proto::basic_expr<Tag, list1<A0>, 1> proto_grammar;
131 template<typename Expr, typename State, typename Data>
133 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
136 typedef Tag proto_tag;
137 typedef A0 proto_child0;
138 typedef detail::if_vararg<A0> proto_child1; typedef detail::if_vararg<A0> proto_child2; typedef detail::if_vararg<A0> proto_child3; typedef detail::if_vararg<A0> proto_child4; typedef detail::if_vararg<A0> proto_child5; typedef detail::if_vararg<A0> proto_child6; typedef detail::if_vararg<A0> proto_child7; typedef detail::if_vararg<A0> proto_child8; typedef detail::if_vararg<A0> proto_child9;
143 template<typename> class T
146 struct is_callable_<T<A0> BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)>
147 : is_same<A0, callable>
158 template<typename Expr>
159 struct child_c<Expr, 1>
162 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
165 typedef typename Expr::proto_child1 value_type;
171 typedef typename detail::expr_traits<typename Expr::proto_child1>::value_type type;
173 template<typename Expr>
174 struct child_c<Expr &, 1>
177 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
180 typedef typename Expr::proto_child1 value_type;
186 typedef typename detail::expr_traits<typename Expr::proto_child1>::reference type;
190 static type call(Expr &e)
192 return e.proto_base().child1;
195 template<typename Expr>
196 struct child_c<Expr const &, 1>
199 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
202 typedef typename Expr::proto_child1 value_type;
208 typedef typename detail::expr_traits<typename Expr::proto_child1>::const_reference type;
212 static type call(Expr const &e)
214 return e.proto_base().child1;
222 template<typename A0 , typename A1>
226 , void , void , void , void , void , void , void , void
231 , void , void , void , void , void , void , void , void
236 typedef proto::expr<proto::tag::function, list2<A0 , A1>, 2> type;
237 typedef proto::basic_expr<proto::tag::function, list2<A0 , A1>, 2> proto_grammar;
238 template<typename Expr, typename State, typename Data>
240 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
243 typedef proto::tag::function proto_tag;
244 typedef A0 proto_child0; typedef A1 proto_child1;
245 typedef detail::if_vararg<A1> proto_child2; typedef detail::if_vararg<A1> proto_child3; typedef detail::if_vararg<A1> proto_child4; typedef detail::if_vararg<A1> proto_child5; typedef detail::if_vararg<A1> proto_child6; typedef detail::if_vararg<A1> proto_child7; typedef detail::if_vararg<A1> proto_child8; typedef detail::if_vararg<A1> proto_child9;
255 template<typename Tag , typename A0 , typename A1>
260 , void , void , void , void , void , void , void , void
266 , void , void , void , void , void , void , void , void
271 typedef proto::expr<Tag, list2<A0 , A1>, 2> type;
272 typedef proto::basic_expr<Tag, list2<A0 , A1>, 2> proto_grammar;
273 template<typename Expr, typename State, typename Data>
275 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
278 typedef Tag proto_tag;
279 typedef A0 proto_child0; typedef A1 proto_child1;
280 typedef detail::if_vararg<A1> proto_child2; typedef detail::if_vararg<A1> proto_child3; typedef detail::if_vararg<A1> proto_child4; typedef detail::if_vararg<A1> proto_child5; typedef detail::if_vararg<A1> proto_child6; typedef detail::if_vararg<A1> proto_child7; typedef detail::if_vararg<A1> proto_child8; typedef detail::if_vararg<A1> proto_child9;
285 template<typename , typename> class T
286 , typename A0 , typename A1
288 struct is_callable_<T<A0 , A1> BOOST_PROTO_TEMPLATE_ARITY_PARAM(2)>
289 : is_same<A1, callable>
300 template<typename Expr>
301 struct child_c<Expr, 2>
304 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
307 typedef typename Expr::proto_child2 value_type;
313 typedef typename detail::expr_traits<typename Expr::proto_child2>::value_type type;
315 template<typename Expr>
316 struct child_c<Expr &, 2>
319 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
322 typedef typename Expr::proto_child2 value_type;
328 typedef typename detail::expr_traits<typename Expr::proto_child2>::reference type;
332 static type call(Expr &e)
334 return e.proto_base().child2;
337 template<typename Expr>
338 struct child_c<Expr const &, 2>
341 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
344 typedef typename Expr::proto_child2 value_type;
350 typedef typename detail::expr_traits<typename Expr::proto_child2>::const_reference type;
354 static type call(Expr const &e)
356 return e.proto_base().child2;
364 template<typename A0 , typename A1 , typename A2>
368 , void , void , void , void , void , void , void
373 , void , void , void , void , void , void , void
378 typedef proto::expr<proto::tag::function, list3<A0 , A1 , A2>, 3> type;
379 typedef proto::basic_expr<proto::tag::function, list3<A0 , A1 , A2>, 3> proto_grammar;
380 template<typename Expr, typename State, typename Data>
382 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
385 typedef proto::tag::function proto_tag;
386 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2;
387 typedef detail::if_vararg<A2> proto_child3; typedef detail::if_vararg<A2> proto_child4; typedef detail::if_vararg<A2> proto_child5; typedef detail::if_vararg<A2> proto_child6; typedef detail::if_vararg<A2> proto_child7; typedef detail::if_vararg<A2> proto_child8; typedef detail::if_vararg<A2> proto_child9;
397 template<typename Tag , typename A0 , typename A1 , typename A2>
402 , void , void , void , void , void , void , void
408 , void , void , void , void , void , void , void
413 typedef proto::expr<Tag, list3<A0 , A1 , A2>, 3> type;
414 typedef proto::basic_expr<Tag, list3<A0 , A1 , A2>, 3> proto_grammar;
415 template<typename Expr, typename State, typename Data>
417 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
420 typedef Tag proto_tag;
421 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2;
422 typedef detail::if_vararg<A2> proto_child3; typedef detail::if_vararg<A2> proto_child4; typedef detail::if_vararg<A2> proto_child5; typedef detail::if_vararg<A2> proto_child6; typedef detail::if_vararg<A2> proto_child7; typedef detail::if_vararg<A2> proto_child8; typedef detail::if_vararg<A2> proto_child9;
427 template<typename , typename , typename> class T
428 , typename A0 , typename A1 , typename A2
430 struct is_callable_<T<A0 , A1 , A2> BOOST_PROTO_TEMPLATE_ARITY_PARAM(3)>
431 : is_same<A2, callable>
442 template<typename Expr>
443 struct child_c<Expr, 3>
446 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
449 typedef typename Expr::proto_child3 value_type;
455 typedef typename detail::expr_traits<typename Expr::proto_child3>::value_type type;
457 template<typename Expr>
458 struct child_c<Expr &, 3>
461 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
464 typedef typename Expr::proto_child3 value_type;
470 typedef typename detail::expr_traits<typename Expr::proto_child3>::reference type;
474 static type call(Expr &e)
476 return e.proto_base().child3;
479 template<typename Expr>
480 struct child_c<Expr const &, 3>
483 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
486 typedef typename Expr::proto_child3 value_type;
492 typedef typename detail::expr_traits<typename Expr::proto_child3>::const_reference type;
496 static type call(Expr const &e)
498 return e.proto_base().child3;
506 template<typename A0 , typename A1 , typename A2 , typename A3>
510 , void , void , void , void , void , void
515 , void , void , void , void , void , void
520 typedef proto::expr<proto::tag::function, list4<A0 , A1 , A2 , A3>, 4> type;
521 typedef proto::basic_expr<proto::tag::function, list4<A0 , A1 , A2 , A3>, 4> proto_grammar;
522 template<typename Expr, typename State, typename Data>
524 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
527 typedef proto::tag::function proto_tag;
528 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3;
529 typedef detail::if_vararg<A3> proto_child4; typedef detail::if_vararg<A3> proto_child5; typedef detail::if_vararg<A3> proto_child6; typedef detail::if_vararg<A3> proto_child7; typedef detail::if_vararg<A3> proto_child8; typedef detail::if_vararg<A3> proto_child9;
539 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3>
544 , void , void , void , void , void , void
550 , void , void , void , void , void , void
555 typedef proto::expr<Tag, list4<A0 , A1 , A2 , A3>, 4> type;
556 typedef proto::basic_expr<Tag, list4<A0 , A1 , A2 , A3>, 4> proto_grammar;
557 template<typename Expr, typename State, typename Data>
559 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
562 typedef Tag proto_tag;
563 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3;
564 typedef detail::if_vararg<A3> proto_child4; typedef detail::if_vararg<A3> proto_child5; typedef detail::if_vararg<A3> proto_child6; typedef detail::if_vararg<A3> proto_child7; typedef detail::if_vararg<A3> proto_child8; typedef detail::if_vararg<A3> proto_child9;
569 template<typename , typename , typename , typename> class T
570 , typename A0 , typename A1 , typename A2 , typename A3
572 struct is_callable_<T<A0 , A1 , A2 , A3> BOOST_PROTO_TEMPLATE_ARITY_PARAM(4)>
573 : is_same<A3, callable>
584 template<typename Expr>
585 struct child_c<Expr, 4>
588 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
591 typedef typename Expr::proto_child4 value_type;
597 typedef typename detail::expr_traits<typename Expr::proto_child4>::value_type type;
599 template<typename Expr>
600 struct child_c<Expr &, 4>
603 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
606 typedef typename Expr::proto_child4 value_type;
612 typedef typename detail::expr_traits<typename Expr::proto_child4>::reference type;
616 static type call(Expr &e)
618 return e.proto_base().child4;
621 template<typename Expr>
622 struct child_c<Expr const &, 4>
625 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
628 typedef typename Expr::proto_child4 value_type;
634 typedef typename detail::expr_traits<typename Expr::proto_child4>::const_reference type;
638 static type call(Expr const &e)
640 return e.proto_base().child4;
648 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
651 A0 , A1 , A2 , A3 , A4
652 , void , void , void , void , void
656 A0 , A1 , A2 , A3 , A4
657 , void , void , void , void , void
662 typedef proto::expr<proto::tag::function, list5<A0 , A1 , A2 , A3 , A4>, 5> type;
663 typedef proto::basic_expr<proto::tag::function, list5<A0 , A1 , A2 , A3 , A4>, 5> proto_grammar;
664 template<typename Expr, typename State, typename Data>
666 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
669 typedef proto::tag::function proto_tag;
670 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4;
671 typedef detail::if_vararg<A4> proto_child5; typedef detail::if_vararg<A4> proto_child6; typedef detail::if_vararg<A4> proto_child7; typedef detail::if_vararg<A4> proto_child8; typedef detail::if_vararg<A4> proto_child9;
681 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
685 , A0 , A1 , A2 , A3 , A4
686 , void , void , void , void , void
691 , A0 , A1 , A2 , A3 , A4
692 , void , void , void , void , void
697 typedef proto::expr<Tag, list5<A0 , A1 , A2 , A3 , A4>, 5> type;
698 typedef proto::basic_expr<Tag, list5<A0 , A1 , A2 , A3 , A4>, 5> proto_grammar;
699 template<typename Expr, typename State, typename Data>
701 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
704 typedef Tag proto_tag;
705 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4;
706 typedef detail::if_vararg<A4> proto_child5; typedef detail::if_vararg<A4> proto_child6; typedef detail::if_vararg<A4> proto_child7; typedef detail::if_vararg<A4> proto_child8; typedef detail::if_vararg<A4> proto_child9;
711 template<typename , typename , typename , typename , typename> class T
712 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
714 struct is_callable_<T<A0 , A1 , A2 , A3 , A4> BOOST_PROTO_TEMPLATE_ARITY_PARAM(5)>
715 : is_same<A4, callable>
726 template<typename Expr>
727 struct child_c<Expr, 5>
730 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
733 typedef typename Expr::proto_child5 value_type;
739 typedef typename detail::expr_traits<typename Expr::proto_child5>::value_type type;
741 template<typename Expr>
742 struct child_c<Expr &, 5>
745 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
748 typedef typename Expr::proto_child5 value_type;
754 typedef typename detail::expr_traits<typename Expr::proto_child5>::reference type;
758 static type call(Expr &e)
760 return e.proto_base().child5;
763 template<typename Expr>
764 struct child_c<Expr const &, 5>
767 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
770 typedef typename Expr::proto_child5 value_type;
776 typedef typename detail::expr_traits<typename Expr::proto_child5>::const_reference type;
780 static type call(Expr const &e)
782 return e.proto_base().child5;
790 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
793 A0 , A1 , A2 , A3 , A4 , A5
794 , void , void , void , void
798 A0 , A1 , A2 , A3 , A4 , A5
799 , void , void , void , void
804 typedef proto::expr<proto::tag::function, list6<A0 , A1 , A2 , A3 , A4 , A5>, 6> type;
805 typedef proto::basic_expr<proto::tag::function, list6<A0 , A1 , A2 , A3 , A4 , A5>, 6> proto_grammar;
806 template<typename Expr, typename State, typename Data>
808 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
811 typedef proto::tag::function proto_tag;
812 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5;
813 typedef detail::if_vararg<A5> proto_child6; typedef detail::if_vararg<A5> proto_child7; typedef detail::if_vararg<A5> proto_child8; typedef detail::if_vararg<A5> proto_child9;
823 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
827 , A0 , A1 , A2 , A3 , A4 , A5
828 , void , void , void , void
833 , A0 , A1 , A2 , A3 , A4 , A5
834 , void , void , void , void
839 typedef proto::expr<Tag, list6<A0 , A1 , A2 , A3 , A4 , A5>, 6> type;
840 typedef proto::basic_expr<Tag, list6<A0 , A1 , A2 , A3 , A4 , A5>, 6> proto_grammar;
841 template<typename Expr, typename State, typename Data>
843 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
846 typedef Tag proto_tag;
847 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5;
848 typedef detail::if_vararg<A5> proto_child6; typedef detail::if_vararg<A5> proto_child7; typedef detail::if_vararg<A5> proto_child8; typedef detail::if_vararg<A5> proto_child9;
853 template<typename , typename , typename , typename , typename , typename> class T
854 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
856 struct is_callable_<T<A0 , A1 , A2 , A3 , A4 , A5> BOOST_PROTO_TEMPLATE_ARITY_PARAM(6)>
857 : is_same<A5, callable>
868 template<typename Expr>
869 struct child_c<Expr, 6>
872 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
875 typedef typename Expr::proto_child6 value_type;
881 typedef typename detail::expr_traits<typename Expr::proto_child6>::value_type type;
883 template<typename Expr>
884 struct child_c<Expr &, 6>
887 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
890 typedef typename Expr::proto_child6 value_type;
896 typedef typename detail::expr_traits<typename Expr::proto_child6>::reference type;
900 static type call(Expr &e)
902 return e.proto_base().child6;
905 template<typename Expr>
906 struct child_c<Expr const &, 6>
909 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
912 typedef typename Expr::proto_child6 value_type;
918 typedef typename detail::expr_traits<typename Expr::proto_child6>::const_reference type;
922 static type call(Expr const &e)
924 return e.proto_base().child6;
932 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
935 A0 , A1 , A2 , A3 , A4 , A5 , A6
940 A0 , A1 , A2 , A3 , A4 , A5 , A6
946 typedef proto::expr<proto::tag::function, list7<A0 , A1 , A2 , A3 , A4 , A5 , A6>, 7> type;
947 typedef proto::basic_expr<proto::tag::function, list7<A0 , A1 , A2 , A3 , A4 , A5 , A6>, 7> proto_grammar;
948 template<typename Expr, typename State, typename Data>
950 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
953 typedef proto::tag::function proto_tag;
954 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6;
955 typedef detail::if_vararg<A6> proto_child7; typedef detail::if_vararg<A6> proto_child8; typedef detail::if_vararg<A6> proto_child9;
965 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
969 , A0 , A1 , A2 , A3 , A4 , A5 , A6
975 , A0 , A1 , A2 , A3 , A4 , A5 , A6
981 typedef proto::expr<Tag, list7<A0 , A1 , A2 , A3 , A4 , A5 , A6>, 7> type;
982 typedef proto::basic_expr<Tag, list7<A0 , A1 , A2 , A3 , A4 , A5 , A6>, 7> proto_grammar;
983 template<typename Expr, typename State, typename Data>
985 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
988 typedef Tag proto_tag;
989 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6;
990 typedef detail::if_vararg<A6> proto_child7; typedef detail::if_vararg<A6> proto_child8; typedef detail::if_vararg<A6> proto_child9;
995 template<typename , typename , typename , typename , typename , typename , typename> class T
996 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
998 struct is_callable_<T<A0 , A1 , A2 , A3 , A4 , A5 , A6> BOOST_PROTO_TEMPLATE_ARITY_PARAM(7)>
999 : is_same<A6, callable>
1010 template<typename Expr>
1011 struct child_c<Expr, 7>
1014 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1017 typedef typename Expr::proto_child7 value_type;
1023 typedef typename detail::expr_traits<typename Expr::proto_child7>::value_type type;
1025 template<typename Expr>
1026 struct child_c<Expr &, 7>
1029 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1032 typedef typename Expr::proto_child7 value_type;
1038 typedef typename detail::expr_traits<typename Expr::proto_child7>::reference type;
1042 static type call(Expr &e)
1044 return e.proto_base().child7;
1047 template<typename Expr>
1048 struct child_c<Expr const &, 7>
1051 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1054 typedef typename Expr::proto_child7 value_type;
1060 typedef typename detail::expr_traits<typename Expr::proto_child7>::const_reference type;
1064 static type call(Expr const &e)
1066 return e.proto_base().child7;
1074 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
1077 A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
1082 A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
1088 typedef proto::expr<proto::tag::function, list8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>, 8> type;
1089 typedef proto::basic_expr<proto::tag::function, list8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>, 8> proto_grammar;
1090 template<typename Expr, typename State, typename Data>
1092 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
1095 typedef proto::tag::function proto_tag;
1096 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7;
1097 typedef detail::if_vararg<A7> proto_child8; typedef detail::if_vararg<A7> proto_child9;
1107 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
1111 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
1117 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
1123 typedef proto::expr<Tag, list8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>, 8> type;
1124 typedef proto::basic_expr<Tag, list8<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>, 8> proto_grammar;
1125 template<typename Expr, typename State, typename Data>
1127 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
1130 typedef Tag proto_tag;
1131 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7;
1132 typedef detail::if_vararg<A7> proto_child8; typedef detail::if_vararg<A7> proto_child9;
1137 template<typename , typename , typename , typename , typename , typename , typename , typename> class T
1138 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
1140 struct is_callable_<T<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> BOOST_PROTO_TEMPLATE_ARITY_PARAM(8)>
1141 : is_same<A7, callable>
1152 template<typename Expr>
1153 struct child_c<Expr, 8>
1156 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1159 typedef typename Expr::proto_child8 value_type;
1165 typedef typename detail::expr_traits<typename Expr::proto_child8>::value_type type;
1167 template<typename Expr>
1168 struct child_c<Expr &, 8>
1171 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1174 typedef typename Expr::proto_child8 value_type;
1180 typedef typename detail::expr_traits<typename Expr::proto_child8>::reference type;
1184 static type call(Expr &e)
1186 return e.proto_base().child8;
1189 template<typename Expr>
1190 struct child_c<Expr const &, 8>
1193 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1196 typedef typename Expr::proto_child8 value_type;
1202 typedef typename detail::expr_traits<typename Expr::proto_child8>::const_reference type;
1206 static type call(Expr const &e)
1208 return e.proto_base().child8;
1216 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
1219 A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1224 A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1230 typedef proto::expr<proto::tag::function, list9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>, 9> type;
1231 typedef proto::basic_expr<proto::tag::function, list9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>, 9> proto_grammar;
1232 template<typename Expr, typename State, typename Data>
1234 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
1237 typedef proto::tag::function proto_tag;
1238 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7; typedef A8 proto_child8;
1239 typedef detail::if_vararg<A8> proto_child9;
1249 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
1253 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1259 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
1265 typedef proto::expr<Tag, list9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>, 9> type;
1266 typedef proto::basic_expr<Tag, list9<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>, 9> proto_grammar;
1267 template<typename Expr, typename State, typename Data>
1269 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
1272 typedef Tag proto_tag;
1273 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7; typedef A8 proto_child8;
1274 typedef detail::if_vararg<A8> proto_child9;
1279 template<typename , typename , typename , typename , typename , typename , typename , typename , typename> class T
1280 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
1282 struct is_callable_<T<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> BOOST_PROTO_TEMPLATE_ARITY_PARAM(9)>
1283 : is_same<A8, callable>
1294 template<typename Expr>
1295 struct child_c<Expr, 9>
1298 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1301 typedef typename Expr::proto_child9 value_type;
1307 typedef typename detail::expr_traits<typename Expr::proto_child9>::value_type type;
1309 template<typename Expr>
1310 struct child_c<Expr &, 9>
1313 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1316 typedef typename Expr::proto_child9 value_type;
1322 typedef typename detail::expr_traits<typename Expr::proto_child9>::reference type;
1326 static type call(Expr &e)
1328 return e.proto_base().child9;
1331 template<typename Expr>
1332 struct child_c<Expr const &, 9>
1335 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1338 typedef typename Expr::proto_child9 value_type;
1344 typedef typename detail::expr_traits<typename Expr::proto_child9>::const_reference type;
1348 static type call(Expr const &e)
1350 return e.proto_base().child9;
1358 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
1362 A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
1368 typedef proto::expr<proto::tag::function, list10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>, 10> type;
1369 typedef proto::basic_expr<proto::tag::function, list10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>, 10> proto_grammar;
1370 template<typename Expr, typename State, typename Data>
1372 : detail::pass_through_impl<function, deduce_domain, Expr, State, Data>
1375 typedef proto::tag::function proto_tag;
1376 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7; typedef A8 proto_child8; typedef A9 proto_child9;
1387 template<typename Tag , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
1392 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
1398 typedef proto::expr<Tag, list10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>, 10> type;
1399 typedef proto::basic_expr<Tag, list10<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>, 10> proto_grammar;
1400 template<typename Expr, typename State, typename Data>
1402 : detail::pass_through_impl<nary_expr, deduce_domain, Expr, State, Data>
1405 typedef Tag proto_tag;
1406 typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7; typedef A8 proto_child8; typedef A9 proto_child9;
1412 template<typename , typename , typename , typename , typename , typename , typename , typename , typename , typename> class T
1413 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
1415 struct is_callable_<T<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> BOOST_PROTO_TEMPLATE_ARITY_PARAM(10)>
1416 : is_same<A9, callable>
1427 template<typename Expr>
1428 struct child_c<Expr, 10>
1431 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1434 typedef typename Expr::proto_child10 value_type;
1440 typedef typename detail::expr_traits<typename Expr::proto_child10>::value_type type;
1442 template<typename Expr>
1443 struct child_c<Expr &, 10>
1446 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1449 typedef typename Expr::proto_child10 value_type;
1455 typedef typename detail::expr_traits<typename Expr::proto_child10>::reference type;
1459 static type call(Expr &e)
1461 return e.proto_base().child10;
1464 template<typename Expr>
1465 struct child_c<Expr const &, 10>
1468 BOOST_STATIC_ASSERT(0 != Expr::proto_arity_c);
1471 typedef typename Expr::proto_child10 value_type;
1477 typedef typename detail::expr_traits<typename Expr::proto_child10>::const_reference type;
1481 static type call(Expr const &e)
1483 return e.proto_base().child10;