5#ifndef SAUCE_INTERNAL_APPLY_VARIADIC_H_
6#define SAUCE_INTERNAL_APPLY_VARIADIC_H_
11template<
typename Parameters,
typename Signature>
14template<
typename Parameters,
typename Signature,
typename Passed>
20template<
typename Parameters,
typename Signature,
typename Passed>
25template<
typename Parameters,
typename Signature>
28template<
typename Parameters,
typename Signature,
typename Passed>
33template<
typename Parameters,
typename Signature>
36template<
typename Parameters,
typename Signature,
typename Passed>
43template<
typename Parameters,
typename Signature,
typename Passed>
48template<
typename Parameters,
typename Constructed_,
typename Allocator_>
50 typedef Constructed_ (Constructor)();
51 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
57 typedef Constructed_ Constructed;
66 template<
typename Passed>
67 Constructed * apply(Passed) {
68 return new(allocator.allocate(1))Constructed();
71 template<
typename Passed>
72 void observe(Passed) {}
75template<
typename Parameters,
typename Constructor,
typename Allocator,
typename Passed>
76typename ApplyConstructor<Parameters, Constructor, Allocator>::Constructed * applyConstructor(Passed passed) {
80template<
typename Parameters,
typename Constructor,
typename Allocator,
typename Passed>
81void observeConstructor(Passed passed) {
82 ApplyConstructor<Parameters, Constructor, Allocator>().observe(passed);
86template<
typename Parameters,
typename Return_>
89 typedef Return_ Return;
90 typedef Return_ (* Signature)();
91 typedef Return_ (* Function)();
104 template<
typename Passed>
105 Return apply(Passed) {
109 template<
typename Passed>
110 void observe(Passed) {
116template<
typename Parameters>
119 typedef void (* Signature)();
120 typedef void (* Function)();
127 function(function) {}
133 template<
typename Passed>
141template<
typename Parameters,
typename Return_,
typename Receiver_>
144 typedef Return_ Return;
145 typedef Receiver_ Receiver;
146 typedef Return_ (Receiver_::* Signature)();
147 typedef Return_ (Receiver_::* Method)();
160 template<
typename Passed>
161 Return apply(Receiver & receiver, Passed) {
162 return (receiver.*method)();
165 template<
typename Passed>
166 void observe(Passed) {
172template<
typename Parameters,
typename Allocator_,
typename Constructed_>
174 typedef Constructed_ (Constructor)();
175 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
181 typedef Constructed_ Constructed;
190 template<
typename Passed>
191 Constructed * apply(Passed) {
192 return new(allocator.allocate(1)) Constructed();
195 template<
typename Passed>
196 void observe(Passed) {
202template<
typename Parameters,
typename Return_,
typename A0>
205 typedef Return_ Return;
206 typedef Return_ (* Signature)(A0);
207 typedef Return_ (* Function)(
208 typename Parameters::template Parameter<A0, 0>::Type);
215 function(function) {}
221 template<
typename Passed>
222 Return apply(Passed passed) {
224 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed));
227 template<
typename Passed>
228 void observe(Passed passed) {
229 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
235template<
typename Parameters,
typename A0>
238 typedef void (* Signature)(A0);
239 typedef void (* Function)(
240 typename Parameters::template Parameter<A0, 0>::Type);
247 function(function) {}
253 template<
typename Passed>
254 void apply(Passed passed) {
256 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed));
262template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0>
265 typedef Return_ Return;
266 typedef Receiver_ Receiver;
267 typedef Return_ (Receiver_::* Signature)(A0);
268 typedef Return_ (Receiver_::* Method)(
269 typename Parameters::template Parameter<A0, 0>::Type);
282 template<
typename Passed>
283 Return apply(Receiver & receiver, Passed passed) {
284 return (receiver.*method)(
285 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed));
288 template<
typename Passed>
289 void observe(Passed passed) {
290 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
296template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0>
298 typedef Constructed_ (Constructor)(A0);
299 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
305 typedef Constructed_ Constructed;
314 template<
typename Passed>
315 Constructed * apply(Passed passed) {
316 return new(allocator.allocate(1)) Constructed(
317 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed));
320 template<
typename Passed>
321 void observe(Passed passed) {
322 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
328template<
typename Parameters,
typename Return_,
typename A0,
typename A1>
331 typedef Return_ Return;
332 typedef Return_ (* Signature)(A0, A1);
333 typedef Return_ (* Function)(
334 typename Parameters::template Parameter<A0, 0>::Type,
335 typename Parameters::template Parameter<A1, 1>::Type);
342 function(function) {}
348 template<
typename Passed>
349 Return apply(Passed passed) {
351 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
352 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed));
355 template<
typename Passed>
356 void observe(Passed passed) {
357 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
358 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
364template<
typename Parameters,
typename A0,
typename A1>
367 typedef void (* Signature)(A0, A1);
368 typedef void (* Function)(
369 typename Parameters::template Parameter<A0, 0>::Type,
370 typename Parameters::template Parameter<A1, 1>::Type);
377 function(function) {}
383 template<
typename Passed>
384 void apply(Passed passed) {
386 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
387 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed));
393template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1>
396 typedef Return_ Return;
397 typedef Receiver_ Receiver;
398 typedef Return_ (Receiver_::* Signature)(A0, A1);
399 typedef Return_ (Receiver_::* Method)(
400 typename Parameters::template Parameter<A0, 0>::Type,
401 typename Parameters::template Parameter<A1, 1>::Type);
414 template<
typename Passed>
415 Return apply(Receiver & receiver, Passed passed) {
416 return (receiver.*method)(
417 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
418 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed));
421 template<
typename Passed>
422 void observe(Passed passed) {
423 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
424 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
430template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1>
432 typedef Constructed_ (Constructor)(A0, A1);
433 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
439 typedef Constructed_ Constructed;
448 template<
typename Passed>
449 Constructed * apply(Passed passed) {
450 return new(allocator.allocate(1)) Constructed(
451 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
452 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed));
455 template<
typename Passed>
456 void observe(Passed passed) {
457 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
458 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
464template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2>
467 typedef Return_ Return;
468 typedef Return_ (* Signature)(A0, A1, A2);
469 typedef Return_ (* Function)(
470 typename Parameters::template Parameter<A0, 0>::Type,
471 typename Parameters::template Parameter<A1, 1>::Type,
472 typename Parameters::template Parameter<A2, 2>::Type);
479 function(function) {}
485 template<
typename Passed>
486 Return apply(Passed passed) {
488 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
489 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
490 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed));
493 template<
typename Passed>
494 void observe(Passed passed) {
495 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
496 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
497 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
503template<
typename Parameters,
typename A0,
typename A1,
typename A2>
506 typedef void (* Signature)(A0, A1, A2);
507 typedef void (* Function)(
508 typename Parameters::template Parameter<A0, 0>::Type,
509 typename Parameters::template Parameter<A1, 1>::Type,
510 typename Parameters::template Parameter<A2, 2>::Type);
517 function(function) {}
523 template<
typename Passed>
524 void apply(Passed passed) {
526 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
527 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
528 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed));
534template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2>
537 typedef Return_ Return;
538 typedef Receiver_ Receiver;
539 typedef Return_ (Receiver_::* Signature)(A0, A1, A2);
540 typedef Return_ (Receiver_::* Method)(
541 typename Parameters::template Parameter<A0, 0>::Type,
542 typename Parameters::template Parameter<A1, 1>::Type,
543 typename Parameters::template Parameter<A2, 2>::Type);
556 template<
typename Passed>
557 Return apply(Receiver & receiver, Passed passed) {
558 return (receiver.*method)(
559 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
560 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
561 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed));
564 template<
typename Passed>
565 void observe(Passed passed) {
566 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
567 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
568 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
574template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2>
576 typedef Constructed_ (Constructor)(A0, A1, A2);
577 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
583 typedef Constructed_ Constructed;
592 template<
typename Passed>
593 Constructed * apply(Passed passed) {
594 return new(allocator.allocate(1)) Constructed(
595 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
596 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
597 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed));
600 template<
typename Passed>
601 void observe(Passed passed) {
602 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
603 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
604 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
610template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3>
613 typedef Return_ Return;
614 typedef Return_ (* Signature)(A0, A1, A2, A3);
615 typedef Return_ (* Function)(
616 typename Parameters::template Parameter<A0, 0>::Type,
617 typename Parameters::template Parameter<A1, 1>::Type,
618 typename Parameters::template Parameter<A2, 2>::Type,
619 typename Parameters::template Parameter<A3, 3>::Type);
626 function(function) {}
632 template<
typename Passed>
633 Return apply(Passed passed) {
635 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
636 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
637 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
638 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed));
641 template<
typename Passed>
642 void observe(Passed passed) {
643 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
644 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
645 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
646 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
652template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3>
655 typedef void (* Signature)(A0, A1, A2, A3);
656 typedef void (* Function)(
657 typename Parameters::template Parameter<A0, 0>::Type,
658 typename Parameters::template Parameter<A1, 1>::Type,
659 typename Parameters::template Parameter<A2, 2>::Type,
660 typename Parameters::template Parameter<A3, 3>::Type);
667 function(function) {}
673 template<
typename Passed>
674 void apply(Passed passed) {
676 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
677 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
678 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
679 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed));
685template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3>
686class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3)> {
688 typedef Return_ Return;
689 typedef Receiver_ Receiver;
690 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3);
691 typedef Return_ (Receiver_::* Method)(
692 typename Parameters::template Parameter<A0, 0>::Type,
693 typename Parameters::template Parameter<A1, 1>::Type,
694 typename Parameters::template Parameter<A2, 2>::Type,
695 typename Parameters::template Parameter<A3, 3>::Type);
708 template<
typename Passed>
709 Return apply(Receiver & receiver, Passed passed) {
710 return (receiver.*method)(
711 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
712 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
713 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
714 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed));
717 template<
typename Passed>
718 void observe(Passed passed) {
719 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
720 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
721 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
722 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
728template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
731 typedef Constructed_ (Constructor)(A0, A1, A2, A3);
732 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
738 typedef Constructed_ Constructed;
747 template<
typename Passed>
748 Constructed * apply(Passed passed) {
749 return new(allocator.allocate(1)) Constructed(
750 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
751 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
752 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
753 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed));
756 template<
typename Passed>
757 void observe(Passed passed) {
758 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
759 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
760 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
761 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
767template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
770 typedef Return_ Return;
771 typedef Return_ (* Signature)(A0, A1, A2, A3, A4);
772 typedef Return_ (* Function)(
773 typename Parameters::template Parameter<A0, 0>::Type,
774 typename Parameters::template Parameter<A1, 1>::Type,
775 typename Parameters::template Parameter<A2, 2>::Type,
776 typename Parameters::template Parameter<A3, 3>::Type,
777 typename Parameters::template Parameter<A4, 4>::Type);
784 function(function) {}
790 template<
typename Passed>
791 Return apply(Passed passed) {
793 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
794 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
795 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
796 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
797 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed));
800 template<
typename Passed>
801 void observe(Passed passed) {
802 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
803 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
804 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
805 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
806 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
812template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
815 typedef void (* Signature)(A0, A1, A2, A3, A4);
816 typedef void (* Function)(
817 typename Parameters::template Parameter<A0, 0>::Type,
818 typename Parameters::template Parameter<A1, 1>::Type,
819 typename Parameters::template Parameter<A2, 2>::Type,
820 typename Parameters::template Parameter<A3, 3>::Type,
821 typename Parameters::template Parameter<A4, 4>::Type);
828 function(function) {}
834 template<
typename Passed>
835 void apply(Passed passed) {
837 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
838 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
839 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
840 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
841 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed));
847template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3,
849class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3, A4)> {
851 typedef Return_ Return;
852 typedef Receiver_ Receiver;
853 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3, A4);
854 typedef Return_ (Receiver_::* Method)(
855 typename Parameters::template Parameter<A0, 0>::Type,
856 typename Parameters::template Parameter<A1, 1>::Type,
857 typename Parameters::template Parameter<A2, 2>::Type,
858 typename Parameters::template Parameter<A3, 3>::Type,
859 typename Parameters::template Parameter<A4, 4>::Type);
872 template<
typename Passed>
873 Return apply(Receiver & receiver, Passed passed) {
874 return (receiver.*method)(
875 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
876 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
877 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
878 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
879 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed));
882 template<
typename Passed>
883 void observe(Passed passed) {
884 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
885 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
886 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
887 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
888 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
894template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
895 typename A3,
typename A4>
897 typedef Constructed_ (Constructor)(A0, A1, A2, A3, A4);
898 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
904 typedef Constructed_ Constructed;
913 template<
typename Passed>
914 Constructed * apply(Passed passed) {
915 return new(allocator.allocate(1)) Constructed(
916 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
917 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
918 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
919 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
920 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed));
923 template<
typename Passed>
924 void observe(Passed passed) {
925 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
926 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
927 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
928 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
929 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
935template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
939 typedef Return_ Return;
940 typedef Return_ (* Signature)(A0, A1, A2, A3, A4, A5);
941 typedef Return_ (* Function)(
942 typename Parameters::template Parameter<A0, 0>::Type,
943 typename Parameters::template Parameter<A1, 1>::Type,
944 typename Parameters::template Parameter<A2, 2>::Type,
945 typename Parameters::template Parameter<A3, 3>::Type,
946 typename Parameters::template Parameter<A4, 4>::Type,
947 typename Parameters::template Parameter<A5, 5>::Type);
954 function(function) {}
960 template<
typename Passed>
961 Return apply(Passed passed) {
963 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
964 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
965 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
966 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
967 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
968 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed));
971 template<
typename Passed>
972 void observe(Passed passed) {
973 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
974 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
975 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
976 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
977 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
978 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
984template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
987 typedef void (* Signature)(A0, A1, A2, A3, A4, A5);
988 typedef void (* Function)(
989 typename Parameters::template Parameter<A0, 0>::Type,
990 typename Parameters::template Parameter<A1, 1>::Type,
991 typename Parameters::template Parameter<A2, 2>::Type,
992 typename Parameters::template Parameter<A3, 3>::Type,
993 typename Parameters::template Parameter<A4, 4>::Type,
994 typename Parameters::template Parameter<A5, 5>::Type);
1001 function(function) {}
1003 static int arity() {
1007 template<
typename Passed>
1008 void apply(Passed passed) {
1010 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1011 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1012 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1013 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1014 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1015 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed));
1021template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3,
1022 typename A4,
typename A5>
1023class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3, A4, A5)> {
1025 typedef Return_ Return;
1026 typedef Receiver_ Receiver;
1027 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3, A4, A5);
1028 typedef Return_ (Receiver_::* Method)(
1029 typename Parameters::template Parameter<A0, 0>::Type,
1030 typename Parameters::template Parameter<A1, 1>::Type,
1031 typename Parameters::template Parameter<A2, 2>::Type,
1032 typename Parameters::template Parameter<A3, 3>::Type,
1033 typename Parameters::template Parameter<A4, 4>::Type,
1034 typename Parameters::template Parameter<A5, 5>::Type);
1043 static int arity() {
1047 template<
typename Passed>
1048 Return apply(Receiver & receiver, Passed passed) {
1049 return (receiver.*method)(
1050 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1051 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1052 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1053 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1054 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1055 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed));
1058 template<
typename Passed>
1059 void observe(Passed passed) {
1060 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1061 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1062 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1063 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1064 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1065 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1071template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
1072 typename A3,
typename A4,
typename A5>
1074 typedef Constructed_ (Constructor)(A0, A1, A2, A3, A4, A5);
1075 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
1077 Allocator allocator;
1081 typedef Constructed_ Constructed;
1086 static int arity() {
1090 template<
typename Passed>
1091 Constructed * apply(Passed passed) {
1092 return new(allocator.allocate(1)) Constructed(
1093 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
1094 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1095 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1096 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1097 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1098 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed));
1101 template<
typename Passed>
1102 void observe(Passed passed) {
1103 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1104 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1105 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1106 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1107 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1108 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1114template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
1115 typename A5,
typename A6>
1118 typedef Return_ Return;
1119 typedef Return_ (* Signature)(A0, A1, A2, A3, A4, A5, A6);
1120 typedef Return_ (* Function)(
1121 typename Parameters::template Parameter<A0, 0>::Type,
1122 typename Parameters::template Parameter<A1, 1>::Type,
1123 typename Parameters::template Parameter<A2, 2>::Type,
1124 typename Parameters::template Parameter<A3, 3>::Type,
1125 typename Parameters::template Parameter<A4, 4>::Type,
1126 typename Parameters::template Parameter<A5, 5>::Type,
1127 typename Parameters::template Parameter<A6, 6>::Type);
1134 function(function) {}
1136 static int arity() {
1140 template<
typename Passed>
1141 Return apply(Passed passed) {
1143 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1144 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1145 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1146 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1147 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1148 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1149 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed));
1152 template<
typename Passed>
1153 void observe(Passed passed) {
1154 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1155 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1156 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1157 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1158 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1159 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1160 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1166template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1169 typedef void (* Signature)(A0, A1, A2, A3, A4, A5, A6);
1170 typedef void (* Function)(
1171 typename Parameters::template Parameter<A0, 0>::Type,
1172 typename Parameters::template Parameter<A1, 1>::Type,
1173 typename Parameters::template Parameter<A2, 2>::Type,
1174 typename Parameters::template Parameter<A3, 3>::Type,
1175 typename Parameters::template Parameter<A4, 4>::Type,
1176 typename Parameters::template Parameter<A5, 5>::Type,
1177 typename Parameters::template Parameter<A6, 6>::Type);
1184 function(function) {}
1186 static int arity() {
1190 template<
typename Passed>
1191 void apply(Passed passed) {
1193 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1194 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1195 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1196 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1197 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1198 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1199 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed));
1205template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3,
1206 typename A4,
typename A5,
typename A6>
1207class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3, A4, A5, A6)> {
1209 typedef Return_ Return;
1210 typedef Receiver_ Receiver;
1211 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3, A4, A5, A6);
1212 typedef Return_ (Receiver_::* Method)(
1213 typename Parameters::template Parameter<A0, 0>::Type,
1214 typename Parameters::template Parameter<A1, 1>::Type,
1215 typename Parameters::template Parameter<A2, 2>::Type,
1216 typename Parameters::template Parameter<A3, 3>::Type,
1217 typename Parameters::template Parameter<A4, 4>::Type,
1218 typename Parameters::template Parameter<A5, 5>::Type,
1219 typename Parameters::template Parameter<A6, 6>::Type);
1228 static int arity() {
1232 template<
typename Passed>
1233 Return apply(Receiver & receiver, Passed passed) {
1234 return (receiver.*method)(
1235 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1236 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1237 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1238 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1239 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1240 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1241 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed));
1244 template<
typename Passed>
1245 void observe(Passed passed) {
1246 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1247 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1248 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1249 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1250 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1251 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1252 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1258template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
1259 typename A3,
typename A4,
typename A5,
typename A6>
1261 typedef Constructed_ (Constructor)(A0, A1, A2, A3, A4, A5, A6);
1262 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
1264 Allocator allocator;
1268 typedef Constructed_ Constructed;
1273 static int arity() {
1277 template<
typename Passed>
1278 Constructed * apply(Passed passed) {
1279 return new(allocator.allocate(1)) Constructed(
1280 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
1281 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1282 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1283 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1284 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1285 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1286 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed));
1289 template<
typename Passed>
1290 void observe(Passed passed) {
1291 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1292 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1293 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1294 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1295 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1296 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1297 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1303template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
1304 typename A5,
typename A6,
typename A7>
1307 typedef Return_ Return;
1308 typedef Return_ (* Signature)(A0, A1, A2, A3, A4, A5, A6, A7);
1309 typedef Return_ (* Function)(
1310 typename Parameters::template Parameter<A0, 0>::Type,
1311 typename Parameters::template Parameter<A1, 1>::Type,
1312 typename Parameters::template Parameter<A2, 2>::Type,
1313 typename Parameters::template Parameter<A3, 3>::Type,
1314 typename Parameters::template Parameter<A4, 4>::Type,
1315 typename Parameters::template Parameter<A5, 5>::Type,
1316 typename Parameters::template Parameter<A6, 6>::Type,
1317 typename Parameters::template Parameter<A7, 7>::Type);
1324 function(function) {}
1326 static int arity() {
1330 template<
typename Passed>
1331 Return apply(Passed passed) {
1333 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1334 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1335 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1336 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1337 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1338 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1339 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1340 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed));
1343 template<
typename Passed>
1344 void observe(Passed passed) {
1345 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1346 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1347 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1348 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1349 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1350 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1351 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1352 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1358template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
1359 typename A6,
typename A7>
1362 typedef void (* Signature)(A0, A1, A2, A3, A4, A5, A6, A7);
1363 typedef void (* Function)(
1364 typename Parameters::template Parameter<A0, 0>::Type,
1365 typename Parameters::template Parameter<A1, 1>::Type,
1366 typename Parameters::template Parameter<A2, 2>::Type,
1367 typename Parameters::template Parameter<A3, 3>::Type,
1368 typename Parameters::template Parameter<A4, 4>::Type,
1369 typename Parameters::template Parameter<A5, 5>::Type,
1370 typename Parameters::template Parameter<A6, 6>::Type,
1371 typename Parameters::template Parameter<A7, 7>::Type);
1378 function(function) {}
1380 static int arity() {
1384 template<
typename Passed>
1385 void apply(Passed passed) {
1387 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1388 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1389 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1390 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1391 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1392 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1393 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1394 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed));
1400template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3,
1401 typename A4,
typename A5,
typename A6,
typename A7>
1402class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3, A4, A5, A6, A7)> {
1404 typedef Return_ Return;
1405 typedef Receiver_ Receiver;
1406 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3, A4, A5, A6, A7);
1407 typedef Return_ (Receiver_::* Method)(
1408 typename Parameters::template Parameter<A0, 0>::Type,
1409 typename Parameters::template Parameter<A1, 1>::Type,
1410 typename Parameters::template Parameter<A2, 2>::Type,
1411 typename Parameters::template Parameter<A3, 3>::Type,
1412 typename Parameters::template Parameter<A4, 4>::Type,
1413 typename Parameters::template Parameter<A5, 5>::Type,
1414 typename Parameters::template Parameter<A6, 6>::Type,
1415 typename Parameters::template Parameter<A7, 7>::Type);
1424 static int arity() {
1428 template<
typename Passed>
1429 Return apply(Receiver & receiver, Passed passed) {
1430 return (receiver.*method)(
1431 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1432 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1433 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1434 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1435 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1436 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1437 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1438 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed));
1441 template<
typename Passed>
1442 void observe(Passed passed) {
1443 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1444 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1445 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1446 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1447 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1448 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1449 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1450 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1456template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
1457 typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1459 typedef Constructed_ (Constructor)(A0, A1, A2, A3, A4, A5, A6, A7);
1460 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
1462 Allocator allocator;
1466 typedef Constructed_ Constructed;
1471 static int arity() {
1475 template<
typename Passed>
1476 Constructed * apply(Passed passed) {
1477 return new(allocator.allocate(1)) Constructed(
1478 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
1479 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1480 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1481 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1482 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1483 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1484 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1485 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed));
1488 template<
typename Passed>
1489 void observe(Passed passed) {
1490 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1491 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1492 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1493 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1494 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1495 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1496 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1497 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1503template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
1504 typename A5,
typename A6,
typename A7,
typename A8>
1505class ApplyFunction<Parameters, Return_(*)(A0, A1, A2, A3, A4, A5, A6, A7, A8)> {
1507 typedef Return_ Return;
1508 typedef Return_ (* Signature)(A0, A1, A2, A3, A4, A5, A6, A7, A8);
1509 typedef Return_ (* Function)(
1510 typename Parameters::template Parameter<A0, 0>::Type,
1511 typename Parameters::template Parameter<A1, 1>::Type,
1512 typename Parameters::template Parameter<A2, 2>::Type,
1513 typename Parameters::template Parameter<A3, 3>::Type,
1514 typename Parameters::template Parameter<A4, 4>::Type,
1515 typename Parameters::template Parameter<A5, 5>::Type,
1516 typename Parameters::template Parameter<A6, 6>::Type,
1517 typename Parameters::template Parameter<A7, 7>::Type,
1518 typename Parameters::template Parameter<A8, 8>::Type);
1525 function(function) {}
1527 static int arity() {
1531 template<
typename Passed>
1532 Return apply(Passed passed) {
1534 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1535 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1536 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1537 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1538 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1539 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1540 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1541 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1542 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed));
1545 template<
typename Passed>
1546 void observe(Passed passed) {
1547 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1548 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1549 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1550 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1551 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1552 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1553 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1554 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1555 (
typename Parameters::template Parameter<A8, 8>()).
template observe<Passed>(passed);
1561template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
1562 typename A6,
typename A7,
typename A8>
1565 typedef void (* Signature)(A0, A1, A2, A3, A4, A5, A6, A7, A8);
1566 typedef void (* Function)(
1567 typename Parameters::template Parameter<A0, 0>::Type,
1568 typename Parameters::template Parameter<A1, 1>::Type,
1569 typename Parameters::template Parameter<A2, 2>::Type,
1570 typename Parameters::template Parameter<A3, 3>::Type,
1571 typename Parameters::template Parameter<A4, 4>::Type,
1572 typename Parameters::template Parameter<A5, 5>::Type,
1573 typename Parameters::template Parameter<A6, 6>::Type,
1574 typename Parameters::template Parameter<A7, 7>::Type,
1575 typename Parameters::template Parameter<A8, 8>::Type);
1582 function(function) {}
1584 static int arity() {
1588 template<
typename Passed>
1589 void apply(Passed passed) {
1591 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1592 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1593 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1594 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1595 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1596 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1597 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1598 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1599 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed));
1605template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3,
1606 typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1607class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3, A4, A5, A6, A7, A8)> {
1609 typedef Return_ Return;
1610 typedef Receiver_ Receiver;
1611 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3, A4, A5, A6, A7, A8);
1612 typedef Return_ (Receiver_::* Method)(
1613 typename Parameters::template Parameter<A0, 0>::Type,
1614 typename Parameters::template Parameter<A1, 1>::Type,
1615 typename Parameters::template Parameter<A2, 2>::Type,
1616 typename Parameters::template Parameter<A3, 3>::Type,
1617 typename Parameters::template Parameter<A4, 4>::Type,
1618 typename Parameters::template Parameter<A5, 5>::Type,
1619 typename Parameters::template Parameter<A6, 6>::Type,
1620 typename Parameters::template Parameter<A7, 7>::Type,
1621 typename Parameters::template Parameter<A8, 8>::Type);
1630 static int arity() {
1634 template<
typename Passed>
1635 Return apply(Receiver & receiver, Passed passed) {
1636 return (receiver.*method)(
1637 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1638 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1639 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1640 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1641 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1642 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1643 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1644 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1645 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed));
1648 template<
typename Passed>
1649 void observe(Passed passed) {
1650 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1651 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1652 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1653 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1654 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1655 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1656 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1657 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1658 (
typename Parameters::template Parameter<A8, 8>()).
template observe<Passed>(passed);
1664template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
1665 typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1666class ApplyConstructor<Parameters, Constructed_(A0, A1, A2, A3, A4, A5, A6, A7, A8), Allocator_> {
1667 typedef Constructed_ (Constructor)(A0, A1, A2, A3, A4, A5, A6, A7, A8);
1668 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
1670 Allocator allocator;
1674 typedef Constructed_ Constructed;
1679 static int arity() {
1683 template<
typename Passed>
1684 Constructed * apply(Passed passed) {
1685 return new(allocator.allocate(1)) Constructed(
1686 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
1687 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1688 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1689 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1690 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1691 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1692 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1693 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1694 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed));
1697 template<
typename Passed>
1698 void observe(Passed passed) {
1699 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1700 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1701 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1702 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1703 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1704 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1705 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1706 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1707 (
typename Parameters::template Parameter<A8, 8>()).
template observe<Passed>(passed);
1713template<
typename Parameters,
typename Return_,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
1714 typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
1715class ApplyFunction<Parameters, Return_(*)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1717 typedef Return_ Return;
1718 typedef Return_ (* Signature)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9);
1719 typedef Return_ (* Function)(
1720 typename Parameters::template Parameter<A0, 0>::Type,
1721 typename Parameters::template Parameter<A1, 1>::Type,
1722 typename Parameters::template Parameter<A2, 2>::Type,
1723 typename Parameters::template Parameter<A3, 3>::Type,
1724 typename Parameters::template Parameter<A4, 4>::Type,
1725 typename Parameters::template Parameter<A5, 5>::Type,
1726 typename Parameters::template Parameter<A6, 6>::Type,
1727 typename Parameters::template Parameter<A7, 7>::Type,
1728 typename Parameters::template Parameter<A8, 8>::Type,
1729 typename Parameters::template Parameter<A9, 9>::Type);
1736 function(function) {}
1738 static int arity() {
1742 template<
typename Passed>
1743 Return apply(Passed passed) {
1745 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1746 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1747 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1748 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1749 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1750 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1751 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1752 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1753 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed),
1754 (
typename Parameters::template Parameter<A9, 9>()).
template yield<Passed>(passed));
1757 template<
typename Passed>
1758 void observe(Passed passed) {
1759 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1760 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1761 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1762 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1763 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1764 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1765 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1766 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1767 (
typename Parameters::template Parameter<A8, 8>()).
template observe<Passed>(passed);
1768 (
typename Parameters::template Parameter<A9, 9>()).
template observe<Passed>(passed);
1774template<
typename Parameters,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
1775 typename A6,
typename A7,
typename A8,
typename A9>
1776class ApplyVoidFunction<Parameters, void(*)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1778 typedef void (* Signature)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9);
1779 typedef void (* Function)(
1780 typename Parameters::template Parameter<A0, 0>::Type,
1781 typename Parameters::template Parameter<A1, 1>::Type,
1782 typename Parameters::template Parameter<A2, 2>::Type,
1783 typename Parameters::template Parameter<A3, 3>::Type,
1784 typename Parameters::template Parameter<A4, 4>::Type,
1785 typename Parameters::template Parameter<A5, 5>::Type,
1786 typename Parameters::template Parameter<A6, 6>::Type,
1787 typename Parameters::template Parameter<A7, 7>::Type,
1788 typename Parameters::template Parameter<A8, 8>::Type,
1789 typename Parameters::template Parameter<A9, 9>::Type);
1796 function(function) {}
1798 static int arity() {
1802 template<
typename Passed>
1803 void apply(Passed passed) {
1805 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1806 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1807 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1808 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1809 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1810 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1811 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1812 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1813 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed),
1814 (
typename Parameters::template Parameter<A9, 9>()).
template yield<Passed>(passed));
1820template<
typename Parameters,
typename Return_,
typename Receiver_,
typename A0,
typename A1,
typename A2,
typename A3,
1821 typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
1822class ApplyMethod<Parameters, Return_(Receiver_::*)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
1824 typedef Return_ Return;
1825 typedef Receiver_ Receiver;
1826 typedef Return_ (Receiver_::* Signature)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9);
1827 typedef Return_ (Receiver_::* Method)(
1828 typename Parameters::template Parameter<A0, 0>::Type,
1829 typename Parameters::template Parameter<A1, 1>::Type,
1830 typename Parameters::template Parameter<A2, 2>::Type,
1831 typename Parameters::template Parameter<A3, 3>::Type,
1832 typename Parameters::template Parameter<A4, 4>::Type,
1833 typename Parameters::template Parameter<A5, 5>::Type,
1834 typename Parameters::template Parameter<A6, 6>::Type,
1835 typename Parameters::template Parameter<A7, 7>::Type,
1836 typename Parameters::template Parameter<A8, 8>::Type,
1837 typename Parameters::template Parameter<A9, 9>::Type);
1846 static int arity() {
1850 template<
typename Passed>
1851 Return apply(Receiver & receiver, Passed passed) {
1852 return (receiver.*method)(
1853 (
typename Parameters::template Parameter<A0, 0>()).
template yield<Passed>(passed),
1854 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1855 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1856 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1857 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1858 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1859 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1860 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1861 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed),
1862 (
typename Parameters::template Parameter<A9, 9>()).
template yield<Passed>(passed));
1865 template<
typename Passed>
1866 void observe(Passed passed) {
1867 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1868 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1869 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1870 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1871 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1872 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1873 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1874 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1875 (
typename Parameters::template Parameter<A8, 8>()).
template observe<Passed>(passed);
1876 (
typename Parameters::template Parameter<A9, 9>()).
template observe<Passed>(passed);
1882template<
typename Parameters,
typename Allocator_,
typename Constructed_,
typename A0,
typename A1,
typename A2,
1883 typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
1884class ApplyConstructor<Parameters, Constructed_(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9), Allocator_> {
1885 typedef Constructed_ (Constructor)(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9);
1886 typedef typename Allocator_::template rebind<Constructed_>::other Allocator;
1888 Allocator allocator;
1892 typedef Constructed_ Constructed;
1897 static int arity() {
1901 template<
typename Passed>
1902 Constructed * apply(Passed passed) {
1903 return new(allocator.allocate(1)) Constructed(
1904 (
typename Parameters::template Parameter<A0, 0>()).template yield<Passed>(passed),
1905 (
typename Parameters::template Parameter<A1, 1>()).
template yield<Passed>(passed),
1906 (
typename Parameters::template Parameter<A2, 2>()).
template yield<Passed>(passed),
1907 (
typename Parameters::template Parameter<A3, 3>()).
template yield<Passed>(passed),
1908 (
typename Parameters::template Parameter<A4, 4>()).
template yield<Passed>(passed),
1909 (
typename Parameters::template Parameter<A5, 5>()).
template yield<Passed>(passed),
1910 (
typename Parameters::template Parameter<A6, 6>()).
template yield<Passed>(passed),
1911 (
typename Parameters::template Parameter<A7, 7>()).
template yield<Passed>(passed),
1912 (
typename Parameters::template Parameter<A8, 8>()).
template yield<Passed>(passed),
1913 (
typename Parameters::template Parameter<A9, 9>()).
template yield<Passed>(passed));
1916 template<
typename Passed>
1917 void observe(Passed passed) {
1918 (
typename Parameters::template Parameter<A0, 0>()).
template observe<Passed>(passed);
1919 (
typename Parameters::template Parameter<A1, 1>()).
template observe<Passed>(passed);
1920 (
typename Parameters::template Parameter<A2, 2>()).
template observe<Passed>(passed);
1921 (
typename Parameters::template Parameter<A3, 3>()).
template observe<Passed>(passed);
1922 (
typename Parameters::template Parameter<A4, 4>()).
template observe<Passed>(passed);
1923 (
typename Parameters::template Parameter<A5, 5>()).
template observe<Passed>(passed);
1924 (
typename Parameters::template Parameter<A6, 6>()).
template observe<Passed>(passed);
1925 (
typename Parameters::template Parameter<A7, 7>()).
template observe<Passed>(passed);
1926 (
typename Parameters::template Parameter<A8, 8>()).
template observe<Passed>(passed);
1927 (
typename Parameters::template Parameter<A9, 9>()).
template observe<Passed>(passed);
1934namespace i = ::sauce::internal;
Definition: apply_variadic.h:49
Definition: apply_variadic.h:12
Definition: apply_variadic.h:34
Definition: apply_variadic.h:26