1 /*============================================================================= 2 Copyright (c) 2001-2007 Joel de Guzman 3 4 Distributed under the Boost Software License, Version 1.0. (See accompanying 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 ==============================================================================*/ 7 8 9 10 11 12 13 14 template < 15 typename RT 16 , typename ClassT 17 , typename T0 18 , typename ClassA 19 , typename A0 20 > 21 inline 22 typename detail::expression::function_eval< 23 detail::member_function_ptr< 24 1 25 , RT 26 , RT(ClassT::*)(T0) 27 > 28 , ClassA 29 , A0 30 >::type const bind(RT (ClassT::* f)(T0),ClassA const & obj,A0 const & a0)31 bind( 32 RT(ClassT::*f)(T0) 33 , ClassA const & obj 34 , A0 const& a0 35 ) 36 { 37 typedef detail::member_function_ptr< 38 1 39 , RT 40 , RT(ClassT::*)(T0) 41 > fp_type; 42 return 43 detail::expression::function_eval< 44 fp_type 45 , ClassA 46 , A0 47 >::make( 48 fp_type(f) 49 , obj 50 , a0 51 ); 52 } 53 template < 54 typename RT 55 , typename ClassT 56 , typename T0 57 , typename ClassA 58 , typename A0 59 > 60 inline 61 typename detail::expression::function_eval< 62 detail::member_function_ptr< 63 1 64 , RT 65 , RT(ClassT::*)(T0) const 66 > 67 , ClassA 68 , A0 69 >::type const bind(RT (ClassT::* f)(T0)const,ClassA const & obj,A0 const & a0)70 bind( 71 RT(ClassT::*f)(T0) const 72 , ClassA const & obj 73 , A0 const& a0 74 ) 75 { 76 typedef detail::member_function_ptr< 77 1 78 , RT 79 , RT(ClassT::*)(T0) const 80 > fp_type; 81 return 82 detail::expression::function_eval< 83 fp_type 84 , ClassA 85 , A0 86 >::make( 87 fp_type(f) 88 , obj 89 , a0 90 ); 91 } 92 template < 93 typename RT 94 , typename ClassT 95 , typename T0 96 , typename A0 97 > 98 inline 99 typename detail::expression::function_eval< 100 detail::member_function_ptr< 101 1 102 , RT 103 , RT(ClassT::*)(T0) 104 > 105 , ClassT 106 , A0 107 >::type const bind(RT (ClassT::* f)(T0),ClassT & obj,A0 const & a0)108 bind( 109 RT(ClassT::*f)(T0) 110 , ClassT & obj 111 , A0 const& a0 112 ) 113 { 114 typedef detail::member_function_ptr< 115 1 116 , RT 117 , RT(ClassT::*)(T0) 118 > fp_type; 119 return 120 detail::expression::function_eval< 121 fp_type 122 , ClassT 123 , A0 124 >::make( 125 fp_type(f) 126 , obj 127 , a0 128 ); 129 } 130 131 132 133 134 135 136 137 template < 138 typename RT 139 , typename ClassT 140 , typename T0 , typename T1 141 , typename ClassA 142 , typename A0 , typename A1 143 > 144 inline 145 typename detail::expression::function_eval< 146 detail::member_function_ptr< 147 2 148 , RT 149 , RT(ClassT::*)(T0 , T1) 150 > 151 , ClassA 152 , A0 , A1 153 >::type const bind(RT (ClassT::* f)(T0,T1),ClassA const & obj,A0 const & a0,A1 const & a1)154 bind( 155 RT(ClassT::*f)(T0 , T1) 156 , ClassA const & obj 157 , A0 const& a0 , A1 const& a1 158 ) 159 { 160 typedef detail::member_function_ptr< 161 2 162 , RT 163 , RT(ClassT::*)(T0 , T1) 164 > fp_type; 165 return 166 detail::expression::function_eval< 167 fp_type 168 , ClassA 169 , A0 , A1 170 >::make( 171 fp_type(f) 172 , obj 173 , a0 , a1 174 ); 175 } 176 template < 177 typename RT 178 , typename ClassT 179 , typename T0 , typename T1 180 , typename ClassA 181 , typename A0 , typename A1 182 > 183 inline 184 typename detail::expression::function_eval< 185 detail::member_function_ptr< 186 2 187 , RT 188 , RT(ClassT::*)(T0 , T1) const 189 > 190 , ClassA 191 , A0 , A1 192 >::type const bind(RT (ClassT::* f)(T0,T1)const,ClassA const & obj,A0 const & a0,A1 const & a1)193 bind( 194 RT(ClassT::*f)(T0 , T1) const 195 , ClassA const & obj 196 , A0 const& a0 , A1 const& a1 197 ) 198 { 199 typedef detail::member_function_ptr< 200 2 201 , RT 202 , RT(ClassT::*)(T0 , T1) const 203 > fp_type; 204 return 205 detail::expression::function_eval< 206 fp_type 207 , ClassA 208 , A0 , A1 209 >::make( 210 fp_type(f) 211 , obj 212 , a0 , a1 213 ); 214 } 215 template < 216 typename RT 217 , typename ClassT 218 , typename T0 , typename T1 219 , typename A0 , typename A1 220 > 221 inline 222 typename detail::expression::function_eval< 223 detail::member_function_ptr< 224 2 225 , RT 226 , RT(ClassT::*)(T0 , T1) 227 > 228 , ClassT 229 , A0 , A1 230 >::type const bind(RT (ClassT::* f)(T0,T1),ClassT & obj,A0 const & a0,A1 const & a1)231 bind( 232 RT(ClassT::*f)(T0 , T1) 233 , ClassT & obj 234 , A0 const& a0 , A1 const& a1 235 ) 236 { 237 typedef detail::member_function_ptr< 238 2 239 , RT 240 , RT(ClassT::*)(T0 , T1) 241 > fp_type; 242 return 243 detail::expression::function_eval< 244 fp_type 245 , ClassT 246 , A0 , A1 247 >::make( 248 fp_type(f) 249 , obj 250 , a0 , a1 251 ); 252 } 253 254 255 256 257 258 259 260 template < 261 typename RT 262 , typename ClassT 263 , typename T0 , typename T1 , typename T2 264 , typename ClassA 265 , typename A0 , typename A1 , typename A2 266 > 267 inline 268 typename detail::expression::function_eval< 269 detail::member_function_ptr< 270 3 271 , RT 272 , RT(ClassT::*)(T0 , T1 , T2) 273 > 274 , ClassA 275 , A0 , A1 , A2 276 >::type const bind(RT (ClassT::* f)(T0,T1,T2),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2)277 bind( 278 RT(ClassT::*f)(T0 , T1 , T2) 279 , ClassA const & obj 280 , A0 const& a0 , A1 const& a1 , A2 const& a2 281 ) 282 { 283 typedef detail::member_function_ptr< 284 3 285 , RT 286 , RT(ClassT::*)(T0 , T1 , T2) 287 > fp_type; 288 return 289 detail::expression::function_eval< 290 fp_type 291 , ClassA 292 , A0 , A1 , A2 293 >::make( 294 fp_type(f) 295 , obj 296 , a0 , a1 , a2 297 ); 298 } 299 template < 300 typename RT 301 , typename ClassT 302 , typename T0 , typename T1 , typename T2 303 , typename ClassA 304 , typename A0 , typename A1 , typename A2 305 > 306 inline 307 typename detail::expression::function_eval< 308 detail::member_function_ptr< 309 3 310 , RT 311 , RT(ClassT::*)(T0 , T1 , T2) const 312 > 313 , ClassA 314 , A0 , A1 , A2 315 >::type const bind(RT (ClassT::* f)(T0,T1,T2)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2)316 bind( 317 RT(ClassT::*f)(T0 , T1 , T2) const 318 , ClassA const & obj 319 , A0 const& a0 , A1 const& a1 , A2 const& a2 320 ) 321 { 322 typedef detail::member_function_ptr< 323 3 324 , RT 325 , RT(ClassT::*)(T0 , T1 , T2) const 326 > fp_type; 327 return 328 detail::expression::function_eval< 329 fp_type 330 , ClassA 331 , A0 , A1 , A2 332 >::make( 333 fp_type(f) 334 , obj 335 , a0 , a1 , a2 336 ); 337 } 338 template < 339 typename RT 340 , typename ClassT 341 , typename T0 , typename T1 , typename T2 342 , typename A0 , typename A1 , typename A2 343 > 344 inline 345 typename detail::expression::function_eval< 346 detail::member_function_ptr< 347 3 348 , RT 349 , RT(ClassT::*)(T0 , T1 , T2) 350 > 351 , ClassT 352 , A0 , A1 , A2 353 >::type const bind(RT (ClassT::* f)(T0,T1,T2),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2)354 bind( 355 RT(ClassT::*f)(T0 , T1 , T2) 356 , ClassT & obj 357 , A0 const& a0 , A1 const& a1 , A2 const& a2 358 ) 359 { 360 typedef detail::member_function_ptr< 361 3 362 , RT 363 , RT(ClassT::*)(T0 , T1 , T2) 364 > fp_type; 365 return 366 detail::expression::function_eval< 367 fp_type 368 , ClassT 369 , A0 , A1 , A2 370 >::make( 371 fp_type(f) 372 , obj 373 , a0 , a1 , a2 374 ); 375 } 376 377 378 379 380 381 382 383 template < 384 typename RT 385 , typename ClassT 386 , typename T0 , typename T1 , typename T2 , typename T3 387 , typename ClassA 388 , typename A0 , typename A1 , typename A2 , typename A3 389 > 390 inline 391 typename detail::expression::function_eval< 392 detail::member_function_ptr< 393 4 394 , RT 395 , RT(ClassT::*)(T0 , T1 , T2 , T3) 396 > 397 , ClassA 398 , A0 , A1 , A2 , A3 399 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3)400 bind( 401 RT(ClassT::*f)(T0 , T1 , T2 , T3) 402 , ClassA const & obj 403 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 404 ) 405 { 406 typedef detail::member_function_ptr< 407 4 408 , RT 409 , RT(ClassT::*)(T0 , T1 , T2 , T3) 410 > fp_type; 411 return 412 detail::expression::function_eval< 413 fp_type 414 , ClassA 415 , A0 , A1 , A2 , A3 416 >::make( 417 fp_type(f) 418 , obj 419 , a0 , a1 , a2 , a3 420 ); 421 } 422 template < 423 typename RT 424 , typename ClassT 425 , typename T0 , typename T1 , typename T2 , typename T3 426 , typename ClassA 427 , typename A0 , typename A1 , typename A2 , typename A3 428 > 429 inline 430 typename detail::expression::function_eval< 431 detail::member_function_ptr< 432 4 433 , RT 434 , RT(ClassT::*)(T0 , T1 , T2 , T3) const 435 > 436 , ClassA 437 , A0 , A1 , A2 , A3 438 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3)439 bind( 440 RT(ClassT::*f)(T0 , T1 , T2 , T3) const 441 , ClassA const & obj 442 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 443 ) 444 { 445 typedef detail::member_function_ptr< 446 4 447 , RT 448 , RT(ClassT::*)(T0 , T1 , T2 , T3) const 449 > fp_type; 450 return 451 detail::expression::function_eval< 452 fp_type 453 , ClassA 454 , A0 , A1 , A2 , A3 455 >::make( 456 fp_type(f) 457 , obj 458 , a0 , a1 , a2 , a3 459 ); 460 } 461 template < 462 typename RT 463 , typename ClassT 464 , typename T0 , typename T1 , typename T2 , typename T3 465 , typename A0 , typename A1 , typename A2 , typename A3 466 > 467 inline 468 typename detail::expression::function_eval< 469 detail::member_function_ptr< 470 4 471 , RT 472 , RT(ClassT::*)(T0 , T1 , T2 , T3) 473 > 474 , ClassT 475 , A0 , A1 , A2 , A3 476 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3)477 bind( 478 RT(ClassT::*f)(T0 , T1 , T2 , T3) 479 , ClassT & obj 480 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 481 ) 482 { 483 typedef detail::member_function_ptr< 484 4 485 , RT 486 , RT(ClassT::*)(T0 , T1 , T2 , T3) 487 > fp_type; 488 return 489 detail::expression::function_eval< 490 fp_type 491 , ClassT 492 , A0 , A1 , A2 , A3 493 >::make( 494 fp_type(f) 495 , obj 496 , a0 , a1 , a2 , a3 497 ); 498 } 499 500 501 502 503 504 505 506 template < 507 typename RT 508 , typename ClassT 509 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 510 , typename ClassA 511 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 512 > 513 inline 514 typename detail::expression::function_eval< 515 detail::member_function_ptr< 516 5 517 , RT 518 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) 519 > 520 , ClassA 521 , A0 , A1 , A2 , A3 , A4 522 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4)523 bind( 524 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4) 525 , ClassA const & obj 526 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 527 ) 528 { 529 typedef detail::member_function_ptr< 530 5 531 , RT 532 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) 533 > fp_type; 534 return 535 detail::expression::function_eval< 536 fp_type 537 , ClassA 538 , A0 , A1 , A2 , A3 , A4 539 >::make( 540 fp_type(f) 541 , obj 542 , a0 , a1 , a2 , a3 , a4 543 ); 544 } 545 template < 546 typename RT 547 , typename ClassT 548 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 549 , typename ClassA 550 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 551 > 552 inline 553 typename detail::expression::function_eval< 554 detail::member_function_ptr< 555 5 556 , RT 557 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) const 558 > 559 , ClassA 560 , A0 , A1 , A2 , A3 , A4 561 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4)562 bind( 563 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4) const 564 , ClassA const & obj 565 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 566 ) 567 { 568 typedef detail::member_function_ptr< 569 5 570 , RT 571 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) const 572 > fp_type; 573 return 574 detail::expression::function_eval< 575 fp_type 576 , ClassA 577 , A0 , A1 , A2 , A3 , A4 578 >::make( 579 fp_type(f) 580 , obj 581 , a0 , a1 , a2 , a3 , a4 582 ); 583 } 584 template < 585 typename RT 586 , typename ClassT 587 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 588 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 589 > 590 inline 591 typename detail::expression::function_eval< 592 detail::member_function_ptr< 593 5 594 , RT 595 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) 596 > 597 , ClassT 598 , A0 , A1 , A2 , A3 , A4 599 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4)600 bind( 601 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4) 602 , ClassT & obj 603 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 604 ) 605 { 606 typedef detail::member_function_ptr< 607 5 608 , RT 609 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4) 610 > fp_type; 611 return 612 detail::expression::function_eval< 613 fp_type 614 , ClassT 615 , A0 , A1 , A2 , A3 , A4 616 >::make( 617 fp_type(f) 618 , obj 619 , a0 , a1 , a2 , a3 , a4 620 ); 621 } 622 623 624 625 626 627 628 629 template < 630 typename RT 631 , typename ClassT 632 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 633 , typename ClassA 634 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 635 > 636 inline 637 typename detail::expression::function_eval< 638 detail::member_function_ptr< 639 6 640 , RT 641 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) 642 > 643 , ClassA 644 , A0 , A1 , A2 , A3 , A4 , A5 645 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5)646 bind( 647 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5) 648 , ClassA const & obj 649 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 650 ) 651 { 652 typedef detail::member_function_ptr< 653 6 654 , RT 655 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) 656 > fp_type; 657 return 658 detail::expression::function_eval< 659 fp_type 660 , ClassA 661 , A0 , A1 , A2 , A3 , A4 , A5 662 >::make( 663 fp_type(f) 664 , obj 665 , a0 , a1 , a2 , a3 , a4 , a5 666 ); 667 } 668 template < 669 typename RT 670 , typename ClassT 671 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 672 , typename ClassA 673 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 674 > 675 inline 676 typename detail::expression::function_eval< 677 detail::member_function_ptr< 678 6 679 , RT 680 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) const 681 > 682 , ClassA 683 , A0 , A1 , A2 , A3 , A4 , A5 684 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5)685 bind( 686 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5) const 687 , ClassA const & obj 688 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 689 ) 690 { 691 typedef detail::member_function_ptr< 692 6 693 , RT 694 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) const 695 > fp_type; 696 return 697 detail::expression::function_eval< 698 fp_type 699 , ClassA 700 , A0 , A1 , A2 , A3 , A4 , A5 701 >::make( 702 fp_type(f) 703 , obj 704 , a0 , a1 , a2 , a3 , a4 , a5 705 ); 706 } 707 template < 708 typename RT 709 , typename ClassT 710 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 711 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 712 > 713 inline 714 typename detail::expression::function_eval< 715 detail::member_function_ptr< 716 6 717 , RT 718 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) 719 > 720 , ClassT 721 , A0 , A1 , A2 , A3 , A4 , A5 722 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5)723 bind( 724 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5) 725 , ClassT & obj 726 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 727 ) 728 { 729 typedef detail::member_function_ptr< 730 6 731 , RT 732 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5) 733 > fp_type; 734 return 735 detail::expression::function_eval< 736 fp_type 737 , ClassT 738 , A0 , A1 , A2 , A3 , A4 , A5 739 >::make( 740 fp_type(f) 741 , obj 742 , a0 , a1 , a2 , a3 , a4 , a5 743 ); 744 } 745 746 747 748 749 750 751 752 template < 753 typename RT 754 , typename ClassT 755 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 756 , typename ClassA 757 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 758 > 759 inline 760 typename detail::expression::function_eval< 761 detail::member_function_ptr< 762 7 763 , RT 764 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) 765 > 766 , ClassA 767 , A0 , A1 , A2 , A3 , A4 , A5 , A6 768 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6)769 bind( 770 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6) 771 , ClassA const & obj 772 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 773 ) 774 { 775 typedef detail::member_function_ptr< 776 7 777 , RT 778 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) 779 > fp_type; 780 return 781 detail::expression::function_eval< 782 fp_type 783 , ClassA 784 , A0 , A1 , A2 , A3 , A4 , A5 , A6 785 >::make( 786 fp_type(f) 787 , obj 788 , a0 , a1 , a2 , a3 , a4 , a5 , a6 789 ); 790 } 791 template < 792 typename RT 793 , typename ClassT 794 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 795 , typename ClassA 796 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 797 > 798 inline 799 typename detail::expression::function_eval< 800 detail::member_function_ptr< 801 7 802 , RT 803 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const 804 > 805 , ClassA 806 , A0 , A1 , A2 , A3 , A4 , A5 , A6 807 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6)808 bind( 809 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const 810 , ClassA const & obj 811 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 812 ) 813 { 814 typedef detail::member_function_ptr< 815 7 816 , RT 817 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) const 818 > fp_type; 819 return 820 detail::expression::function_eval< 821 fp_type 822 , ClassA 823 , A0 , A1 , A2 , A3 , A4 , A5 , A6 824 >::make( 825 fp_type(f) 826 , obj 827 , a0 , a1 , a2 , a3 , a4 , a5 , a6 828 ); 829 } 830 template < 831 typename RT 832 , typename ClassT 833 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 834 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 835 > 836 inline 837 typename detail::expression::function_eval< 838 detail::member_function_ptr< 839 7 840 , RT 841 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) 842 > 843 , ClassT 844 , A0 , A1 , A2 , A3 , A4 , A5 , A6 845 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6)846 bind( 847 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6) 848 , ClassT & obj 849 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 850 ) 851 { 852 typedef detail::member_function_ptr< 853 7 854 , RT 855 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6) 856 > fp_type; 857 return 858 detail::expression::function_eval< 859 fp_type 860 , ClassT 861 , A0 , A1 , A2 , A3 , A4 , A5 , A6 862 >::make( 863 fp_type(f) 864 , obj 865 , a0 , a1 , a2 , a3 , a4 , a5 , a6 866 ); 867 } 868 869 870 871 872 873 874 875 template < 876 typename RT 877 , typename ClassT 878 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 879 , typename ClassA 880 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 881 > 882 inline 883 typename detail::expression::function_eval< 884 detail::member_function_ptr< 885 8 886 , RT 887 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) 888 > 889 , ClassA 890 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 891 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7),ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7)892 bind( 893 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) 894 , ClassA const & obj 895 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 896 ) 897 { 898 typedef detail::member_function_ptr< 899 8 900 , RT 901 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) 902 > fp_type; 903 return 904 detail::expression::function_eval< 905 fp_type 906 , ClassA 907 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 908 >::make( 909 fp_type(f) 910 , obj 911 , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 912 ); 913 } 914 template < 915 typename RT 916 , typename ClassT 917 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 918 , typename ClassA 919 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 920 > 921 inline 922 typename detail::expression::function_eval< 923 detail::member_function_ptr< 924 8 925 , RT 926 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const 927 > 928 , ClassA 929 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 930 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7)const,ClassA const & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7)931 bind( 932 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const 933 , ClassA const & obj 934 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 935 ) 936 { 937 typedef detail::member_function_ptr< 938 8 939 , RT 940 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const 941 > fp_type; 942 return 943 detail::expression::function_eval< 944 fp_type 945 , ClassA 946 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 947 >::make( 948 fp_type(f) 949 , obj 950 , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 951 ); 952 } 953 template < 954 typename RT 955 , typename ClassT 956 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 957 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 958 > 959 inline 960 typename detail::expression::function_eval< 961 detail::member_function_ptr< 962 8 963 , RT 964 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) 965 > 966 , ClassT 967 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 968 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7),ClassT & obj,A0 const & a0,A1 const & a1,A2 const & a2,A3 const & a3,A4 const & a4,A5 const & a5,A6 const & a6,A7 const & a7)969 bind( 970 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) 971 , ClassT & obj 972 , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 973 ) 974 { 975 typedef detail::member_function_ptr< 976 8 977 , RT 978 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) 979 > fp_type; 980 return 981 detail::expression::function_eval< 982 fp_type 983 , ClassT 984 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 985 >::make( 986 fp_type(f) 987 , obj 988 , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 989 ); 990 } 991 992 993 994 995 996 997 998 template < 999 typename RT 1000 , typename ClassT 1001 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 1002 , typename ClassA 1003 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 1004 > 1005 inline 1006 typename detail::expression::function_eval< 1007 detail::member_function_ptr< 1008 9 1009 , RT 1010 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) 1011 > 1012 , ClassA 1013 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 1014 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7,T8),ClassA const & obj,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)1015 bind( 1016 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) 1017 , ClassA const & obj 1018 , 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 1019 ) 1020 { 1021 typedef detail::member_function_ptr< 1022 9 1023 , RT 1024 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) 1025 > fp_type; 1026 return 1027 detail::expression::function_eval< 1028 fp_type 1029 , ClassA 1030 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 1031 >::make( 1032 fp_type(f) 1033 , obj 1034 , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 1035 ); 1036 } 1037 template < 1038 typename RT 1039 , typename ClassT 1040 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 1041 , typename ClassA 1042 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 1043 > 1044 inline 1045 typename detail::expression::function_eval< 1046 detail::member_function_ptr< 1047 9 1048 , RT 1049 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const 1050 > 1051 , ClassA 1052 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 1053 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7,T8)const,ClassA const & obj,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)1054 bind( 1055 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const 1056 , ClassA const & obj 1057 , 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 1058 ) 1059 { 1060 typedef detail::member_function_ptr< 1061 9 1062 , RT 1063 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const 1064 > fp_type; 1065 return 1066 detail::expression::function_eval< 1067 fp_type 1068 , ClassA 1069 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 1070 >::make( 1071 fp_type(f) 1072 , obj 1073 , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 1074 ); 1075 } 1076 template < 1077 typename RT 1078 , typename ClassT 1079 , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 1080 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 1081 > 1082 inline 1083 typename detail::expression::function_eval< 1084 detail::member_function_ptr< 1085 9 1086 , RT 1087 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) 1088 > 1089 , ClassT 1090 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 1091 >::type const bind(RT (ClassT::* f)(T0,T1,T2,T3,T4,T5,T6,T7,T8),ClassT & obj,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)1092 bind( 1093 RT(ClassT::*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) 1094 , ClassT & obj 1095 , 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 1096 ) 1097 { 1098 typedef detail::member_function_ptr< 1099 9 1100 , RT 1101 , RT(ClassT::*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) 1102 > fp_type; 1103 return 1104 detail::expression::function_eval< 1105 fp_type 1106 , ClassT 1107 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 1108 >::make( 1109 fp_type(f) 1110 , obj 1111 , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 1112 ); 1113 } 1114