1         ///////////////////////////////////////////////////////////////////////////////
2         /// \file expr.hpp
3         /// Contains definition of expr\<\> class template.
4         //
5         //  Copyright 2008 Eric Niebler. Distributed under the Boost
6         //  Software License, Version 1.0. (See accompanying file
7         //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36     template<typename Tag, typename Arg0>
37     struct expr<Tag, term<Arg0>, 0>
38     {
39         typedef Tag proto_tag;
40         static const long proto_arity_c = 0;
41         typedef mpl::long_<0 > proto_arity;
42         typedef expr proto_base_expr;
43         typedef term<Arg0> proto_args;
44         typedef basic_expr<Tag, proto_args, 0 > proto_grammar;
45         typedef default_domain proto_domain;
46         typedef default_generator proto_generator;
47         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
48         typedef expr proto_derived_expr;
49         typedef void proto_is_expr_;
50         typedef Arg0 proto_child0; proto_child0 child0;
51         typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
52 
53 
54         BOOST_FORCEINLINE
proto_baseexpr55         expr const &proto_base() const
56         {
57             return *this;
58         }
59 
60 
61         BOOST_FORCEINLINE
proto_baseexpr62         expr &proto_base()
63         {
64             return *this;
65         }
66 
67 
68 
69         template<typename A0>
70         BOOST_FORCEINLINE
makeexpr71         static expr const make(A0 &a0)
72         {
73             return detail::make_terminal(a0, static_cast<expr *>(0), static_cast<proto_args *>(0));
74         }
75 
76 
77         template<typename A0>
78         BOOST_FORCEINLINE
makeexpr79         static expr const make(A0 const &a0)
80         {
81             return detail::make_terminal(a0, static_cast<expr *>(0), static_cast<proto_args *>(0));
82         }
83 
84 
85         typedef detail::not_a_valid_type address_of_hack_type_;
86 
87 
88 
89 
90         BOOST_FORCEINLINE
91         proto::expr<
92             proto::tag::assign
93           , list2<expr &, expr const &>
94           , 2
95         > const
operator =expr96         operator =(expr const &a)
97         {
98             proto::expr<
99                 proto::tag::assign
100               , list2<expr &, expr const &>
101               , 2
102             > that = {*this, a};
103             return that;
104         }
105 
106 
107 
108 
109         template<typename A>
110         BOOST_FORCEINLINE
111         proto::expr<
112             proto::tag::assign
113           , list2<expr const &, typename result_of::as_child<A>::type>
114           , 2
115         > const
operator =expr116         operator =(A &a) const
117         {
118             proto::expr<
119                 proto::tag::assign
120               , list2<expr const &, typename result_of::as_child<A>::type>
121               , 2
122             > that = {*this, proto::as_child(a)};
123             return that;
124         }
125 
126 
127         template<typename A>
128         BOOST_FORCEINLINE
129         proto::expr<
130             proto::tag::assign
131           , list2<expr const &, typename result_of::as_child<A const>::type>
132           , 2
133         > const
operator =expr134         operator =(A const &a) const
135         {
136             proto::expr<
137                 proto::tag::assign
138               , list2<expr const &, typename result_of::as_child<A const>::type>
139               , 2
140             > that = {*this, proto::as_child(a)};
141             return that;
142         }
143 
144 
145         template<typename A>
146         BOOST_FORCEINLINE
147         proto::expr<
148             proto::tag::assign
149           , list2<expr &, typename result_of::as_child<A>::type>
150           , 2
151         > const
operator =expr152         operator =(A &a)
153         {
154             proto::expr<
155                 proto::tag::assign
156               , list2<expr &, typename result_of::as_child<A>::type>
157               , 2
158             > that = {*this, proto::as_child(a)};
159             return that;
160         }
161 
162 
163         template<typename A>
164         BOOST_FORCEINLINE
165         proto::expr<
166             proto::tag::assign
167           , list2<expr &, typename result_of::as_child<A const>::type>
168           , 2
169         > const
operator =expr170         operator =(A const &a)
171         {
172             proto::expr<
173                 proto::tag::assign
174               , list2<expr &, typename result_of::as_child<A const>::type>
175               , 2
176             > that = {*this, proto::as_child(a)};
177             return that;
178         }
179 
180 
181 
182 
183         template<typename A>
184         BOOST_FORCEINLINE
185         proto::expr<
186             proto::tag::subscript
187           , list2<expr const &, typename result_of::as_child<A>::type>
188           , 2
189         > const
operator []expr190         operator [](A &a) const
191         {
192             proto::expr<
193                 proto::tag::subscript
194               , list2<expr const &, typename result_of::as_child<A>::type>
195               , 2
196             > that = {*this, proto::as_child(a)};
197             return that;
198         }
199 
200 
201         template<typename A>
202         BOOST_FORCEINLINE
203         proto::expr<
204             proto::tag::subscript
205           , list2<expr const &, typename result_of::as_child<A const>::type>
206           , 2
207         > const
operator []expr208         operator [](A const &a) const
209         {
210             proto::expr<
211                 proto::tag::subscript
212               , list2<expr const &, typename result_of::as_child<A const>::type>
213               , 2
214             > that = {*this, proto::as_child(a)};
215             return that;
216         }
217 
218 
219         template<typename A>
220         BOOST_FORCEINLINE
221         proto::expr<
222             proto::tag::subscript
223           , list2<expr &, typename result_of::as_child<A>::type>
224           , 2
225         > const
operator []expr226         operator [](A &a)
227         {
228             proto::expr<
229                 proto::tag::subscript
230               , list2<expr &, typename result_of::as_child<A>::type>
231               , 2
232             > that = {*this, proto::as_child(a)};
233             return that;
234         }
235 
236 
237         template<typename A>
238         BOOST_FORCEINLINE
239         proto::expr<
240             proto::tag::subscript
241           , list2<expr &, typename result_of::as_child<A const>::type>
242           , 2
243         > const
operator []expr244         operator [](A const &a)
245         {
246             proto::expr<
247                 proto::tag::subscript
248               , list2<expr &, typename result_of::as_child<A const>::type>
249               , 2
250             > that = {*this, proto::as_child(a)};
251             return that;
252         }
253 
254 
255         template<typename Sig>
256         struct result
257         {
258             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
259         };
260 
261 
262 
263         BOOST_FORCEINLINE
264         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr265         operator ()() const
266         {
267             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
268             return that;
269         }
270 
271 
272         BOOST_FORCEINLINE
273         proto::expr<proto::tag::function, list1<expr &>, 1> const
operator ()expr274         operator ()()
275         {
276             proto::expr<proto::tag::function, list1<expr &>, 1> that = {*this};
277             return that;
278         }
279 
280 
281         template<typename A0>
282         BOOST_FORCEINLINE
283         typename result_of::funop1<
284             expr const
285           , default_domain , const A0
286         >::type const
operator ()expr287         operator ()(A0 const &a0) const
288         {
289             return result_of::funop1<
290                 expr const
291               , default_domain , const A0
292             >::call(*this , a0);
293         }
294 
295 
296         template<typename A0>
297         BOOST_FORCEINLINE
298         typename result_of::funop1<
299             expr
300           , default_domain , const A0
301         >::type const
operator ()expr302         operator ()(A0 const &a0)
303         {
304             return result_of::funop1<
305                 expr
306               , default_domain , const A0
307             >::call(*this , a0);
308         }
309 
310 
311         template<typename A0 , typename A1>
312         BOOST_FORCEINLINE
313         typename result_of::funop2<
314             expr const
315           , default_domain , const A0 , const A1
316         >::type const
operator ()expr317         operator ()(A0 const &a0 , A1 const &a1) const
318         {
319             return result_of::funop2<
320                 expr const
321               , default_domain , const A0 , const A1
322             >::call(*this , a0 , a1);
323         }
324 
325 
326         template<typename A0 , typename A1>
327         BOOST_FORCEINLINE
328         typename result_of::funop2<
329             expr
330           , default_domain , const A0 , const A1
331         >::type const
operator ()expr332         operator ()(A0 const &a0 , A1 const &a1)
333         {
334             return result_of::funop2<
335                 expr
336               , default_domain , const A0 , const A1
337             >::call(*this , a0 , a1);
338         }
339 
340 
341         template<typename A0 , typename A1 , typename A2>
342         BOOST_FORCEINLINE
343         typename result_of::funop3<
344             expr const
345           , default_domain , const A0 , const A1 , const A2
346         >::type const
operator ()expr347         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
348         {
349             return result_of::funop3<
350                 expr const
351               , default_domain , const A0 , const A1 , const A2
352             >::call(*this , a0 , a1 , a2);
353         }
354 
355 
356         template<typename A0 , typename A1 , typename A2>
357         BOOST_FORCEINLINE
358         typename result_of::funop3<
359             expr
360           , default_domain , const A0 , const A1 , const A2
361         >::type const
operator ()expr362         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2)
363         {
364             return result_of::funop3<
365                 expr
366               , default_domain , const A0 , const A1 , const A2
367             >::call(*this , a0 , a1 , a2);
368         }
369 
370 
371         template<typename A0 , typename A1 , typename A2 , typename A3>
372         BOOST_FORCEINLINE
373         typename result_of::funop4<
374             expr const
375           , default_domain , const A0 , const A1 , const A2 , const A3
376         >::type const
operator ()expr377         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
378         {
379             return result_of::funop4<
380                 expr const
381               , default_domain , const A0 , const A1 , const A2 , const A3
382             >::call(*this , a0 , a1 , a2 , a3);
383         }
384 
385 
386         template<typename A0 , typename A1 , typename A2 , typename A3>
387         BOOST_FORCEINLINE
388         typename result_of::funop4<
389             expr
390           , default_domain , const A0 , const A1 , const A2 , const A3
391         >::type const
operator ()expr392         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3)
393         {
394             return result_of::funop4<
395                 expr
396               , default_domain , const A0 , const A1 , const A2 , const A3
397             >::call(*this , a0 , a1 , a2 , a3);
398         }
399 
400 
401         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
402         BOOST_FORCEINLINE
403         typename result_of::funop5<
404             expr const
405           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
406         >::type const
operator ()expr407         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
408         {
409             return result_of::funop5<
410                 expr const
411               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
412             >::call(*this , a0 , a1 , a2 , a3 , a4);
413         }
414 
415 
416         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
417         BOOST_FORCEINLINE
418         typename result_of::funop5<
419             expr
420           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
421         >::type const
operator ()expr422         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4)
423         {
424             return result_of::funop5<
425                 expr
426               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
427             >::call(*this , a0 , a1 , a2 , a3 , a4);
428         }
429 
430 
431         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
432         BOOST_FORCEINLINE
433         typename result_of::funop6<
434             expr const
435           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
436         >::type const
operator ()expr437         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
438         {
439             return result_of::funop6<
440                 expr const
441               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
442             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
443         }
444 
445 
446         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
447         BOOST_FORCEINLINE
448         typename result_of::funop6<
449             expr
450           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
451         >::type const
operator ()expr452         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5)
453         {
454             return result_of::funop6<
455                 expr
456               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
457             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
458         }
459 
460 
461         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
462         BOOST_FORCEINLINE
463         typename result_of::funop7<
464             expr const
465           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
466         >::type const
operator ()expr467         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
468         {
469             return result_of::funop7<
470                 expr const
471               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
472             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
473         }
474 
475 
476         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
477         BOOST_FORCEINLINE
478         typename result_of::funop7<
479             expr
480           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
481         >::type const
operator ()expr482         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6)
483         {
484             return result_of::funop7<
485                 expr
486               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
487             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
488         }
489 
490 
491         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
492         BOOST_FORCEINLINE
493         typename result_of::funop8<
494             expr const
495           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
496         >::type const
operator ()expr497         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
498         {
499             return result_of::funop8<
500                 expr const
501               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
502             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
503         }
504 
505 
506         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
507         BOOST_FORCEINLINE
508         typename result_of::funop8<
509             expr
510           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
511         >::type const
operator ()expr512         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7)
513         {
514             return result_of::funop8<
515                 expr
516               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
517             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
518         }
519 
520 
521         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
522         BOOST_FORCEINLINE
523         typename result_of::funop9<
524             expr const
525           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
526         >::type const
operator ()expr527         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
528         {
529             return result_of::funop9<
530                 expr const
531               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
532             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
533         }
534 
535 
536         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
537         BOOST_FORCEINLINE
538         typename result_of::funop9<
539             expr
540           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
541         >::type const
operator ()expr542         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8)
543         {
544             return result_of::funop9<
545                 expr
546               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
547             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
548         }
549     };
550 
551 
552 
553 
554 
555 
556 
557 
558 
559 
560 
561 
562 
563 
564 
565 
566 
567 
568 
569 
570 
571 
572 
573 
574 
575 
576 
577     template<typename Tag , typename Arg0>
578     struct expr<Tag, list1<Arg0>, 1 >
579     {
580         typedef Tag proto_tag;
581         static const long proto_arity_c = 1;
582         typedef mpl::long_<1 > proto_arity;
583         typedef expr proto_base_expr;
584         typedef list1<Arg0> proto_args;
585         typedef basic_expr<Tag, proto_args, 1 > proto_grammar;
586         typedef default_domain proto_domain;
587         typedef default_generator proto_generator;
588         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
589         typedef expr proto_derived_expr;
590         typedef void proto_is_expr_;
591         typedef Arg0 proto_child0; proto_child0 child0;
592         typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
593 
594 
595         BOOST_FORCEINLINE
proto_baseexpr596         expr const &proto_base() const
597         {
598             return *this;
599         }
600 
601 
602         BOOST_FORCEINLINE
proto_baseexpr603         expr &proto_base()
604         {
605             return *this;
606         }
607 
608 
609 
610         template<typename A0>
611         BOOST_FORCEINLINE
makeexpr612         static expr const make(A0 const &a0)
613         {
614             expr that = {a0};
615             return that;
616         }
617 
618 
619 
620         typedef typename detail::address_of_hack<Tag, proto_child0>::type address_of_hack_type_;
621 
622 
623 
624 
625 
626 
627 
628         BOOST_FORCEINLINE
operator address_of_hack_type_expr629         operator address_of_hack_type_() const
630         {
631             return boost::addressof(this->child0);
632         }
633 
634 
635 
636 
637         BOOST_FORCEINLINE
638         proto::expr<
639             proto::tag::assign
640           , list2<expr &, expr const &>
641           , 2
642         > const
operator =expr643         operator =(expr const &a)
644         {
645             proto::expr<
646                 proto::tag::assign
647               , list2<expr &, expr const &>
648               , 2
649             > that = {*this, a};
650             return that;
651         }
652 
653 
654 
655 
656         template<typename A>
657         BOOST_FORCEINLINE
658         proto::expr<
659             proto::tag::assign
660           , list2<expr const &, typename result_of::as_child<A>::type>
661           , 2
662         > const
operator =expr663         operator =(A &a) const
664         {
665             proto::expr<
666                 proto::tag::assign
667               , list2<expr const &, typename result_of::as_child<A>::type>
668               , 2
669             > that = {*this, proto::as_child(a)};
670             return that;
671         }
672 
673 
674         template<typename A>
675         BOOST_FORCEINLINE
676         proto::expr<
677             proto::tag::assign
678           , list2<expr const &, typename result_of::as_child<A const>::type>
679           , 2
680         > const
operator =expr681         operator =(A const &a) const
682         {
683             proto::expr<
684                 proto::tag::assign
685               , list2<expr const &, typename result_of::as_child<A const>::type>
686               , 2
687             > that = {*this, proto::as_child(a)};
688             return that;
689         }
690 
691 
692 
693 
694         template<typename A>
695         BOOST_FORCEINLINE
696         proto::expr<
697             proto::tag::subscript
698           , list2<expr const &, typename result_of::as_child<A>::type>
699           , 2
700         > const
operator []expr701         operator [](A &a) const
702         {
703             proto::expr<
704                 proto::tag::subscript
705               , list2<expr const &, typename result_of::as_child<A>::type>
706               , 2
707             > that = {*this, proto::as_child(a)};
708             return that;
709         }
710 
711 
712         template<typename A>
713         BOOST_FORCEINLINE
714         proto::expr<
715             proto::tag::subscript
716           , list2<expr const &, typename result_of::as_child<A const>::type>
717           , 2
718         > const
operator []expr719         operator [](A const &a) const
720         {
721             proto::expr<
722                 proto::tag::subscript
723               , list2<expr const &, typename result_of::as_child<A const>::type>
724               , 2
725             > that = {*this, proto::as_child(a)};
726             return that;
727         }
728 
729 
730         template<typename Sig>
731         struct result
732         {
733             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
734         };
735 
736 
737 
738         BOOST_FORCEINLINE
739         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr740         operator ()() const
741         {
742             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
743             return that;
744         }
745 
746 
747         template<typename A0>
748         BOOST_FORCEINLINE
749         typename result_of::funop1<
750             expr const
751           , default_domain , const A0
752         >::type const
operator ()expr753         operator ()(A0 const &a0) const
754         {
755             return result_of::funop1<
756                 expr const
757               , default_domain , const A0
758             >::call(*this , a0);
759         }
760 
761 
762         template<typename A0 , typename A1>
763         BOOST_FORCEINLINE
764         typename result_of::funop2<
765             expr const
766           , default_domain , const A0 , const A1
767         >::type const
operator ()expr768         operator ()(A0 const &a0 , A1 const &a1) const
769         {
770             return result_of::funop2<
771                 expr const
772               , default_domain , const A0 , const A1
773             >::call(*this , a0 , a1);
774         }
775 
776 
777         template<typename A0 , typename A1 , typename A2>
778         BOOST_FORCEINLINE
779         typename result_of::funop3<
780             expr const
781           , default_domain , const A0 , const A1 , const A2
782         >::type const
operator ()expr783         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
784         {
785             return result_of::funop3<
786                 expr const
787               , default_domain , const A0 , const A1 , const A2
788             >::call(*this , a0 , a1 , a2);
789         }
790 
791 
792         template<typename A0 , typename A1 , typename A2 , typename A3>
793         BOOST_FORCEINLINE
794         typename result_of::funop4<
795             expr const
796           , default_domain , const A0 , const A1 , const A2 , const A3
797         >::type const
operator ()expr798         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
799         {
800             return result_of::funop4<
801                 expr const
802               , default_domain , const A0 , const A1 , const A2 , const A3
803             >::call(*this , a0 , a1 , a2 , a3);
804         }
805 
806 
807         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
808         BOOST_FORCEINLINE
809         typename result_of::funop5<
810             expr const
811           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
812         >::type const
operator ()expr813         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
814         {
815             return result_of::funop5<
816                 expr const
817               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
818             >::call(*this , a0 , a1 , a2 , a3 , a4);
819         }
820 
821 
822         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
823         BOOST_FORCEINLINE
824         typename result_of::funop6<
825             expr const
826           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
827         >::type const
operator ()expr828         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
829         {
830             return result_of::funop6<
831                 expr const
832               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
833             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
834         }
835 
836 
837         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
838         BOOST_FORCEINLINE
839         typename result_of::funop7<
840             expr const
841           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
842         >::type const
operator ()expr843         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
844         {
845             return result_of::funop7<
846                 expr const
847               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
848             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
849         }
850 
851 
852         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
853         BOOST_FORCEINLINE
854         typename result_of::funop8<
855             expr const
856           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
857         >::type const
operator ()expr858         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
859         {
860             return result_of::funop8<
861                 expr const
862               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
863             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
864         }
865 
866 
867         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
868         BOOST_FORCEINLINE
869         typename result_of::funop9<
870             expr const
871           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
872         >::type const
operator ()expr873         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
874         {
875             return result_of::funop9<
876                 expr const
877               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
878             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
879         }
880     };
881 
882 
883 
884 
885 
886 
887 
888 
889 
890 
891 
892 
893 
894 
895 
896 
897 
898 
899 
900 
901 
902 
903 
904 
905 
906 
907 
908     template<typename Tag , typename Arg0 , typename Arg1>
909     struct expr<Tag, list2<Arg0 , Arg1>, 2 >
910     {
911         typedef Tag proto_tag;
912         static const long proto_arity_c = 2;
913         typedef mpl::long_<2 > proto_arity;
914         typedef expr proto_base_expr;
915         typedef list2<Arg0 , Arg1> proto_args;
916         typedef basic_expr<Tag, proto_args, 2 > proto_grammar;
917         typedef default_domain proto_domain;
918         typedef default_generator proto_generator;
919         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
920         typedef expr proto_derived_expr;
921         typedef void proto_is_expr_;
922         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1;
923         typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
924 
925 
926         BOOST_FORCEINLINE
proto_baseexpr927         expr const &proto_base() const
928         {
929             return *this;
930         }
931 
932 
933         BOOST_FORCEINLINE
proto_baseexpr934         expr &proto_base()
935         {
936             return *this;
937         }
938 
939 
940 
941         template<typename A0 , typename A1>
942         BOOST_FORCEINLINE
makeexpr943         static expr const make(A0 const &a0 , A1 const &a1)
944         {
945             expr that = {a0 , a1};
946             return that;
947         }
948 
949 
950         typedef detail::not_a_valid_type address_of_hack_type_;
951 
952 
953 
954 
955         BOOST_FORCEINLINE
956         proto::expr<
957             proto::tag::assign
958           , list2<expr &, expr const &>
959           , 2
960         > const
operator =expr961         operator =(expr const &a)
962         {
963             proto::expr<
964                 proto::tag::assign
965               , list2<expr &, expr const &>
966               , 2
967             > that = {*this, a};
968             return that;
969         }
970 
971 
972 
973 
974         template<typename A>
975         BOOST_FORCEINLINE
976         proto::expr<
977             proto::tag::assign
978           , list2<expr const &, typename result_of::as_child<A>::type>
979           , 2
980         > const
operator =expr981         operator =(A &a) const
982         {
983             proto::expr<
984                 proto::tag::assign
985               , list2<expr const &, typename result_of::as_child<A>::type>
986               , 2
987             > that = {*this, proto::as_child(a)};
988             return that;
989         }
990 
991 
992         template<typename A>
993         BOOST_FORCEINLINE
994         proto::expr<
995             proto::tag::assign
996           , list2<expr const &, typename result_of::as_child<A const>::type>
997           , 2
998         > const
operator =expr999         operator =(A const &a) const
1000         {
1001             proto::expr<
1002                 proto::tag::assign
1003               , list2<expr const &, typename result_of::as_child<A const>::type>
1004               , 2
1005             > that = {*this, proto::as_child(a)};
1006             return that;
1007         }
1008 
1009 
1010 
1011 
1012         template<typename A>
1013         BOOST_FORCEINLINE
1014         proto::expr<
1015             proto::tag::subscript
1016           , list2<expr const &, typename result_of::as_child<A>::type>
1017           , 2
1018         > const
operator []expr1019         operator [](A &a) const
1020         {
1021             proto::expr<
1022                 proto::tag::subscript
1023               , list2<expr const &, typename result_of::as_child<A>::type>
1024               , 2
1025             > that = {*this, proto::as_child(a)};
1026             return that;
1027         }
1028 
1029 
1030         template<typename A>
1031         BOOST_FORCEINLINE
1032         proto::expr<
1033             proto::tag::subscript
1034           , list2<expr const &, typename result_of::as_child<A const>::type>
1035           , 2
1036         > const
operator []expr1037         operator [](A const &a) const
1038         {
1039             proto::expr<
1040                 proto::tag::subscript
1041               , list2<expr const &, typename result_of::as_child<A const>::type>
1042               , 2
1043             > that = {*this, proto::as_child(a)};
1044             return that;
1045         }
1046 
1047 
1048         template<typename Sig>
1049         struct result
1050         {
1051             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
1052         };
1053 
1054 
1055 
1056         BOOST_FORCEINLINE
1057         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr1058         operator ()() const
1059         {
1060             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
1061             return that;
1062         }
1063 
1064 
1065         template<typename A0>
1066         BOOST_FORCEINLINE
1067         typename result_of::funop1<
1068             expr const
1069           , default_domain , const A0
1070         >::type const
operator ()expr1071         operator ()(A0 const &a0) const
1072         {
1073             return result_of::funop1<
1074                 expr const
1075               , default_domain , const A0
1076             >::call(*this , a0);
1077         }
1078 
1079 
1080         template<typename A0 , typename A1>
1081         BOOST_FORCEINLINE
1082         typename result_of::funop2<
1083             expr const
1084           , default_domain , const A0 , const A1
1085         >::type const
operator ()expr1086         operator ()(A0 const &a0 , A1 const &a1) const
1087         {
1088             return result_of::funop2<
1089                 expr const
1090               , default_domain , const A0 , const A1
1091             >::call(*this , a0 , a1);
1092         }
1093 
1094 
1095         template<typename A0 , typename A1 , typename A2>
1096         BOOST_FORCEINLINE
1097         typename result_of::funop3<
1098             expr const
1099           , default_domain , const A0 , const A1 , const A2
1100         >::type const
operator ()expr1101         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
1102         {
1103             return result_of::funop3<
1104                 expr const
1105               , default_domain , const A0 , const A1 , const A2
1106             >::call(*this , a0 , a1 , a2);
1107         }
1108 
1109 
1110         template<typename A0 , typename A1 , typename A2 , typename A3>
1111         BOOST_FORCEINLINE
1112         typename result_of::funop4<
1113             expr const
1114           , default_domain , const A0 , const A1 , const A2 , const A3
1115         >::type const
operator ()expr1116         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
1117         {
1118             return result_of::funop4<
1119                 expr const
1120               , default_domain , const A0 , const A1 , const A2 , const A3
1121             >::call(*this , a0 , a1 , a2 , a3);
1122         }
1123 
1124 
1125         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
1126         BOOST_FORCEINLINE
1127         typename result_of::funop5<
1128             expr const
1129           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
1130         >::type const
operator ()expr1131         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
1132         {
1133             return result_of::funop5<
1134                 expr const
1135               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
1136             >::call(*this , a0 , a1 , a2 , a3 , a4);
1137         }
1138 
1139 
1140         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
1141         BOOST_FORCEINLINE
1142         typename result_of::funop6<
1143             expr const
1144           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
1145         >::type const
operator ()expr1146         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
1147         {
1148             return result_of::funop6<
1149                 expr const
1150               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
1151             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
1152         }
1153 
1154 
1155         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
1156         BOOST_FORCEINLINE
1157         typename result_of::funop7<
1158             expr const
1159           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
1160         >::type const
operator ()expr1161         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
1162         {
1163             return result_of::funop7<
1164                 expr const
1165               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
1166             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
1167         }
1168 
1169 
1170         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
1171         BOOST_FORCEINLINE
1172         typename result_of::funop8<
1173             expr const
1174           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
1175         >::type const
operator ()expr1176         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
1177         {
1178             return result_of::funop8<
1179                 expr const
1180               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
1181             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
1182         }
1183 
1184 
1185         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
1186         BOOST_FORCEINLINE
1187         typename result_of::funop9<
1188             expr const
1189           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
1190         >::type const
operator ()expr1191         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
1192         {
1193             return result_of::funop9<
1194                 expr const
1195               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
1196             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
1197         }
1198     };
1199 
1200 
1201 
1202 
1203 
1204 
1205 
1206 
1207 
1208 
1209 
1210 
1211 
1212 
1213 
1214 
1215 
1216 
1217 
1218 
1219 
1220 
1221 
1222 
1223 
1224 
1225 
1226     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2>
1227     struct expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3 >
1228     {
1229         typedef Tag proto_tag;
1230         static const long proto_arity_c = 3;
1231         typedef mpl::long_<3 > proto_arity;
1232         typedef expr proto_base_expr;
1233         typedef list3<Arg0 , Arg1 , Arg2> proto_args;
1234         typedef basic_expr<Tag, proto_args, 3 > proto_grammar;
1235         typedef default_domain proto_domain;
1236         typedef default_generator proto_generator;
1237         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
1238         typedef expr proto_derived_expr;
1239         typedef void proto_is_expr_;
1240         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2;
1241         typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
1242 
1243 
1244         BOOST_FORCEINLINE
proto_baseexpr1245         expr const &proto_base() const
1246         {
1247             return *this;
1248         }
1249 
1250 
1251         BOOST_FORCEINLINE
proto_baseexpr1252         expr &proto_base()
1253         {
1254             return *this;
1255         }
1256 
1257 
1258 
1259         template<typename A0 , typename A1 , typename A2>
1260         BOOST_FORCEINLINE
makeexpr1261         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2)
1262         {
1263             expr that = {a0 , a1 , a2};
1264             return that;
1265         }
1266 
1267 
1268         typedef detail::not_a_valid_type address_of_hack_type_;
1269 
1270 
1271 
1272 
1273         BOOST_FORCEINLINE
1274         proto::expr<
1275             proto::tag::assign
1276           , list2<expr &, expr const &>
1277           , 2
1278         > const
operator =expr1279         operator =(expr const &a)
1280         {
1281             proto::expr<
1282                 proto::tag::assign
1283               , list2<expr &, expr const &>
1284               , 2
1285             > that = {*this, a};
1286             return that;
1287         }
1288 
1289 
1290 
1291 
1292         template<typename A>
1293         BOOST_FORCEINLINE
1294         proto::expr<
1295             proto::tag::assign
1296           , list2<expr const &, typename result_of::as_child<A>::type>
1297           , 2
1298         > const
operator =expr1299         operator =(A &a) const
1300         {
1301             proto::expr<
1302                 proto::tag::assign
1303               , list2<expr const &, typename result_of::as_child<A>::type>
1304               , 2
1305             > that = {*this, proto::as_child(a)};
1306             return that;
1307         }
1308 
1309 
1310         template<typename A>
1311         BOOST_FORCEINLINE
1312         proto::expr<
1313             proto::tag::assign
1314           , list2<expr const &, typename result_of::as_child<A const>::type>
1315           , 2
1316         > const
operator =expr1317         operator =(A const &a) const
1318         {
1319             proto::expr<
1320                 proto::tag::assign
1321               , list2<expr const &, typename result_of::as_child<A const>::type>
1322               , 2
1323             > that = {*this, proto::as_child(a)};
1324             return that;
1325         }
1326 
1327 
1328 
1329 
1330         template<typename A>
1331         BOOST_FORCEINLINE
1332         proto::expr<
1333             proto::tag::subscript
1334           , list2<expr const &, typename result_of::as_child<A>::type>
1335           , 2
1336         > const
operator []expr1337         operator [](A &a) const
1338         {
1339             proto::expr<
1340                 proto::tag::subscript
1341               , list2<expr const &, typename result_of::as_child<A>::type>
1342               , 2
1343             > that = {*this, proto::as_child(a)};
1344             return that;
1345         }
1346 
1347 
1348         template<typename A>
1349         BOOST_FORCEINLINE
1350         proto::expr<
1351             proto::tag::subscript
1352           , list2<expr const &, typename result_of::as_child<A const>::type>
1353           , 2
1354         > const
operator []expr1355         operator [](A const &a) const
1356         {
1357             proto::expr<
1358                 proto::tag::subscript
1359               , list2<expr const &, typename result_of::as_child<A const>::type>
1360               , 2
1361             > that = {*this, proto::as_child(a)};
1362             return that;
1363         }
1364 
1365 
1366         template<typename Sig>
1367         struct result
1368         {
1369             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
1370         };
1371 
1372 
1373 
1374         BOOST_FORCEINLINE
1375         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr1376         operator ()() const
1377         {
1378             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
1379             return that;
1380         }
1381 
1382 
1383         template<typename A0>
1384         BOOST_FORCEINLINE
1385         typename result_of::funop1<
1386             expr const
1387           , default_domain , const A0
1388         >::type const
operator ()expr1389         operator ()(A0 const &a0) const
1390         {
1391             return result_of::funop1<
1392                 expr const
1393               , default_domain , const A0
1394             >::call(*this , a0);
1395         }
1396 
1397 
1398         template<typename A0 , typename A1>
1399         BOOST_FORCEINLINE
1400         typename result_of::funop2<
1401             expr const
1402           , default_domain , const A0 , const A1
1403         >::type const
operator ()expr1404         operator ()(A0 const &a0 , A1 const &a1) const
1405         {
1406             return result_of::funop2<
1407                 expr const
1408               , default_domain , const A0 , const A1
1409             >::call(*this , a0 , a1);
1410         }
1411 
1412 
1413         template<typename A0 , typename A1 , typename A2>
1414         BOOST_FORCEINLINE
1415         typename result_of::funop3<
1416             expr const
1417           , default_domain , const A0 , const A1 , const A2
1418         >::type const
operator ()expr1419         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
1420         {
1421             return result_of::funop3<
1422                 expr const
1423               , default_domain , const A0 , const A1 , const A2
1424             >::call(*this , a0 , a1 , a2);
1425         }
1426 
1427 
1428         template<typename A0 , typename A1 , typename A2 , typename A3>
1429         BOOST_FORCEINLINE
1430         typename result_of::funop4<
1431             expr const
1432           , default_domain , const A0 , const A1 , const A2 , const A3
1433         >::type const
operator ()expr1434         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
1435         {
1436             return result_of::funop4<
1437                 expr const
1438               , default_domain , const A0 , const A1 , const A2 , const A3
1439             >::call(*this , a0 , a1 , a2 , a3);
1440         }
1441 
1442 
1443         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
1444         BOOST_FORCEINLINE
1445         typename result_of::funop5<
1446             expr const
1447           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
1448         >::type const
operator ()expr1449         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
1450         {
1451             return result_of::funop5<
1452                 expr const
1453               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
1454             >::call(*this , a0 , a1 , a2 , a3 , a4);
1455         }
1456 
1457 
1458         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
1459         BOOST_FORCEINLINE
1460         typename result_of::funop6<
1461             expr const
1462           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
1463         >::type const
operator ()expr1464         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
1465         {
1466             return result_of::funop6<
1467                 expr const
1468               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
1469             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
1470         }
1471 
1472 
1473         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
1474         BOOST_FORCEINLINE
1475         typename result_of::funop7<
1476             expr const
1477           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
1478         >::type const
operator ()expr1479         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
1480         {
1481             return result_of::funop7<
1482                 expr const
1483               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
1484             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
1485         }
1486 
1487 
1488         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
1489         BOOST_FORCEINLINE
1490         typename result_of::funop8<
1491             expr const
1492           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
1493         >::type const
operator ()expr1494         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
1495         {
1496             return result_of::funop8<
1497                 expr const
1498               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
1499             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
1500         }
1501 
1502 
1503         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
1504         BOOST_FORCEINLINE
1505         typename result_of::funop9<
1506             expr const
1507           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
1508         >::type const
operator ()expr1509         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
1510         {
1511             return result_of::funop9<
1512                 expr const
1513               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
1514             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
1515         }
1516     };
1517 
1518 
1519 
1520 
1521 
1522 
1523 
1524 
1525 
1526 
1527 
1528 
1529 
1530 
1531 
1532 
1533 
1534 
1535 
1536 
1537 
1538 
1539 
1540 
1541 
1542 
1543 
1544     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3>
1545     struct expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4 >
1546     {
1547         typedef Tag proto_tag;
1548         static const long proto_arity_c = 4;
1549         typedef mpl::long_<4 > proto_arity;
1550         typedef expr proto_base_expr;
1551         typedef list4<Arg0 , Arg1 , Arg2 , Arg3> proto_args;
1552         typedef basic_expr<Tag, proto_args, 4 > proto_grammar;
1553         typedef default_domain proto_domain;
1554         typedef default_generator proto_generator;
1555         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
1556         typedef expr proto_derived_expr;
1557         typedef void proto_is_expr_;
1558         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3;
1559         typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
1560 
1561 
1562         BOOST_FORCEINLINE
proto_baseexpr1563         expr const &proto_base() const
1564         {
1565             return *this;
1566         }
1567 
1568 
1569         BOOST_FORCEINLINE
proto_baseexpr1570         expr &proto_base()
1571         {
1572             return *this;
1573         }
1574 
1575 
1576 
1577         template<typename A0 , typename A1 , typename A2 , typename A3>
1578         BOOST_FORCEINLINE
makeexpr1579         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3)
1580         {
1581             expr that = {a0 , a1 , a2 , a3};
1582             return that;
1583         }
1584 
1585 
1586         typedef detail::not_a_valid_type address_of_hack_type_;
1587 
1588 
1589 
1590 
1591         BOOST_FORCEINLINE
1592         proto::expr<
1593             proto::tag::assign
1594           , list2<expr &, expr const &>
1595           , 2
1596         > const
operator =expr1597         operator =(expr const &a)
1598         {
1599             proto::expr<
1600                 proto::tag::assign
1601               , list2<expr &, expr const &>
1602               , 2
1603             > that = {*this, a};
1604             return that;
1605         }
1606 
1607 
1608 
1609 
1610         template<typename A>
1611         BOOST_FORCEINLINE
1612         proto::expr<
1613             proto::tag::assign
1614           , list2<expr const &, typename result_of::as_child<A>::type>
1615           , 2
1616         > const
operator =expr1617         operator =(A &a) const
1618         {
1619             proto::expr<
1620                 proto::tag::assign
1621               , list2<expr const &, typename result_of::as_child<A>::type>
1622               , 2
1623             > that = {*this, proto::as_child(a)};
1624             return that;
1625         }
1626 
1627 
1628         template<typename A>
1629         BOOST_FORCEINLINE
1630         proto::expr<
1631             proto::tag::assign
1632           , list2<expr const &, typename result_of::as_child<A const>::type>
1633           , 2
1634         > const
operator =expr1635         operator =(A const &a) const
1636         {
1637             proto::expr<
1638                 proto::tag::assign
1639               , list2<expr const &, typename result_of::as_child<A const>::type>
1640               , 2
1641             > that = {*this, proto::as_child(a)};
1642             return that;
1643         }
1644 
1645 
1646 
1647 
1648         template<typename A>
1649         BOOST_FORCEINLINE
1650         proto::expr<
1651             proto::tag::subscript
1652           , list2<expr const &, typename result_of::as_child<A>::type>
1653           , 2
1654         > const
operator []expr1655         operator [](A &a) const
1656         {
1657             proto::expr<
1658                 proto::tag::subscript
1659               , list2<expr const &, typename result_of::as_child<A>::type>
1660               , 2
1661             > that = {*this, proto::as_child(a)};
1662             return that;
1663         }
1664 
1665 
1666         template<typename A>
1667         BOOST_FORCEINLINE
1668         proto::expr<
1669             proto::tag::subscript
1670           , list2<expr const &, typename result_of::as_child<A const>::type>
1671           , 2
1672         > const
operator []expr1673         operator [](A const &a) const
1674         {
1675             proto::expr<
1676                 proto::tag::subscript
1677               , list2<expr const &, typename result_of::as_child<A const>::type>
1678               , 2
1679             > that = {*this, proto::as_child(a)};
1680             return that;
1681         }
1682 
1683 
1684         template<typename Sig>
1685         struct result
1686         {
1687             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
1688         };
1689 
1690 
1691 
1692         BOOST_FORCEINLINE
1693         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr1694         operator ()() const
1695         {
1696             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
1697             return that;
1698         }
1699 
1700 
1701         template<typename A0>
1702         BOOST_FORCEINLINE
1703         typename result_of::funop1<
1704             expr const
1705           , default_domain , const A0
1706         >::type const
operator ()expr1707         operator ()(A0 const &a0) const
1708         {
1709             return result_of::funop1<
1710                 expr const
1711               , default_domain , const A0
1712             >::call(*this , a0);
1713         }
1714 
1715 
1716         template<typename A0 , typename A1>
1717         BOOST_FORCEINLINE
1718         typename result_of::funop2<
1719             expr const
1720           , default_domain , const A0 , const A1
1721         >::type const
operator ()expr1722         operator ()(A0 const &a0 , A1 const &a1) const
1723         {
1724             return result_of::funop2<
1725                 expr const
1726               , default_domain , const A0 , const A1
1727             >::call(*this , a0 , a1);
1728         }
1729 
1730 
1731         template<typename A0 , typename A1 , typename A2>
1732         BOOST_FORCEINLINE
1733         typename result_of::funop3<
1734             expr const
1735           , default_domain , const A0 , const A1 , const A2
1736         >::type const
operator ()expr1737         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
1738         {
1739             return result_of::funop3<
1740                 expr const
1741               , default_domain , const A0 , const A1 , const A2
1742             >::call(*this , a0 , a1 , a2);
1743         }
1744 
1745 
1746         template<typename A0 , typename A1 , typename A2 , typename A3>
1747         BOOST_FORCEINLINE
1748         typename result_of::funop4<
1749             expr const
1750           , default_domain , const A0 , const A1 , const A2 , const A3
1751         >::type const
operator ()expr1752         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
1753         {
1754             return result_of::funop4<
1755                 expr const
1756               , default_domain , const A0 , const A1 , const A2 , const A3
1757             >::call(*this , a0 , a1 , a2 , a3);
1758         }
1759 
1760 
1761         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
1762         BOOST_FORCEINLINE
1763         typename result_of::funop5<
1764             expr const
1765           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
1766         >::type const
operator ()expr1767         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
1768         {
1769             return result_of::funop5<
1770                 expr const
1771               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
1772             >::call(*this , a0 , a1 , a2 , a3 , a4);
1773         }
1774 
1775 
1776         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
1777         BOOST_FORCEINLINE
1778         typename result_of::funop6<
1779             expr const
1780           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
1781         >::type const
operator ()expr1782         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
1783         {
1784             return result_of::funop6<
1785                 expr const
1786               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
1787             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
1788         }
1789 
1790 
1791         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
1792         BOOST_FORCEINLINE
1793         typename result_of::funop7<
1794             expr const
1795           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
1796         >::type const
operator ()expr1797         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
1798         {
1799             return result_of::funop7<
1800                 expr const
1801               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
1802             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
1803         }
1804 
1805 
1806         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
1807         BOOST_FORCEINLINE
1808         typename result_of::funop8<
1809             expr const
1810           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
1811         >::type const
operator ()expr1812         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
1813         {
1814             return result_of::funop8<
1815                 expr const
1816               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
1817             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
1818         }
1819 
1820 
1821         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
1822         BOOST_FORCEINLINE
1823         typename result_of::funop9<
1824             expr const
1825           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
1826         >::type const
operator ()expr1827         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
1828         {
1829             return result_of::funop9<
1830                 expr const
1831               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
1832             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
1833         }
1834     };
1835 
1836 
1837 
1838 
1839 
1840 
1841 
1842 
1843 
1844 
1845 
1846 
1847 
1848 
1849 
1850 
1851 
1852 
1853 
1854 
1855 
1856 
1857 
1858 
1859 
1860 
1861 
1862     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4>
1863     struct expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5 >
1864     {
1865         typedef Tag proto_tag;
1866         static const long proto_arity_c = 5;
1867         typedef mpl::long_<5 > proto_arity;
1868         typedef expr proto_base_expr;
1869         typedef list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4> proto_args;
1870         typedef basic_expr<Tag, proto_args, 5 > proto_grammar;
1871         typedef default_domain proto_domain;
1872         typedef default_generator proto_generator;
1873         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
1874         typedef expr proto_derived_expr;
1875         typedef void proto_is_expr_;
1876         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4;
1877         typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
1878 
1879 
1880         BOOST_FORCEINLINE
proto_baseexpr1881         expr const &proto_base() const
1882         {
1883             return *this;
1884         }
1885 
1886 
1887         BOOST_FORCEINLINE
proto_baseexpr1888         expr &proto_base()
1889         {
1890             return *this;
1891         }
1892 
1893 
1894 
1895         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
1896         BOOST_FORCEINLINE
makeexpr1897         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4)
1898         {
1899             expr that = {a0 , a1 , a2 , a3 , a4};
1900             return that;
1901         }
1902 
1903 
1904         typedef detail::not_a_valid_type address_of_hack_type_;
1905 
1906 
1907 
1908 
1909         BOOST_FORCEINLINE
1910         proto::expr<
1911             proto::tag::assign
1912           , list2<expr &, expr const &>
1913           , 2
1914         > const
operator =expr1915         operator =(expr const &a)
1916         {
1917             proto::expr<
1918                 proto::tag::assign
1919               , list2<expr &, expr const &>
1920               , 2
1921             > that = {*this, a};
1922             return that;
1923         }
1924 
1925 
1926 
1927 
1928         template<typename A>
1929         BOOST_FORCEINLINE
1930         proto::expr<
1931             proto::tag::assign
1932           , list2<expr const &, typename result_of::as_child<A>::type>
1933           , 2
1934         > const
operator =expr1935         operator =(A &a) const
1936         {
1937             proto::expr<
1938                 proto::tag::assign
1939               , list2<expr const &, typename result_of::as_child<A>::type>
1940               , 2
1941             > that = {*this, proto::as_child(a)};
1942             return that;
1943         }
1944 
1945 
1946         template<typename A>
1947         BOOST_FORCEINLINE
1948         proto::expr<
1949             proto::tag::assign
1950           , list2<expr const &, typename result_of::as_child<A const>::type>
1951           , 2
1952         > const
operator =expr1953         operator =(A const &a) const
1954         {
1955             proto::expr<
1956                 proto::tag::assign
1957               , list2<expr const &, typename result_of::as_child<A const>::type>
1958               , 2
1959             > that = {*this, proto::as_child(a)};
1960             return that;
1961         }
1962 
1963 
1964 
1965 
1966         template<typename A>
1967         BOOST_FORCEINLINE
1968         proto::expr<
1969             proto::tag::subscript
1970           , list2<expr const &, typename result_of::as_child<A>::type>
1971           , 2
1972         > const
operator []expr1973         operator [](A &a) const
1974         {
1975             proto::expr<
1976                 proto::tag::subscript
1977               , list2<expr const &, typename result_of::as_child<A>::type>
1978               , 2
1979             > that = {*this, proto::as_child(a)};
1980             return that;
1981         }
1982 
1983 
1984         template<typename A>
1985         BOOST_FORCEINLINE
1986         proto::expr<
1987             proto::tag::subscript
1988           , list2<expr const &, typename result_of::as_child<A const>::type>
1989           , 2
1990         > const
operator []expr1991         operator [](A const &a) const
1992         {
1993             proto::expr<
1994                 proto::tag::subscript
1995               , list2<expr const &, typename result_of::as_child<A const>::type>
1996               , 2
1997             > that = {*this, proto::as_child(a)};
1998             return that;
1999         }
2000 
2001 
2002         template<typename Sig>
2003         struct result
2004         {
2005             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
2006         };
2007 
2008 
2009 
2010         BOOST_FORCEINLINE
2011         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr2012         operator ()() const
2013         {
2014             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
2015             return that;
2016         }
2017 
2018 
2019         template<typename A0>
2020         BOOST_FORCEINLINE
2021         typename result_of::funop1<
2022             expr const
2023           , default_domain , const A0
2024         >::type const
operator ()expr2025         operator ()(A0 const &a0) const
2026         {
2027             return result_of::funop1<
2028                 expr const
2029               , default_domain , const A0
2030             >::call(*this , a0);
2031         }
2032 
2033 
2034         template<typename A0 , typename A1>
2035         BOOST_FORCEINLINE
2036         typename result_of::funop2<
2037             expr const
2038           , default_domain , const A0 , const A1
2039         >::type const
operator ()expr2040         operator ()(A0 const &a0 , A1 const &a1) const
2041         {
2042             return result_of::funop2<
2043                 expr const
2044               , default_domain , const A0 , const A1
2045             >::call(*this , a0 , a1);
2046         }
2047 
2048 
2049         template<typename A0 , typename A1 , typename A2>
2050         BOOST_FORCEINLINE
2051         typename result_of::funop3<
2052             expr const
2053           , default_domain , const A0 , const A1 , const A2
2054         >::type const
operator ()expr2055         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
2056         {
2057             return result_of::funop3<
2058                 expr const
2059               , default_domain , const A0 , const A1 , const A2
2060             >::call(*this , a0 , a1 , a2);
2061         }
2062 
2063 
2064         template<typename A0 , typename A1 , typename A2 , typename A3>
2065         BOOST_FORCEINLINE
2066         typename result_of::funop4<
2067             expr const
2068           , default_domain , const A0 , const A1 , const A2 , const A3
2069         >::type const
operator ()expr2070         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
2071         {
2072             return result_of::funop4<
2073                 expr const
2074               , default_domain , const A0 , const A1 , const A2 , const A3
2075             >::call(*this , a0 , a1 , a2 , a3);
2076         }
2077 
2078 
2079         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
2080         BOOST_FORCEINLINE
2081         typename result_of::funop5<
2082             expr const
2083           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
2084         >::type const
operator ()expr2085         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
2086         {
2087             return result_of::funop5<
2088                 expr const
2089               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
2090             >::call(*this , a0 , a1 , a2 , a3 , a4);
2091         }
2092 
2093 
2094         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
2095         BOOST_FORCEINLINE
2096         typename result_of::funop6<
2097             expr const
2098           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
2099         >::type const
operator ()expr2100         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
2101         {
2102             return result_of::funop6<
2103                 expr const
2104               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
2105             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
2106         }
2107 
2108 
2109         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
2110         BOOST_FORCEINLINE
2111         typename result_of::funop7<
2112             expr const
2113           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
2114         >::type const
operator ()expr2115         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
2116         {
2117             return result_of::funop7<
2118                 expr const
2119               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
2120             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
2121         }
2122 
2123 
2124         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
2125         BOOST_FORCEINLINE
2126         typename result_of::funop8<
2127             expr const
2128           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
2129         >::type const
operator ()expr2130         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
2131         {
2132             return result_of::funop8<
2133                 expr const
2134               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
2135             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
2136         }
2137 
2138 
2139         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
2140         BOOST_FORCEINLINE
2141         typename result_of::funop9<
2142             expr const
2143           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
2144         >::type const
operator ()expr2145         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
2146         {
2147             return result_of::funop9<
2148                 expr const
2149               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
2150             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
2151         }
2152     };
2153 
2154 
2155 
2156 
2157 
2158 
2159 
2160 
2161 
2162 
2163 
2164 
2165 
2166 
2167 
2168 
2169 
2170 
2171 
2172 
2173 
2174 
2175 
2176 
2177 
2178 
2179 
2180     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5>
2181     struct expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6 >
2182     {
2183         typedef Tag proto_tag;
2184         static const long proto_arity_c = 6;
2185         typedef mpl::long_<6 > proto_arity;
2186         typedef expr proto_base_expr;
2187         typedef list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5> proto_args;
2188         typedef basic_expr<Tag, proto_args, 6 > proto_grammar;
2189         typedef default_domain proto_domain;
2190         typedef default_generator proto_generator;
2191         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
2192         typedef expr proto_derived_expr;
2193         typedef void proto_is_expr_;
2194         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5;
2195         typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
2196 
2197 
2198         BOOST_FORCEINLINE
proto_baseexpr2199         expr const &proto_base() const
2200         {
2201             return *this;
2202         }
2203 
2204 
2205         BOOST_FORCEINLINE
proto_baseexpr2206         expr &proto_base()
2207         {
2208             return *this;
2209         }
2210 
2211 
2212 
2213         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
2214         BOOST_FORCEINLINE
makeexpr2215         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5)
2216         {
2217             expr that = {a0 , a1 , a2 , a3 , a4 , a5};
2218             return that;
2219         }
2220 
2221 
2222         typedef detail::not_a_valid_type address_of_hack_type_;
2223 
2224 
2225 
2226 
2227         BOOST_FORCEINLINE
2228         proto::expr<
2229             proto::tag::assign
2230           , list2<expr &, expr const &>
2231           , 2
2232         > const
operator =expr2233         operator =(expr const &a)
2234         {
2235             proto::expr<
2236                 proto::tag::assign
2237               , list2<expr &, expr const &>
2238               , 2
2239             > that = {*this, a};
2240             return that;
2241         }
2242 
2243 
2244 
2245 
2246         template<typename A>
2247         BOOST_FORCEINLINE
2248         proto::expr<
2249             proto::tag::assign
2250           , list2<expr const &, typename result_of::as_child<A>::type>
2251           , 2
2252         > const
operator =expr2253         operator =(A &a) const
2254         {
2255             proto::expr<
2256                 proto::tag::assign
2257               , list2<expr const &, typename result_of::as_child<A>::type>
2258               , 2
2259             > that = {*this, proto::as_child(a)};
2260             return that;
2261         }
2262 
2263 
2264         template<typename A>
2265         BOOST_FORCEINLINE
2266         proto::expr<
2267             proto::tag::assign
2268           , list2<expr const &, typename result_of::as_child<A const>::type>
2269           , 2
2270         > const
operator =expr2271         operator =(A const &a) const
2272         {
2273             proto::expr<
2274                 proto::tag::assign
2275               , list2<expr const &, typename result_of::as_child<A const>::type>
2276               , 2
2277             > that = {*this, proto::as_child(a)};
2278             return that;
2279         }
2280 
2281 
2282 
2283 
2284         template<typename A>
2285         BOOST_FORCEINLINE
2286         proto::expr<
2287             proto::tag::subscript
2288           , list2<expr const &, typename result_of::as_child<A>::type>
2289           , 2
2290         > const
operator []expr2291         operator [](A &a) const
2292         {
2293             proto::expr<
2294                 proto::tag::subscript
2295               , list2<expr const &, typename result_of::as_child<A>::type>
2296               , 2
2297             > that = {*this, proto::as_child(a)};
2298             return that;
2299         }
2300 
2301 
2302         template<typename A>
2303         BOOST_FORCEINLINE
2304         proto::expr<
2305             proto::tag::subscript
2306           , list2<expr const &, typename result_of::as_child<A const>::type>
2307           , 2
2308         > const
operator []expr2309         operator [](A const &a) const
2310         {
2311             proto::expr<
2312                 proto::tag::subscript
2313               , list2<expr const &, typename result_of::as_child<A const>::type>
2314               , 2
2315             > that = {*this, proto::as_child(a)};
2316             return that;
2317         }
2318 
2319 
2320         template<typename Sig>
2321         struct result
2322         {
2323             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
2324         };
2325 
2326 
2327 
2328         BOOST_FORCEINLINE
2329         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr2330         operator ()() const
2331         {
2332             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
2333             return that;
2334         }
2335 
2336 
2337         template<typename A0>
2338         BOOST_FORCEINLINE
2339         typename result_of::funop1<
2340             expr const
2341           , default_domain , const A0
2342         >::type const
operator ()expr2343         operator ()(A0 const &a0) const
2344         {
2345             return result_of::funop1<
2346                 expr const
2347               , default_domain , const A0
2348             >::call(*this , a0);
2349         }
2350 
2351 
2352         template<typename A0 , typename A1>
2353         BOOST_FORCEINLINE
2354         typename result_of::funop2<
2355             expr const
2356           , default_domain , const A0 , const A1
2357         >::type const
operator ()expr2358         operator ()(A0 const &a0 , A1 const &a1) const
2359         {
2360             return result_of::funop2<
2361                 expr const
2362               , default_domain , const A0 , const A1
2363             >::call(*this , a0 , a1);
2364         }
2365 
2366 
2367         template<typename A0 , typename A1 , typename A2>
2368         BOOST_FORCEINLINE
2369         typename result_of::funop3<
2370             expr const
2371           , default_domain , const A0 , const A1 , const A2
2372         >::type const
operator ()expr2373         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
2374         {
2375             return result_of::funop3<
2376                 expr const
2377               , default_domain , const A0 , const A1 , const A2
2378             >::call(*this , a0 , a1 , a2);
2379         }
2380 
2381 
2382         template<typename A0 , typename A1 , typename A2 , typename A3>
2383         BOOST_FORCEINLINE
2384         typename result_of::funop4<
2385             expr const
2386           , default_domain , const A0 , const A1 , const A2 , const A3
2387         >::type const
operator ()expr2388         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
2389         {
2390             return result_of::funop4<
2391                 expr const
2392               , default_domain , const A0 , const A1 , const A2 , const A3
2393             >::call(*this , a0 , a1 , a2 , a3);
2394         }
2395 
2396 
2397         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
2398         BOOST_FORCEINLINE
2399         typename result_of::funop5<
2400             expr const
2401           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
2402         >::type const
operator ()expr2403         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
2404         {
2405             return result_of::funop5<
2406                 expr const
2407               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
2408             >::call(*this , a0 , a1 , a2 , a3 , a4);
2409         }
2410 
2411 
2412         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
2413         BOOST_FORCEINLINE
2414         typename result_of::funop6<
2415             expr const
2416           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
2417         >::type const
operator ()expr2418         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
2419         {
2420             return result_of::funop6<
2421                 expr const
2422               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
2423             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
2424         }
2425 
2426 
2427         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
2428         BOOST_FORCEINLINE
2429         typename result_of::funop7<
2430             expr const
2431           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
2432         >::type const
operator ()expr2433         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
2434         {
2435             return result_of::funop7<
2436                 expr const
2437               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
2438             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
2439         }
2440 
2441 
2442         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
2443         BOOST_FORCEINLINE
2444         typename result_of::funop8<
2445             expr const
2446           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
2447         >::type const
operator ()expr2448         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
2449         {
2450             return result_of::funop8<
2451                 expr const
2452               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
2453             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
2454         }
2455 
2456 
2457         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
2458         BOOST_FORCEINLINE
2459         typename result_of::funop9<
2460             expr const
2461           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
2462         >::type const
operator ()expr2463         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
2464         {
2465             return result_of::funop9<
2466                 expr const
2467               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
2468             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
2469         }
2470     };
2471 
2472 
2473 
2474 
2475 
2476 
2477 
2478 
2479 
2480 
2481 
2482 
2483 
2484 
2485 
2486 
2487 
2488 
2489 
2490 
2491 
2492 
2493 
2494 
2495 
2496 
2497 
2498     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6>
2499     struct expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7 >
2500     {
2501         typedef Tag proto_tag;
2502         static const long proto_arity_c = 7;
2503         typedef mpl::long_<7 > proto_arity;
2504         typedef expr proto_base_expr;
2505         typedef list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6> proto_args;
2506         typedef basic_expr<Tag, proto_args, 7 > proto_grammar;
2507         typedef default_domain proto_domain;
2508         typedef default_generator proto_generator;
2509         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
2510         typedef expr proto_derived_expr;
2511         typedef void proto_is_expr_;
2512         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6;
2513         typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
2514 
2515 
2516         BOOST_FORCEINLINE
proto_baseexpr2517         expr const &proto_base() const
2518         {
2519             return *this;
2520         }
2521 
2522 
2523         BOOST_FORCEINLINE
proto_baseexpr2524         expr &proto_base()
2525         {
2526             return *this;
2527         }
2528 
2529 
2530 
2531         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
2532         BOOST_FORCEINLINE
makeexpr2533         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6)
2534         {
2535             expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6};
2536             return that;
2537         }
2538 
2539 
2540         typedef detail::not_a_valid_type address_of_hack_type_;
2541 
2542 
2543 
2544 
2545         BOOST_FORCEINLINE
2546         proto::expr<
2547             proto::tag::assign
2548           , list2<expr &, expr const &>
2549           , 2
2550         > const
operator =expr2551         operator =(expr const &a)
2552         {
2553             proto::expr<
2554                 proto::tag::assign
2555               , list2<expr &, expr const &>
2556               , 2
2557             > that = {*this, a};
2558             return that;
2559         }
2560 
2561 
2562 
2563 
2564         template<typename A>
2565         BOOST_FORCEINLINE
2566         proto::expr<
2567             proto::tag::assign
2568           , list2<expr const &, typename result_of::as_child<A>::type>
2569           , 2
2570         > const
operator =expr2571         operator =(A &a) const
2572         {
2573             proto::expr<
2574                 proto::tag::assign
2575               , list2<expr const &, typename result_of::as_child<A>::type>
2576               , 2
2577             > that = {*this, proto::as_child(a)};
2578             return that;
2579         }
2580 
2581 
2582         template<typename A>
2583         BOOST_FORCEINLINE
2584         proto::expr<
2585             proto::tag::assign
2586           , list2<expr const &, typename result_of::as_child<A const>::type>
2587           , 2
2588         > const
operator =expr2589         operator =(A const &a) const
2590         {
2591             proto::expr<
2592                 proto::tag::assign
2593               , list2<expr const &, typename result_of::as_child<A const>::type>
2594               , 2
2595             > that = {*this, proto::as_child(a)};
2596             return that;
2597         }
2598 
2599 
2600 
2601 
2602         template<typename A>
2603         BOOST_FORCEINLINE
2604         proto::expr<
2605             proto::tag::subscript
2606           , list2<expr const &, typename result_of::as_child<A>::type>
2607           , 2
2608         > const
operator []expr2609         operator [](A &a) const
2610         {
2611             proto::expr<
2612                 proto::tag::subscript
2613               , list2<expr const &, typename result_of::as_child<A>::type>
2614               , 2
2615             > that = {*this, proto::as_child(a)};
2616             return that;
2617         }
2618 
2619 
2620         template<typename A>
2621         BOOST_FORCEINLINE
2622         proto::expr<
2623             proto::tag::subscript
2624           , list2<expr const &, typename result_of::as_child<A const>::type>
2625           , 2
2626         > const
operator []expr2627         operator [](A const &a) const
2628         {
2629             proto::expr<
2630                 proto::tag::subscript
2631               , list2<expr const &, typename result_of::as_child<A const>::type>
2632               , 2
2633             > that = {*this, proto::as_child(a)};
2634             return that;
2635         }
2636 
2637 
2638         template<typename Sig>
2639         struct result
2640         {
2641             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
2642         };
2643 
2644 
2645 
2646         BOOST_FORCEINLINE
2647         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr2648         operator ()() const
2649         {
2650             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
2651             return that;
2652         }
2653 
2654 
2655         template<typename A0>
2656         BOOST_FORCEINLINE
2657         typename result_of::funop1<
2658             expr const
2659           , default_domain , const A0
2660         >::type const
operator ()expr2661         operator ()(A0 const &a0) const
2662         {
2663             return result_of::funop1<
2664                 expr const
2665               , default_domain , const A0
2666             >::call(*this , a0);
2667         }
2668 
2669 
2670         template<typename A0 , typename A1>
2671         BOOST_FORCEINLINE
2672         typename result_of::funop2<
2673             expr const
2674           , default_domain , const A0 , const A1
2675         >::type const
operator ()expr2676         operator ()(A0 const &a0 , A1 const &a1) const
2677         {
2678             return result_of::funop2<
2679                 expr const
2680               , default_domain , const A0 , const A1
2681             >::call(*this , a0 , a1);
2682         }
2683 
2684 
2685         template<typename A0 , typename A1 , typename A2>
2686         BOOST_FORCEINLINE
2687         typename result_of::funop3<
2688             expr const
2689           , default_domain , const A0 , const A1 , const A2
2690         >::type const
operator ()expr2691         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
2692         {
2693             return result_of::funop3<
2694                 expr const
2695               , default_domain , const A0 , const A1 , const A2
2696             >::call(*this , a0 , a1 , a2);
2697         }
2698 
2699 
2700         template<typename A0 , typename A1 , typename A2 , typename A3>
2701         BOOST_FORCEINLINE
2702         typename result_of::funop4<
2703             expr const
2704           , default_domain , const A0 , const A1 , const A2 , const A3
2705         >::type const
operator ()expr2706         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
2707         {
2708             return result_of::funop4<
2709                 expr const
2710               , default_domain , const A0 , const A1 , const A2 , const A3
2711             >::call(*this , a0 , a1 , a2 , a3);
2712         }
2713 
2714 
2715         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
2716         BOOST_FORCEINLINE
2717         typename result_of::funop5<
2718             expr const
2719           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
2720         >::type const
operator ()expr2721         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
2722         {
2723             return result_of::funop5<
2724                 expr const
2725               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
2726             >::call(*this , a0 , a1 , a2 , a3 , a4);
2727         }
2728 
2729 
2730         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
2731         BOOST_FORCEINLINE
2732         typename result_of::funop6<
2733             expr const
2734           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
2735         >::type const
operator ()expr2736         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
2737         {
2738             return result_of::funop6<
2739                 expr const
2740               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
2741             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
2742         }
2743 
2744 
2745         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
2746         BOOST_FORCEINLINE
2747         typename result_of::funop7<
2748             expr const
2749           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
2750         >::type const
operator ()expr2751         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
2752         {
2753             return result_of::funop7<
2754                 expr const
2755               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
2756             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
2757         }
2758 
2759 
2760         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
2761         BOOST_FORCEINLINE
2762         typename result_of::funop8<
2763             expr const
2764           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
2765         >::type const
operator ()expr2766         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
2767         {
2768             return result_of::funop8<
2769                 expr const
2770               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
2771             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
2772         }
2773 
2774 
2775         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
2776         BOOST_FORCEINLINE
2777         typename result_of::funop9<
2778             expr const
2779           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
2780         >::type const
operator ()expr2781         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
2782         {
2783             return result_of::funop9<
2784                 expr const
2785               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
2786             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
2787         }
2788     };
2789 
2790 
2791 
2792 
2793 
2794 
2795 
2796 
2797 
2798 
2799 
2800 
2801 
2802 
2803 
2804 
2805 
2806 
2807 
2808 
2809 
2810 
2811 
2812 
2813 
2814 
2815 
2816     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7>
2817     struct expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8 >
2818     {
2819         typedef Tag proto_tag;
2820         static const long proto_arity_c = 8;
2821         typedef mpl::long_<8 > proto_arity;
2822         typedef expr proto_base_expr;
2823         typedef list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7> proto_args;
2824         typedef basic_expr<Tag, proto_args, 8 > proto_grammar;
2825         typedef default_domain proto_domain;
2826         typedef default_generator proto_generator;
2827         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
2828         typedef expr proto_derived_expr;
2829         typedef void proto_is_expr_;
2830         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7;
2831         typedef void proto_child8; typedef void proto_child9;
2832 
2833 
2834         BOOST_FORCEINLINE
proto_baseexpr2835         expr const &proto_base() const
2836         {
2837             return *this;
2838         }
2839 
2840 
2841         BOOST_FORCEINLINE
proto_baseexpr2842         expr &proto_base()
2843         {
2844             return *this;
2845         }
2846 
2847 
2848 
2849         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
2850         BOOST_FORCEINLINE
makeexpr2851         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7)
2852         {
2853             expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7};
2854             return that;
2855         }
2856 
2857 
2858         typedef detail::not_a_valid_type address_of_hack_type_;
2859 
2860 
2861 
2862 
2863         BOOST_FORCEINLINE
2864         proto::expr<
2865             proto::tag::assign
2866           , list2<expr &, expr const &>
2867           , 2
2868         > const
operator =expr2869         operator =(expr const &a)
2870         {
2871             proto::expr<
2872                 proto::tag::assign
2873               , list2<expr &, expr const &>
2874               , 2
2875             > that = {*this, a};
2876             return that;
2877         }
2878 
2879 
2880 
2881 
2882         template<typename A>
2883         BOOST_FORCEINLINE
2884         proto::expr<
2885             proto::tag::assign
2886           , list2<expr const &, typename result_of::as_child<A>::type>
2887           , 2
2888         > const
operator =expr2889         operator =(A &a) const
2890         {
2891             proto::expr<
2892                 proto::tag::assign
2893               , list2<expr const &, typename result_of::as_child<A>::type>
2894               , 2
2895             > that = {*this, proto::as_child(a)};
2896             return that;
2897         }
2898 
2899 
2900         template<typename A>
2901         BOOST_FORCEINLINE
2902         proto::expr<
2903             proto::tag::assign
2904           , list2<expr const &, typename result_of::as_child<A const>::type>
2905           , 2
2906         > const
operator =expr2907         operator =(A const &a) const
2908         {
2909             proto::expr<
2910                 proto::tag::assign
2911               , list2<expr const &, typename result_of::as_child<A const>::type>
2912               , 2
2913             > that = {*this, proto::as_child(a)};
2914             return that;
2915         }
2916 
2917 
2918 
2919 
2920         template<typename A>
2921         BOOST_FORCEINLINE
2922         proto::expr<
2923             proto::tag::subscript
2924           , list2<expr const &, typename result_of::as_child<A>::type>
2925           , 2
2926         > const
operator []expr2927         operator [](A &a) const
2928         {
2929             proto::expr<
2930                 proto::tag::subscript
2931               , list2<expr const &, typename result_of::as_child<A>::type>
2932               , 2
2933             > that = {*this, proto::as_child(a)};
2934             return that;
2935         }
2936 
2937 
2938         template<typename A>
2939         BOOST_FORCEINLINE
2940         proto::expr<
2941             proto::tag::subscript
2942           , list2<expr const &, typename result_of::as_child<A const>::type>
2943           , 2
2944         > const
operator []expr2945         operator [](A const &a) const
2946         {
2947             proto::expr<
2948                 proto::tag::subscript
2949               , list2<expr const &, typename result_of::as_child<A const>::type>
2950               , 2
2951             > that = {*this, proto::as_child(a)};
2952             return that;
2953         }
2954 
2955 
2956         template<typename Sig>
2957         struct result
2958         {
2959             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
2960         };
2961 
2962 
2963 
2964         BOOST_FORCEINLINE
2965         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr2966         operator ()() const
2967         {
2968             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
2969             return that;
2970         }
2971 
2972 
2973         template<typename A0>
2974         BOOST_FORCEINLINE
2975         typename result_of::funop1<
2976             expr const
2977           , default_domain , const A0
2978         >::type const
operator ()expr2979         operator ()(A0 const &a0) const
2980         {
2981             return result_of::funop1<
2982                 expr const
2983               , default_domain , const A0
2984             >::call(*this , a0);
2985         }
2986 
2987 
2988         template<typename A0 , typename A1>
2989         BOOST_FORCEINLINE
2990         typename result_of::funop2<
2991             expr const
2992           , default_domain , const A0 , const A1
2993         >::type const
operator ()expr2994         operator ()(A0 const &a0 , A1 const &a1) const
2995         {
2996             return result_of::funop2<
2997                 expr const
2998               , default_domain , const A0 , const A1
2999             >::call(*this , a0 , a1);
3000         }
3001 
3002 
3003         template<typename A0 , typename A1 , typename A2>
3004         BOOST_FORCEINLINE
3005         typename result_of::funop3<
3006             expr const
3007           , default_domain , const A0 , const A1 , const A2
3008         >::type const
operator ()expr3009         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
3010         {
3011             return result_of::funop3<
3012                 expr const
3013               , default_domain , const A0 , const A1 , const A2
3014             >::call(*this , a0 , a1 , a2);
3015         }
3016 
3017 
3018         template<typename A0 , typename A1 , typename A2 , typename A3>
3019         BOOST_FORCEINLINE
3020         typename result_of::funop4<
3021             expr const
3022           , default_domain , const A0 , const A1 , const A2 , const A3
3023         >::type const
operator ()expr3024         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
3025         {
3026             return result_of::funop4<
3027                 expr const
3028               , default_domain , const A0 , const A1 , const A2 , const A3
3029             >::call(*this , a0 , a1 , a2 , a3);
3030         }
3031 
3032 
3033         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
3034         BOOST_FORCEINLINE
3035         typename result_of::funop5<
3036             expr const
3037           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
3038         >::type const
operator ()expr3039         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
3040         {
3041             return result_of::funop5<
3042                 expr const
3043               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
3044             >::call(*this , a0 , a1 , a2 , a3 , a4);
3045         }
3046 
3047 
3048         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
3049         BOOST_FORCEINLINE
3050         typename result_of::funop6<
3051             expr const
3052           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
3053         >::type const
operator ()expr3054         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
3055         {
3056             return result_of::funop6<
3057                 expr const
3058               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
3059             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
3060         }
3061 
3062 
3063         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
3064         BOOST_FORCEINLINE
3065         typename result_of::funop7<
3066             expr const
3067           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
3068         >::type const
operator ()expr3069         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
3070         {
3071             return result_of::funop7<
3072                 expr const
3073               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
3074             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
3075         }
3076 
3077 
3078         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
3079         BOOST_FORCEINLINE
3080         typename result_of::funop8<
3081             expr const
3082           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
3083         >::type const
operator ()expr3084         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
3085         {
3086             return result_of::funop8<
3087                 expr const
3088               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
3089             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
3090         }
3091 
3092 
3093         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
3094         BOOST_FORCEINLINE
3095         typename result_of::funop9<
3096             expr const
3097           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
3098         >::type const
operator ()expr3099         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
3100         {
3101             return result_of::funop9<
3102                 expr const
3103               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
3104             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
3105         }
3106     };
3107 
3108 
3109 
3110 
3111 
3112 
3113 
3114 
3115 
3116 
3117 
3118 
3119 
3120 
3121 
3122 
3123 
3124 
3125 
3126 
3127 
3128 
3129 
3130 
3131 
3132 
3133 
3134     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8>
3135     struct expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9 >
3136     {
3137         typedef Tag proto_tag;
3138         static const long proto_arity_c = 9;
3139         typedef mpl::long_<9 > proto_arity;
3140         typedef expr proto_base_expr;
3141         typedef list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8> proto_args;
3142         typedef basic_expr<Tag, proto_args, 9 > proto_grammar;
3143         typedef default_domain proto_domain;
3144         typedef default_generator proto_generator;
3145         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
3146         typedef expr proto_derived_expr;
3147         typedef void proto_is_expr_;
3148         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8;
3149         typedef void proto_child9;
3150 
3151 
3152         BOOST_FORCEINLINE
proto_baseexpr3153         expr const &proto_base() const
3154         {
3155             return *this;
3156         }
3157 
3158 
3159         BOOST_FORCEINLINE
proto_baseexpr3160         expr &proto_base()
3161         {
3162             return *this;
3163         }
3164 
3165 
3166 
3167         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
3168         BOOST_FORCEINLINE
makeexpr3169         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8)
3170         {
3171             expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8};
3172             return that;
3173         }
3174 
3175 
3176         typedef detail::not_a_valid_type address_of_hack_type_;
3177 
3178 
3179 
3180 
3181         BOOST_FORCEINLINE
3182         proto::expr<
3183             proto::tag::assign
3184           , list2<expr &, expr const &>
3185           , 2
3186         > const
operator =expr3187         operator =(expr const &a)
3188         {
3189             proto::expr<
3190                 proto::tag::assign
3191               , list2<expr &, expr const &>
3192               , 2
3193             > that = {*this, a};
3194             return that;
3195         }
3196 
3197 
3198 
3199 
3200         template<typename A>
3201         BOOST_FORCEINLINE
3202         proto::expr<
3203             proto::tag::assign
3204           , list2<expr const &, typename result_of::as_child<A>::type>
3205           , 2
3206         > const
operator =expr3207         operator =(A &a) const
3208         {
3209             proto::expr<
3210                 proto::tag::assign
3211               , list2<expr const &, typename result_of::as_child<A>::type>
3212               , 2
3213             > that = {*this, proto::as_child(a)};
3214             return that;
3215         }
3216 
3217 
3218         template<typename A>
3219         BOOST_FORCEINLINE
3220         proto::expr<
3221             proto::tag::assign
3222           , list2<expr const &, typename result_of::as_child<A const>::type>
3223           , 2
3224         > const
operator =expr3225         operator =(A const &a) const
3226         {
3227             proto::expr<
3228                 proto::tag::assign
3229               , list2<expr const &, typename result_of::as_child<A const>::type>
3230               , 2
3231             > that = {*this, proto::as_child(a)};
3232             return that;
3233         }
3234 
3235 
3236 
3237 
3238         template<typename A>
3239         BOOST_FORCEINLINE
3240         proto::expr<
3241             proto::tag::subscript
3242           , list2<expr const &, typename result_of::as_child<A>::type>
3243           , 2
3244         > const
operator []expr3245         operator [](A &a) const
3246         {
3247             proto::expr<
3248                 proto::tag::subscript
3249               , list2<expr const &, typename result_of::as_child<A>::type>
3250               , 2
3251             > that = {*this, proto::as_child(a)};
3252             return that;
3253         }
3254 
3255 
3256         template<typename A>
3257         BOOST_FORCEINLINE
3258         proto::expr<
3259             proto::tag::subscript
3260           , list2<expr const &, typename result_of::as_child<A const>::type>
3261           , 2
3262         > const
operator []expr3263         operator [](A const &a) const
3264         {
3265             proto::expr<
3266                 proto::tag::subscript
3267               , list2<expr const &, typename result_of::as_child<A const>::type>
3268               , 2
3269             > that = {*this, proto::as_child(a)};
3270             return that;
3271         }
3272 
3273 
3274         template<typename Sig>
3275         struct result
3276         {
3277             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
3278         };
3279 
3280 
3281 
3282         BOOST_FORCEINLINE
3283         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr3284         operator ()() const
3285         {
3286             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
3287             return that;
3288         }
3289 
3290 
3291         template<typename A0>
3292         BOOST_FORCEINLINE
3293         typename result_of::funop1<
3294             expr const
3295           , default_domain , const A0
3296         >::type const
operator ()expr3297         operator ()(A0 const &a0) const
3298         {
3299             return result_of::funop1<
3300                 expr const
3301               , default_domain , const A0
3302             >::call(*this , a0);
3303         }
3304 
3305 
3306         template<typename A0 , typename A1>
3307         BOOST_FORCEINLINE
3308         typename result_of::funop2<
3309             expr const
3310           , default_domain , const A0 , const A1
3311         >::type const
operator ()expr3312         operator ()(A0 const &a0 , A1 const &a1) const
3313         {
3314             return result_of::funop2<
3315                 expr const
3316               , default_domain , const A0 , const A1
3317             >::call(*this , a0 , a1);
3318         }
3319 
3320 
3321         template<typename A0 , typename A1 , typename A2>
3322         BOOST_FORCEINLINE
3323         typename result_of::funop3<
3324             expr const
3325           , default_domain , const A0 , const A1 , const A2
3326         >::type const
operator ()expr3327         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
3328         {
3329             return result_of::funop3<
3330                 expr const
3331               , default_domain , const A0 , const A1 , const A2
3332             >::call(*this , a0 , a1 , a2);
3333         }
3334 
3335 
3336         template<typename A0 , typename A1 , typename A2 , typename A3>
3337         BOOST_FORCEINLINE
3338         typename result_of::funop4<
3339             expr const
3340           , default_domain , const A0 , const A1 , const A2 , const A3
3341         >::type const
operator ()expr3342         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
3343         {
3344             return result_of::funop4<
3345                 expr const
3346               , default_domain , const A0 , const A1 , const A2 , const A3
3347             >::call(*this , a0 , a1 , a2 , a3);
3348         }
3349 
3350 
3351         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
3352         BOOST_FORCEINLINE
3353         typename result_of::funop5<
3354             expr const
3355           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
3356         >::type const
operator ()expr3357         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
3358         {
3359             return result_of::funop5<
3360                 expr const
3361               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
3362             >::call(*this , a0 , a1 , a2 , a3 , a4);
3363         }
3364 
3365 
3366         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
3367         BOOST_FORCEINLINE
3368         typename result_of::funop6<
3369             expr const
3370           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
3371         >::type const
operator ()expr3372         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
3373         {
3374             return result_of::funop6<
3375                 expr const
3376               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
3377             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
3378         }
3379 
3380 
3381         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
3382         BOOST_FORCEINLINE
3383         typename result_of::funop7<
3384             expr const
3385           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
3386         >::type const
operator ()expr3387         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
3388         {
3389             return result_of::funop7<
3390                 expr const
3391               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
3392             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
3393         }
3394 
3395 
3396         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
3397         BOOST_FORCEINLINE
3398         typename result_of::funop8<
3399             expr const
3400           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
3401         >::type const
operator ()expr3402         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
3403         {
3404             return result_of::funop8<
3405                 expr const
3406               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
3407             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
3408         }
3409 
3410 
3411         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
3412         BOOST_FORCEINLINE
3413         typename result_of::funop9<
3414             expr const
3415           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
3416         >::type const
operator ()expr3417         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
3418         {
3419             return result_of::funop9<
3420                 expr const
3421               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
3422             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
3423         }
3424     };
3425 
3426 
3427 
3428 
3429 
3430 
3431 
3432 
3433 
3434 
3435 
3436 
3437 
3438 
3439 
3440 
3441 
3442 
3443 
3444 
3445 
3446 
3447 
3448 
3449 
3450 
3451 
3452     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9>
3453     struct expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10 >
3454     {
3455         typedef Tag proto_tag;
3456         static const long proto_arity_c = 10;
3457         typedef mpl::long_<10 > proto_arity;
3458         typedef expr proto_base_expr;
3459         typedef list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9> proto_args;
3460         typedef basic_expr<Tag, proto_args, 10 > proto_grammar;
3461         typedef default_domain proto_domain;
3462         typedef default_generator proto_generator;
3463         typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
3464         typedef expr proto_derived_expr;
3465         typedef void proto_is_expr_;
3466         typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9;
3467 
3468 
3469 
3470         BOOST_FORCEINLINE
proto_baseexpr3471         expr const &proto_base() const
3472         {
3473             return *this;
3474         }
3475 
3476 
3477         BOOST_FORCEINLINE
proto_baseexpr3478         expr &proto_base()
3479         {
3480             return *this;
3481         }
3482 
3483 
3484 
3485         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
3486         BOOST_FORCEINLINE
makeexpr3487         static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8 , A9 const &a9)
3488         {
3489             expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9};
3490             return that;
3491         }
3492 
3493 
3494         typedef detail::not_a_valid_type address_of_hack_type_;
3495 
3496 
3497 
3498 
3499         BOOST_FORCEINLINE
3500         proto::expr<
3501             proto::tag::assign
3502           , list2<expr &, expr const &>
3503           , 2
3504         > const
operator =expr3505         operator =(expr const &a)
3506         {
3507             proto::expr<
3508                 proto::tag::assign
3509               , list2<expr &, expr const &>
3510               , 2
3511             > that = {*this, a};
3512             return that;
3513         }
3514 
3515 
3516 
3517 
3518         template<typename A>
3519         BOOST_FORCEINLINE
3520         proto::expr<
3521             proto::tag::assign
3522           , list2<expr const &, typename result_of::as_child<A>::type>
3523           , 2
3524         > const
operator =expr3525         operator =(A &a) const
3526         {
3527             proto::expr<
3528                 proto::tag::assign
3529               , list2<expr const &, typename result_of::as_child<A>::type>
3530               , 2
3531             > that = {*this, proto::as_child(a)};
3532             return that;
3533         }
3534 
3535 
3536         template<typename A>
3537         BOOST_FORCEINLINE
3538         proto::expr<
3539             proto::tag::assign
3540           , list2<expr const &, typename result_of::as_child<A const>::type>
3541           , 2
3542         > const
operator =expr3543         operator =(A const &a) const
3544         {
3545             proto::expr<
3546                 proto::tag::assign
3547               , list2<expr const &, typename result_of::as_child<A const>::type>
3548               , 2
3549             > that = {*this, proto::as_child(a)};
3550             return that;
3551         }
3552 
3553 
3554 
3555 
3556         template<typename A>
3557         BOOST_FORCEINLINE
3558         proto::expr<
3559             proto::tag::subscript
3560           , list2<expr const &, typename result_of::as_child<A>::type>
3561           , 2
3562         > const
operator []expr3563         operator [](A &a) const
3564         {
3565             proto::expr<
3566                 proto::tag::subscript
3567               , list2<expr const &, typename result_of::as_child<A>::type>
3568               , 2
3569             > that = {*this, proto::as_child(a)};
3570             return that;
3571         }
3572 
3573 
3574         template<typename A>
3575         BOOST_FORCEINLINE
3576         proto::expr<
3577             proto::tag::subscript
3578           , list2<expr const &, typename result_of::as_child<A const>::type>
3579           , 2
3580         > const
operator []expr3581         operator [](A const &a) const
3582         {
3583             proto::expr<
3584                 proto::tag::subscript
3585               , list2<expr const &, typename result_of::as_child<A const>::type>
3586               , 2
3587             > that = {*this, proto::as_child(a)};
3588             return that;
3589         }
3590 
3591 
3592         template<typename Sig>
3593         struct result
3594         {
3595             typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
3596         };
3597 
3598 
3599 
3600         BOOST_FORCEINLINE
3601         proto::expr<proto::tag::function, list1<expr const &>, 1> const
operator ()expr3602         operator ()() const
3603         {
3604             proto::expr<proto::tag::function, list1<expr const &>, 1> that = {*this};
3605             return that;
3606         }
3607 
3608 
3609         template<typename A0>
3610         BOOST_FORCEINLINE
3611         typename result_of::funop1<
3612             expr const
3613           , default_domain , const A0
3614         >::type const
operator ()expr3615         operator ()(A0 const &a0) const
3616         {
3617             return result_of::funop1<
3618                 expr const
3619               , default_domain , const A0
3620             >::call(*this , a0);
3621         }
3622 
3623 
3624         template<typename A0 , typename A1>
3625         BOOST_FORCEINLINE
3626         typename result_of::funop2<
3627             expr const
3628           , default_domain , const A0 , const A1
3629         >::type const
operator ()expr3630         operator ()(A0 const &a0 , A1 const &a1) const
3631         {
3632             return result_of::funop2<
3633                 expr const
3634               , default_domain , const A0 , const A1
3635             >::call(*this , a0 , a1);
3636         }
3637 
3638 
3639         template<typename A0 , typename A1 , typename A2>
3640         BOOST_FORCEINLINE
3641         typename result_of::funop3<
3642             expr const
3643           , default_domain , const A0 , const A1 , const A2
3644         >::type const
operator ()expr3645         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2) const
3646         {
3647             return result_of::funop3<
3648                 expr const
3649               , default_domain , const A0 , const A1 , const A2
3650             >::call(*this , a0 , a1 , a2);
3651         }
3652 
3653 
3654         template<typename A0 , typename A1 , typename A2 , typename A3>
3655         BOOST_FORCEINLINE
3656         typename result_of::funop4<
3657             expr const
3658           , default_domain , const A0 , const A1 , const A2 , const A3
3659         >::type const
operator ()expr3660         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3) const
3661         {
3662             return result_of::funop4<
3663                 expr const
3664               , default_domain , const A0 , const A1 , const A2 , const A3
3665             >::call(*this , a0 , a1 , a2 , a3);
3666         }
3667 
3668 
3669         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
3670         BOOST_FORCEINLINE
3671         typename result_of::funop5<
3672             expr const
3673           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
3674         >::type const
operator ()expr3675         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4) const
3676         {
3677             return result_of::funop5<
3678                 expr const
3679               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4
3680             >::call(*this , a0 , a1 , a2 , a3 , a4);
3681         }
3682 
3683 
3684         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
3685         BOOST_FORCEINLINE
3686         typename result_of::funop6<
3687             expr const
3688           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
3689         >::type const
operator ()expr3690         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5) const
3691         {
3692             return result_of::funop6<
3693                 expr const
3694               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5
3695             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5);
3696         }
3697 
3698 
3699         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
3700         BOOST_FORCEINLINE
3701         typename result_of::funop7<
3702             expr const
3703           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
3704         >::type const
operator ()expr3705         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6) const
3706         {
3707             return result_of::funop7<
3708                 expr const
3709               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6
3710             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6);
3711         }
3712 
3713 
3714         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
3715         BOOST_FORCEINLINE
3716         typename result_of::funop8<
3717             expr const
3718           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
3719         >::type const
operator ()expr3720         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7) const
3721         {
3722             return result_of::funop8<
3723                 expr const
3724               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7
3725             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
3726         }
3727 
3728 
3729         template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
3730         BOOST_FORCEINLINE
3731         typename result_of::funop9<
3732             expr const
3733           , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
3734         >::type const
operator ()expr3735         operator ()(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8) const
3736         {
3737             return result_of::funop9<
3738                 expr const
3739               , default_domain , const A0 , const A1 , const A2 , const A3 , const A4 , const A5 , const A6 , const A7 , const A8
3740             >::call(*this , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
3741         }
3742     };
3743