1     ///////////////////////////////////////////////////////////////////////////////
2     /// \file pass_through_impl.hpp
3     ///
4     /// Specializations of pass_through_impl, used in the implementation of the
5     /// pass_through transform.
6     //
7     //  Copyright 2008 Eric Niebler. Distributed under the Boost
8     //  Software License, Version 1.0. (See accompanying file
9     //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
11     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 1>
12       : transform_impl<Expr, State, Data>
13     {
14         typedef typename pass_through_impl::expr unref_expr;
15         typedef
16             typename mpl::if_c<
17                 is_same<Domain, deduce_domain>::value
18               , typename unref_expr::proto_domain
19               , Domain
20             >::type
21         result_domain;
22         typedef
23             typename base_expr<
24                 result_domain
25               , typename unref_expr::proto_tag
26               , list1<
27                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type
28                 >
29             >::type
30         expr_type;
31         typedef typename result_domain::proto_generator proto_generator;
32         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
33         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl34         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
35         operator ()(
36             typename pass_through_impl::expr_param e
37           , typename pass_through_impl::state_param s
38           , typename pass_through_impl::data_param d
39         ) const
40         {
41             expr_type const that = {
42                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d )
43             };
44 
45 
46 
47             detail::ignore_unused(&that);
48             return proto_generator()(that);
49         }
50     };
51     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
52     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 2>
53       : transform_impl<Expr, State, Data>
54     {
55         typedef typename pass_through_impl::expr unref_expr;
56         typedef
57             typename mpl::if_c<
58                 is_same<Domain, deduce_domain>::value
59               , typename unref_expr::proto_domain
60               , Domain
61             >::type
62         result_domain;
63         typedef
64             typename base_expr<
65                 result_domain
66               , typename unref_expr::proto_tag
67               , list2<
68                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type
69                 >
70             >::type
71         expr_type;
72         typedef typename result_domain::proto_generator proto_generator;
73         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
74         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl75         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
76         operator ()(
77             typename pass_through_impl::expr_param e
78           , typename pass_through_impl::state_param s
79           , typename pass_through_impl::data_param d
80         ) const
81         {
82             expr_type const that = {
83                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d )
84             };
85 
86 
87 
88             detail::ignore_unused(&that);
89             return proto_generator()(that);
90         }
91     };
92     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
93     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 3>
94       : transform_impl<Expr, State, Data>
95     {
96         typedef typename pass_through_impl::expr unref_expr;
97         typedef
98             typename mpl::if_c<
99                 is_same<Domain, deduce_domain>::value
100               , typename unref_expr::proto_domain
101               , Domain
102             >::type
103         result_domain;
104         typedef
105             typename base_expr<
106                 result_domain
107               , typename unref_expr::proto_tag
108               , list3<
109                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type
110                 >
111             >::type
112         expr_type;
113         typedef typename result_domain::proto_generator proto_generator;
114         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
115         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl116         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
117         operator ()(
118             typename pass_through_impl::expr_param e
119           , typename pass_through_impl::state_param s
120           , typename pass_through_impl::data_param d
121         ) const
122         {
123             expr_type const that = {
124                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d )
125             };
126 
127 
128 
129             detail::ignore_unused(&that);
130             return proto_generator()(that);
131         }
132     };
133     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
134     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 4>
135       : transform_impl<Expr, State, Data>
136     {
137         typedef typename pass_through_impl::expr unref_expr;
138         typedef
139             typename mpl::if_c<
140                 is_same<Domain, deduce_domain>::value
141               , typename unref_expr::proto_domain
142               , Domain
143             >::type
144         result_domain;
145         typedef
146             typename base_expr<
147                 result_domain
148               , typename unref_expr::proto_tag
149               , list4<
150                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type
151                 >
152             >::type
153         expr_type;
154         typedef typename result_domain::proto_generator proto_generator;
155         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
156         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl157         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
158         operator ()(
159             typename pass_through_impl::expr_param e
160           , typename pass_through_impl::state_param s
161           , typename pass_through_impl::data_param d
162         ) const
163         {
164             expr_type const that = {
165                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d )
166             };
167 
168 
169 
170             detail::ignore_unused(&that);
171             return proto_generator()(that);
172         }
173     };
174     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
175     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 5>
176       : transform_impl<Expr, State, Data>
177     {
178         typedef typename pass_through_impl::expr unref_expr;
179         typedef
180             typename mpl::if_c<
181                 is_same<Domain, deduce_domain>::value
182               , typename unref_expr::proto_domain
183               , Domain
184             >::type
185         result_domain;
186         typedef
187             typename base_expr<
188                 result_domain
189               , typename unref_expr::proto_tag
190               , list5<
191                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type
192                 >
193             >::type
194         expr_type;
195         typedef typename result_domain::proto_generator proto_generator;
196         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
197         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl198         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
199         operator ()(
200             typename pass_through_impl::expr_param e
201           , typename pass_through_impl::state_param s
202           , typename pass_through_impl::data_param d
203         ) const
204         {
205             expr_type const that = {
206                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d )
207             };
208 
209 
210 
211             detail::ignore_unused(&that);
212             return proto_generator()(that);
213         }
214     };
215     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
216     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 6>
217       : transform_impl<Expr, State, Data>
218     {
219         typedef typename pass_through_impl::expr unref_expr;
220         typedef
221             typename mpl::if_c<
222                 is_same<Domain, deduce_domain>::value
223               , typename unref_expr::proto_domain
224               , Domain
225             >::type
226         result_domain;
227         typedef
228             typename base_expr<
229                 result_domain
230               , typename unref_expr::proto_tag
231               , list6<
232                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type
233                 >
234             >::type
235         expr_type;
236         typedef typename result_domain::proto_generator proto_generator;
237         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
238         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl239         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
240         operator ()(
241             typename pass_through_impl::expr_param e
242           , typename pass_through_impl::state_param s
243           , typename pass_through_impl::data_param d
244         ) const
245         {
246             expr_type const that = {
247                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d )
248             };
249 
250 
251 
252             detail::ignore_unused(&that);
253             return proto_generator()(that);
254         }
255     };
256     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
257     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 7>
258       : transform_impl<Expr, State, Data>
259     {
260         typedef typename pass_through_impl::expr unref_expr;
261         typedef
262             typename mpl::if_c<
263                 is_same<Domain, deduce_domain>::value
264               , typename unref_expr::proto_domain
265               , Domain
266             >::type
267         result_domain;
268         typedef
269             typename base_expr<
270                 result_domain
271               , typename unref_expr::proto_tag
272               , list7<
273                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type
274                 >
275             >::type
276         expr_type;
277         typedef typename result_domain::proto_generator proto_generator;
278         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
279         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl280         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
281         operator ()(
282             typename pass_through_impl::expr_param e
283           , typename pass_through_impl::state_param s
284           , typename pass_through_impl::data_param d
285         ) const
286         {
287             expr_type const that = {
288                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d )
289             };
290 
291 
292 
293             detail::ignore_unused(&that);
294             return proto_generator()(that);
295         }
296     };
297     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
298     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 8>
299       : transform_impl<Expr, State, Data>
300     {
301         typedef typename pass_through_impl::expr unref_expr;
302         typedef
303             typename mpl::if_c<
304                 is_same<Domain, deduce_domain>::value
305               , typename unref_expr::proto_domain
306               , Domain
307             >::type
308         result_domain;
309         typedef
310             typename base_expr<
311                 result_domain
312               , typename unref_expr::proto_tag
313               , list8<
314                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type
315                 >
316             >::type
317         expr_type;
318         typedef typename result_domain::proto_generator proto_generator;
319         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
320         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl321         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
322         operator ()(
323             typename pass_through_impl::expr_param e
324           , typename pass_through_impl::state_param s
325           , typename pass_through_impl::data_param d
326         ) const
327         {
328             expr_type const that = {
329                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d )
330             };
331 
332 
333 
334             detail::ignore_unused(&that);
335             return proto_generator()(that);
336         }
337     };
338     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
339     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 9>
340       : transform_impl<Expr, State, Data>
341     {
342         typedef typename pass_through_impl::expr unref_expr;
343         typedef
344             typename mpl::if_c<
345                 is_same<Domain, deduce_domain>::value
346               , typename unref_expr::proto_domain
347               , Domain
348             >::type
349         result_domain;
350         typedef
351             typename base_expr<
352                 result_domain
353               , typename unref_expr::proto_tag
354               , list9<
355                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type
356                 >
357             >::type
358         expr_type;
359         typedef typename result_domain::proto_generator proto_generator;
360         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
361         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl362         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
363         operator ()(
364             typename pass_through_impl::expr_param e
365           , typename pass_through_impl::state_param s
366           , typename pass_through_impl::data_param d
367         ) const
368         {
369             expr_type const that = {
370                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d )
371             };
372 
373 
374 
375             detail::ignore_unused(&that);
376             return proto_generator()(that);
377         }
378     };
379     template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
380     struct pass_through_impl<Grammar, Domain, Expr, State, Data, 10>
381       : transform_impl<Expr, State, Data>
382     {
383         typedef typename pass_through_impl::expr unref_expr;
384         typedef
385             typename mpl::if_c<
386                 is_same<Domain, deduce_domain>::value
387               , typename unref_expr::proto_domain
388               , Domain
389             >::type
390         result_domain;
391         typedef
392             typename base_expr<
393                 result_domain
394               , typename unref_expr::proto_tag
395               , list10<
396                     typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >::result_type
397                 >
398             >::type
399         expr_type;
400         typedef typename result_domain::proto_generator proto_generator;
401         typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
402         BOOST_FORCEINLINE
BOOST_PROTO_RETURN_TYPE_STRICT_LOOSEpass_through_impl403         BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
404         operator ()(
405             typename pass_through_impl::expr_param e
406           , typename pass_through_impl::state_param s
407           , typename pass_through_impl::data_param d
408         ) const
409         {
410             expr_type const that = {
411                 typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d ) , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >()( e.proto_base().child9, s, d )
412             };
413 
414 
415 
416             detail::ignore_unused(&that);
417             return proto_generator()(that);
418         }
419     };
420