1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file make_gcc_workaround.hpp
3 /// Special workaround code to make the make\<\> transform work on certain
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)
10 template<typename Tag, typename Args, long Arity >
11 struct make<proto::expr<Tag, Args, Arity>()>
12 : transform<make<proto::expr<Tag, Args, Arity>()> >
14 template<typename Expr, typename State, typename Data>
15 struct impl : transform_impl<Expr, State, Data>
17 typedef proto::expr<Tag, Args, Arity> result_type;
19 result_type operator ()(
20 typename impl::expr_param e
21 , typename impl::state_param s
22 , typename impl::data_param d
25 return proto::expr<Tag, Args, Arity>::make(
31 template<typename Tag, typename Args, long Arity >
32 struct make<proto::basic_expr<Tag, Args, Arity>()>
33 : transform<make<proto::basic_expr<Tag, Args, Arity>()> >
35 template<typename Expr, typename State, typename Data>
36 struct impl : transform_impl<Expr, State, Data>
38 typedef proto::basic_expr<Tag, Args, Arity> result_type;
40 result_type operator ()(
41 typename impl::expr_param e
42 , typename impl::state_param s
43 , typename impl::data_param d
46 return proto::basic_expr<Tag, Args, Arity>::make(
53 template<typename Tag, typename Args, long Arity , typename A0>
54 struct make<proto::expr<Tag, Args, Arity>(A0)>
55 : transform<make<proto::expr<Tag, Args, Arity>(A0)> >
57 template<typename Expr, typename State, typename Data>
58 struct impl : transform_impl<Expr, State, Data>
60 typedef proto::expr<Tag, Args, Arity> result_type;
62 result_type operator ()(
63 typename impl::expr_param e
64 , typename impl::state_param s
65 , typename impl::data_param d
68 return proto::expr<Tag, Args, Arity>::make(
69 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) )
74 template<typename Tag, typename Args, long Arity , typename A0>
75 struct make<proto::basic_expr<Tag, Args, Arity>(A0)>
76 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0)> >
78 template<typename Expr, typename State, typename Data>
79 struct impl : transform_impl<Expr, State, Data>
81 typedef proto::basic_expr<Tag, Args, Arity> result_type;
83 result_type operator ()(
84 typename impl::expr_param e
85 , typename impl::state_param s
86 , typename impl::data_param d
89 return proto::basic_expr<Tag, Args, Arity>::make(
90 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) )
96 template<typename Tag, typename Args, long Arity , typename A0 , typename A1>
97 struct make<proto::expr<Tag, Args, Arity>(A0 , A1)>
98 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1)> >
100 template<typename Expr, typename State, typename Data>
101 struct impl : transform_impl<Expr, State, Data>
103 typedef proto::expr<Tag, Args, Arity> result_type;
105 result_type operator ()(
106 typename impl::expr_param e
107 , typename impl::state_param s
108 , typename impl::data_param d
111 return proto::expr<Tag, Args, Arity>::make(
112 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) )
117 template<typename Tag, typename Args, long Arity , typename A0 , typename A1>
118 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1)>
119 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1)> >
121 template<typename Expr, typename State, typename Data>
122 struct impl : transform_impl<Expr, State, Data>
124 typedef proto::basic_expr<Tag, Args, Arity> result_type;
126 result_type operator ()(
127 typename impl::expr_param e
128 , typename impl::state_param s
129 , typename impl::data_param d
132 return proto::basic_expr<Tag, Args, Arity>::make(
133 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) )
139 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2>
140 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2)>
141 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2)> >
143 template<typename Expr, typename State, typename Data>
144 struct impl : transform_impl<Expr, State, Data>
146 typedef proto::expr<Tag, Args, Arity> result_type;
148 result_type operator ()(
149 typename impl::expr_param e
150 , typename impl::state_param s
151 , typename impl::data_param d
154 return proto::expr<Tag, Args, Arity>::make(
155 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) )
160 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2>
161 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2)>
162 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2)> >
164 template<typename Expr, typename State, typename Data>
165 struct impl : transform_impl<Expr, State, Data>
167 typedef proto::basic_expr<Tag, Args, Arity> result_type;
169 result_type operator ()(
170 typename impl::expr_param e
171 , typename impl::state_param s
172 , typename impl::data_param d
175 return proto::basic_expr<Tag, Args, Arity>::make(
176 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) )
182 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3>
183 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3)>
184 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3)> >
186 template<typename Expr, typename State, typename Data>
187 struct impl : transform_impl<Expr, State, Data>
189 typedef proto::expr<Tag, Args, Arity> result_type;
191 result_type operator ()(
192 typename impl::expr_param e
193 , typename impl::state_param s
194 , typename impl::data_param d
197 return proto::expr<Tag, Args, Arity>::make(
198 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) )
203 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3>
204 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3)>
205 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3)> >
207 template<typename Expr, typename State, typename Data>
208 struct impl : transform_impl<Expr, State, Data>
210 typedef proto::basic_expr<Tag, Args, Arity> result_type;
212 result_type operator ()(
213 typename impl::expr_param e
214 , typename impl::state_param s
215 , typename impl::data_param d
218 return proto::basic_expr<Tag, Args, Arity>::make(
219 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) )
225 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
226 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4)>
227 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4)> >
229 template<typename Expr, typename State, typename Data>
230 struct impl : transform_impl<Expr, State, Data>
232 typedef proto::expr<Tag, Args, Arity> result_type;
234 result_type operator ()(
235 typename impl::expr_param e
236 , typename impl::state_param s
237 , typename impl::data_param d
240 return proto::expr<Tag, Args, Arity>::make(
241 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) )
246 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
247 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4)>
248 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4)> >
250 template<typename Expr, typename State, typename Data>
251 struct impl : transform_impl<Expr, State, Data>
253 typedef proto::basic_expr<Tag, Args, Arity> result_type;
255 result_type operator ()(
256 typename impl::expr_param e
257 , typename impl::state_param s
258 , typename impl::data_param d
261 return proto::basic_expr<Tag, Args, Arity>::make(
262 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) )
268 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
269 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5)>
270 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5)> >
272 template<typename Expr, typename State, typename Data>
273 struct impl : transform_impl<Expr, State, Data>
275 typedef proto::expr<Tag, Args, Arity> result_type;
277 result_type operator ()(
278 typename impl::expr_param e
279 , typename impl::state_param s
280 , typename impl::data_param d
283 return proto::expr<Tag, Args, Arity>::make(
284 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) )
289 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
290 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5)>
291 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5)> >
293 template<typename Expr, typename State, typename Data>
294 struct impl : transform_impl<Expr, State, Data>
296 typedef proto::basic_expr<Tag, Args, Arity> result_type;
298 result_type operator ()(
299 typename impl::expr_param e
300 , typename impl::state_param s
301 , typename impl::data_param d
304 return proto::basic_expr<Tag, Args, Arity>::make(
305 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) )
311 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
312 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
313 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6)> >
315 template<typename Expr, typename State, typename Data>
316 struct impl : transform_impl<Expr, State, Data>
318 typedef proto::expr<Tag, Args, Arity> result_type;
320 result_type operator ()(
321 typename impl::expr_param e
322 , typename impl::state_param s
323 , typename impl::data_param d
326 return proto::expr<Tag, Args, Arity>::make(
327 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) )
332 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
333 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
334 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6)> >
336 template<typename Expr, typename State, typename Data>
337 struct impl : transform_impl<Expr, State, Data>
339 typedef proto::basic_expr<Tag, Args, Arity> result_type;
341 result_type operator ()(
342 typename impl::expr_param e
343 , typename impl::state_param s
344 , typename impl::data_param d
347 return proto::basic_expr<Tag, Args, Arity>::make(
348 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) )
354 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
355 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
356 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)> >
358 template<typename Expr, typename State, typename Data>
359 struct impl : transform_impl<Expr, State, Data>
361 typedef proto::expr<Tag, Args, Arity> result_type;
363 result_type operator ()(
364 typename impl::expr_param e
365 , typename impl::state_param s
366 , typename impl::data_param d
369 return proto::expr<Tag, Args, Arity>::make(
370 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) )
375 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
376 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
377 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)> >
379 template<typename Expr, typename State, typename Data>
380 struct impl : transform_impl<Expr, State, Data>
382 typedef proto::basic_expr<Tag, Args, Arity> result_type;
384 result_type operator ()(
385 typename impl::expr_param e
386 , typename impl::state_param s
387 , typename impl::data_param d
390 return proto::basic_expr<Tag, Args, Arity>::make(
391 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) )
397 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
398 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
399 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)> >
401 template<typename Expr, typename State, typename Data>
402 struct impl : transform_impl<Expr, State, Data>
404 typedef proto::expr<Tag, Args, Arity> result_type;
406 result_type operator ()(
407 typename impl::expr_param e
408 , typename impl::state_param s
409 , typename impl::data_param d
412 return proto::expr<Tag, Args, Arity>::make(
413 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) )
418 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
419 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
420 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)> >
422 template<typename Expr, typename State, typename Data>
423 struct impl : transform_impl<Expr, State, Data>
425 typedef proto::basic_expr<Tag, Args, Arity> result_type;
427 result_type operator ()(
428 typename impl::expr_param e
429 , typename impl::state_param s
430 , typename impl::data_param d
433 return proto::basic_expr<Tag, Args, Arity>::make(
434 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) )
440 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
441 struct make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
442 : transform<make<proto::expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)> >
444 template<typename Expr, typename State, typename Data>
445 struct impl : transform_impl<Expr, State, Data>
447 typedef proto::expr<Tag, Args, Arity> result_type;
449 result_type operator ()(
450 typename impl::expr_param e
451 , typename impl::state_param s
452 , typename impl::data_param d
455 return proto::expr<Tag, Args, Arity>::make(
456 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A9>::template impl<Expr, State, Data>()(e, s, d) )
461 template<typename Tag, typename Args, long Arity , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
462 struct make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
463 : transform<make<proto::basic_expr<Tag, Args, Arity>(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)> >
465 template<typename Expr, typename State, typename Data>
466 struct impl : transform_impl<Expr, State, Data>
468 typedef proto::basic_expr<Tag, Args, Arity> result_type;
470 result_type operator ()(
471 typename impl::expr_param e
472 , typename impl::state_param s
473 , typename impl::data_param d
476 return proto::basic_expr<Tag, Args, Arity>::make(
477 detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A9>::template impl<Expr, State, Data>()(e, s, d) )