1     ///////////////////////////////////////////////////////////////////////////////
2     /// \file default_function_impl.hpp
3     /// Contains definition of the default_function_impl, the implementation of the
4     /// _default transform for function-like nodes.
5     //
6     //  Copyright 2008 Eric Niebler. Distributed under the Boost
7     //  Software License, Version 1.0. (See accompanying file
8     //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9     template<typename Grammar, typename Expr, typename State, typename Data>
10     struct default_function_impl<Grammar, Expr, State, Data, 3>
11       : transform_impl<Expr, State, Data>
12     {
13         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2;
14         typedef
15             typename proto::detail::result_of_fixup<r0>::type
16         function_type;
17         typedef
18             typename BOOST_PROTO_RESULT_OF<
19                 function_type(r1 , r2)
20             >::type
21         result_type;
operator ()default_function_impl22         result_type operator ()(
23             typename default_function_impl::expr_param e
24           , typename default_function_impl::state_param s
25           , typename default_function_impl::data_param d
26         ) const
27         {
28             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
29         }
30     private:
invokedefault_function_impl31         result_type invoke(
32             typename default_function_impl::expr_param e
33           , typename default_function_impl::state_param s
34           , typename default_function_impl::data_param d
35           , mpl::false_
36         ) const
37         {
38             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
39                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d )
40             );
41         }
invokedefault_function_impl42         result_type invoke(
43             typename default_function_impl::expr_param e
44           , typename default_function_impl::state_param s
45           , typename default_function_impl::data_param d
46           , mpl::true_
47         ) const
48         {
49             BOOST_PROTO_USE_GET_POINTER();
50             typedef typename detail::class_member_traits<function_type>::class_type class_type;
51             return (
52                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
53                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
54             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ));
55         }
56     };
57     template<typename Grammar, typename Expr, typename State, typename Data>
58     struct default_function_impl<Grammar, Expr, State, Data, 4>
59       : transform_impl<Expr, State, Data>
60     {
61         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3;
62         typedef
63             typename proto::detail::result_of_fixup<r0>::type
64         function_type;
65         typedef
66             typename BOOST_PROTO_RESULT_OF<
67                 function_type(r1 , r2 , r3)
68             >::type
69         result_type;
operator ()default_function_impl70         result_type operator ()(
71             typename default_function_impl::expr_param e
72           , typename default_function_impl::state_param s
73           , typename default_function_impl::data_param d
74         ) const
75         {
76             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
77         }
78     private:
invokedefault_function_impl79         result_type invoke(
80             typename default_function_impl::expr_param e
81           , typename default_function_impl::state_param s
82           , typename default_function_impl::data_param d
83           , mpl::false_
84         ) const
85         {
86             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
87                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d )
88             );
89         }
invokedefault_function_impl90         result_type invoke(
91             typename default_function_impl::expr_param e
92           , typename default_function_impl::state_param s
93           , typename default_function_impl::data_param d
94           , mpl::true_
95         ) const
96         {
97             BOOST_PROTO_USE_GET_POINTER();
98             typedef typename detail::class_member_traits<function_type>::class_type class_type;
99             return (
100                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
101                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
102             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ));
103         }
104     };
105     template<typename Grammar, typename Expr, typename State, typename Data>
106     struct default_function_impl<Grammar, Expr, State, Data, 5>
107       : transform_impl<Expr, State, Data>
108     {
109         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4;
110         typedef
111             typename proto::detail::result_of_fixup<r0>::type
112         function_type;
113         typedef
114             typename BOOST_PROTO_RESULT_OF<
115                 function_type(r1 , r2 , r3 , r4)
116             >::type
117         result_type;
operator ()default_function_impl118         result_type operator ()(
119             typename default_function_impl::expr_param e
120           , typename default_function_impl::state_param s
121           , typename default_function_impl::data_param d
122         ) const
123         {
124             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
125         }
126     private:
invokedefault_function_impl127         result_type invoke(
128             typename default_function_impl::expr_param e
129           , typename default_function_impl::state_param s
130           , typename default_function_impl::data_param d
131           , mpl::false_
132         ) const
133         {
134             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
135                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d )
136             );
137         }
invokedefault_function_impl138         result_type invoke(
139             typename default_function_impl::expr_param e
140           , typename default_function_impl::state_param s
141           , typename default_function_impl::data_param d
142           , mpl::true_
143         ) const
144         {
145             BOOST_PROTO_USE_GET_POINTER();
146             typedef typename detail::class_member_traits<function_type>::class_type class_type;
147             return (
148                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
149                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
150             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ));
151         }
152     };
153     template<typename Grammar, typename Expr, typename State, typename Data>
154     struct default_function_impl<Grammar, Expr, State, Data, 6>
155       : transform_impl<Expr, State, Data>
156     {
157         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5;
158         typedef
159             typename proto::detail::result_of_fixup<r0>::type
160         function_type;
161         typedef
162             typename BOOST_PROTO_RESULT_OF<
163                 function_type(r1 , r2 , r3 , r4 , r5)
164             >::type
165         result_type;
operator ()default_function_impl166         result_type operator ()(
167             typename default_function_impl::expr_param e
168           , typename default_function_impl::state_param s
169           , typename default_function_impl::data_param d
170         ) const
171         {
172             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
173         }
174     private:
invokedefault_function_impl175         result_type invoke(
176             typename default_function_impl::expr_param e
177           , typename default_function_impl::state_param s
178           , typename default_function_impl::data_param d
179           , mpl::false_
180         ) const
181         {
182             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
183                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d )
184             );
185         }
invokedefault_function_impl186         result_type invoke(
187             typename default_function_impl::expr_param e
188           , typename default_function_impl::state_param s
189           , typename default_function_impl::data_param d
190           , mpl::true_
191         ) const
192         {
193             BOOST_PROTO_USE_GET_POINTER();
194             typedef typename detail::class_member_traits<function_type>::class_type class_type;
195             return (
196                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
197                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
198             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ));
199         }
200     };
201     template<typename Grammar, typename Expr, typename State, typename Data>
202     struct default_function_impl<Grammar, Expr, State, Data, 7>
203       : transform_impl<Expr, State, Data>
204     {
205         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6;
206         typedef
207             typename proto::detail::result_of_fixup<r0>::type
208         function_type;
209         typedef
210             typename BOOST_PROTO_RESULT_OF<
211                 function_type(r1 , r2 , r3 , r4 , r5 , r6)
212             >::type
213         result_type;
operator ()default_function_impl214         result_type operator ()(
215             typename default_function_impl::expr_param e
216           , typename default_function_impl::state_param s
217           , typename default_function_impl::data_param d
218         ) const
219         {
220             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
221         }
222     private:
invokedefault_function_impl223         result_type invoke(
224             typename default_function_impl::expr_param e
225           , typename default_function_impl::state_param s
226           , typename default_function_impl::data_param d
227           , mpl::false_
228         ) const
229         {
230             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
231                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d )
232             );
233         }
invokedefault_function_impl234         result_type invoke(
235             typename default_function_impl::expr_param e
236           , typename default_function_impl::state_param s
237           , typename default_function_impl::data_param d
238           , mpl::true_
239         ) const
240         {
241             BOOST_PROTO_USE_GET_POINTER();
242             typedef typename detail::class_member_traits<function_type>::class_type class_type;
243             return (
244                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
245                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
246             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ));
247         }
248     };
249     template<typename Grammar, typename Expr, typename State, typename Data>
250     struct default_function_impl<Grammar, Expr, State, Data, 8>
251       : transform_impl<Expr, State, Data>
252     {
253         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7;
254         typedef
255             typename proto::detail::result_of_fixup<r0>::type
256         function_type;
257         typedef
258             typename BOOST_PROTO_RESULT_OF<
259                 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7)
260             >::type
261         result_type;
operator ()default_function_impl262         result_type operator ()(
263             typename default_function_impl::expr_param e
264           , typename default_function_impl::state_param s
265           , typename default_function_impl::data_param d
266         ) const
267         {
268             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
269         }
270     private:
invokedefault_function_impl271         result_type invoke(
272             typename default_function_impl::expr_param e
273           , typename default_function_impl::state_param s
274           , typename default_function_impl::data_param d
275           , mpl::false_
276         ) const
277         {
278             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
279                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d )
280             );
281         }
invokedefault_function_impl282         result_type invoke(
283             typename default_function_impl::expr_param e
284           , typename default_function_impl::state_param s
285           , typename default_function_impl::data_param d
286           , mpl::true_
287         ) const
288         {
289             BOOST_PROTO_USE_GET_POINTER();
290             typedef typename detail::class_member_traits<function_type>::class_type class_type;
291             return (
292                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
293                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
294             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ));
295         }
296     };
297     template<typename Grammar, typename Expr, typename State, typename Data>
298     struct default_function_impl<Grammar, Expr, State, Data, 9>
299       : transform_impl<Expr, State, Data>
300     {
301         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; typedef typename result_of::child_c< Expr, 8>::type e8; typedef typename Grammar::template impl<e8, State, Data>::result_type r8;
302         typedef
303             typename proto::detail::result_of_fixup<r0>::type
304         function_type;
305         typedef
306             typename BOOST_PROTO_RESULT_OF<
307                 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7 , r8)
308             >::type
309         result_type;
operator ()default_function_impl310         result_type operator ()(
311             typename default_function_impl::expr_param e
312           , typename default_function_impl::state_param s
313           , typename default_function_impl::data_param d
314         ) const
315         {
316             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
317         }
318     private:
invokedefault_function_impl319         result_type invoke(
320             typename default_function_impl::expr_param e
321           , typename default_function_impl::state_param s
322           , typename default_function_impl::data_param d
323           , mpl::false_
324         ) const
325         {
326             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
327                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d )
328             );
329         }
invokedefault_function_impl330         result_type invoke(
331             typename default_function_impl::expr_param e
332           , typename default_function_impl::state_param s
333           , typename default_function_impl::data_param d
334           , mpl::true_
335         ) const
336         {
337             BOOST_PROTO_USE_GET_POINTER();
338             typedef typename detail::class_member_traits<function_type>::class_type class_type;
339             return (
340                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
341                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
342             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ));
343         }
344     };
345     template<typename Grammar, typename Expr, typename State, typename Data>
346     struct default_function_impl<Grammar, Expr, State, Data, 10>
347       : transform_impl<Expr, State, Data>
348     {
349         typedef typename result_of::child_c< Expr, 0>::type e0; typedef typename Grammar::template impl<e0, State, Data>::result_type r0; typedef typename result_of::child_c< Expr, 1>::type e1; typedef typename Grammar::template impl<e1, State, Data>::result_type r1; typedef typename result_of::child_c< Expr, 2>::type e2; typedef typename Grammar::template impl<e2, State, Data>::result_type r2; typedef typename result_of::child_c< Expr, 3>::type e3; typedef typename Grammar::template impl<e3, State, Data>::result_type r3; typedef typename result_of::child_c< Expr, 4>::type e4; typedef typename Grammar::template impl<e4, State, Data>::result_type r4; typedef typename result_of::child_c< Expr, 5>::type e5; typedef typename Grammar::template impl<e5, State, Data>::result_type r5; typedef typename result_of::child_c< Expr, 6>::type e6; typedef typename Grammar::template impl<e6, State, Data>::result_type r6; typedef typename result_of::child_c< Expr, 7>::type e7; typedef typename Grammar::template impl<e7, State, Data>::result_type r7; typedef typename result_of::child_c< Expr, 8>::type e8; typedef typename Grammar::template impl<e8, State, Data>::result_type r8; typedef typename result_of::child_c< Expr, 9>::type e9; typedef typename Grammar::template impl<e9, State, Data>::result_type r9;
350         typedef
351             typename proto::detail::result_of_fixup<r0>::type
352         function_type;
353         typedef
354             typename BOOST_PROTO_RESULT_OF<
355                 function_type(r1 , r2 , r3 , r4 , r5 , r6 , r7 , r8 , r9)
356             >::type
357         result_type;
operator ()default_function_impl358         result_type operator ()(
359             typename default_function_impl::expr_param e
360           , typename default_function_impl::state_param s
361           , typename default_function_impl::data_param d
362         ) const
363         {
364             return this->invoke(e, s, d, is_member_function_pointer<function_type>());
365         }
366     private:
invokedefault_function_impl367         result_type invoke(
368             typename default_function_impl::expr_param e
369           , typename default_function_impl::state_param s
370           , typename default_function_impl::data_param d
371           , mpl::false_
372         ) const
373         {
374             return typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )(
375                 typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ) , typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) , typename Grammar::template impl<e9, State, Data>()( proto::child_c< 9>( e), s, d )
376             );
377         }
invokedefault_function_impl378         result_type invoke(
379             typename default_function_impl::expr_param e
380           , typename default_function_impl::state_param s
381           , typename default_function_impl::data_param d
382           , mpl::true_
383         ) const
384         {
385             BOOST_PROTO_USE_GET_POINTER();
386             typedef typename detail::class_member_traits<function_type>::class_type class_type;
387             return (
388                 BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl<e1, State, Data>()( proto::child_c< 1>( e), s, d ))) ->*
389                 typename Grammar::template impl<e0, State, Data>()( proto::child_c< 0>( e), s, d )
390             )(typename Grammar::template impl<e2, State, Data>()( proto::child_c< 2>( e), s, d ) , typename Grammar::template impl<e3, State, Data>()( proto::child_c< 3>( e), s, d ) , typename Grammar::template impl<e4, State, Data>()( proto::child_c< 4>( e), s, d ) , typename Grammar::template impl<e5, State, Data>()( proto::child_c< 5>( e), s, d ) , typename Grammar::template impl<e6, State, Data>()( proto::child_c< 6>( e), s, d ) , typename Grammar::template impl<e7, State, Data>()( proto::child_c< 7>( e), s, d ) , typename Grammar::template impl<e8, State, Data>()( proto::child_c< 8>( e), s, d ) , typename Grammar::template impl<e9, State, Data>()( proto::child_c< 9>( e), s, d ));
391         }
392     };
393