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