File indexing completed on 2025-12-16 10:09:05
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_SPIRIT_CLASSIC_PHOENIX_COMPOSITE_HPP
0009 #define BOOST_SPIRIT_CLASSIC_PHOENIX_COMPOSITE_HPP
0010
0011
0012 #include <boost/spirit/home/classic/phoenix/actor.hpp>
0013
0014
0015 namespace phoenix {
0016
0017 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
0018 #pragma warning(push)
0019 #pragma warning(disable:4512)
0020 #endif
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 template <
0083 typename OperationT
0084 , typename A = nil_t
0085 , typename B = nil_t
0086 , typename C = nil_t
0087
0088 #if PHOENIX_LIMIT > 3
0089 , typename D = nil_t
0090 , typename E = nil_t
0091 , typename F = nil_t
0092
0093 #if PHOENIX_LIMIT > 6
0094 , typename G = nil_t
0095 , typename H = nil_t
0096 , typename I = nil_t
0097
0098 #if PHOENIX_LIMIT > 9
0099 , typename J = nil_t
0100 , typename K = nil_t
0101 , typename L = nil_t
0102
0103 #if PHOENIX_LIMIT > 12
0104 , typename M = nil_t
0105 , typename N = nil_t
0106 , typename O = nil_t
0107
0108 #endif
0109 #endif
0110 #endif
0111 #endif
0112
0113 , typename NU = nil_t
0114 >
0115 struct composite;
0116
0117
0118
0119
0120
0121
0122 template <typename OperationT, typename TupleT>
0123 struct composite0_result {
0124
0125 typedef typename OperationT::result_type type;
0126 };
0127
0128
0129 template <typename OperationT>
0130 struct composite<OperationT,
0131 nil_t, nil_t, nil_t,
0132 #if PHOENIX_LIMIT > 3
0133 nil_t, nil_t, nil_t,
0134 #if PHOENIX_LIMIT > 6
0135 nil_t, nil_t, nil_t,
0136 #if PHOENIX_LIMIT > 9
0137 nil_t, nil_t, nil_t,
0138 #if PHOENIX_LIMIT > 12
0139 nil_t, nil_t, nil_t,
0140 #endif
0141 #endif
0142 #endif
0143 #endif
0144 nil_t
0145 > {
0146
0147 typedef composite<OperationT> self_t;
0148
0149 template <typename TupleT>
0150 struct result {
0151
0152 typedef typename composite0_result<
0153 OperationT, TupleT
0154 >::type type;
0155 };
0156
0157 composite(OperationT const& op_)
0158 : op(op_) {}
0159
0160 template <typename TupleT>
0161 typename OperationT::result_type
0162 eval(TupleT const& ) const
0163 {
0164 return op();
0165 }
0166
0167 mutable OperationT op;
0168 };
0169
0170
0171
0172
0173
0174
0175 template <typename OperationT, typename TupleT,
0176 typename A>
0177 struct composite1_result {
0178
0179 typedef typename OperationT::template result<
0180 typename actor_result<A, TupleT>::plain_type
0181 >::type type;
0182 };
0183
0184
0185 template <typename OperationT,
0186 typename A>
0187 struct composite<OperationT,
0188 A, nil_t, nil_t,
0189 #if PHOENIX_LIMIT > 3
0190 nil_t, nil_t, nil_t,
0191 #if PHOENIX_LIMIT > 6
0192 nil_t, nil_t, nil_t,
0193 #if PHOENIX_LIMIT > 9
0194 nil_t, nil_t, nil_t,
0195 #if PHOENIX_LIMIT > 12
0196 nil_t, nil_t, nil_t,
0197 #endif
0198 #endif
0199 #endif
0200 #endif
0201 nil_t
0202 > {
0203
0204 typedef composite<OperationT, A> self_t;
0205
0206 template <typename TupleT>
0207 struct result {
0208
0209 typedef typename composite1_result<
0210 OperationT, TupleT, A
0211 >::type type;
0212 };
0213
0214 composite(OperationT const& op_,
0215 A const& a_)
0216 : op(op_), a(a_) {}
0217
0218 template <typename TupleT>
0219 typename actor_result<self_t, TupleT>::type
0220 eval(TupleT const& args) const
0221 {
0222 typename actor_result<A, TupleT>::type ra = a.eval(args);
0223 return op(ra);
0224 }
0225
0226 mutable OperationT op;
0227 A a;
0228 };
0229
0230
0231
0232
0233
0234
0235 template <typename OperationT, typename TupleT,
0236 typename A, typename B>
0237 struct composite2_result {
0238
0239 typedef typename OperationT::template result<
0240 typename actor_result<A, TupleT>::plain_type,
0241 typename actor_result<B, TupleT>::plain_type
0242 >::type type;
0243 };
0244
0245
0246 template <typename OperationT,
0247 typename A, typename B>
0248 struct composite<OperationT,
0249 A, B, nil_t,
0250 #if PHOENIX_LIMIT > 3
0251 nil_t, nil_t, nil_t,
0252 #if PHOENIX_LIMIT > 6
0253 nil_t, nil_t, nil_t,
0254 #if PHOENIX_LIMIT > 9
0255 nil_t, nil_t, nil_t,
0256 #if PHOENIX_LIMIT > 12
0257 nil_t, nil_t, nil_t,
0258 #endif
0259 #endif
0260 #endif
0261 #endif
0262 nil_t
0263 > {
0264
0265 typedef composite<OperationT, A, B> self_t;
0266
0267 template <typename TupleT>
0268 struct result {
0269
0270 typedef typename composite2_result<
0271 OperationT, TupleT, A, B
0272 >::type type;
0273 };
0274
0275 composite(OperationT const& op_,
0276 A const& a_, B const& b_)
0277 : op(op_), a(a_), b(b_) {}
0278
0279 template <typename TupleT>
0280 typename actor_result<self_t, TupleT>::type
0281 eval(TupleT const& args) const
0282 {
0283 typename actor_result<A, TupleT>::type ra = a.eval(args);
0284 typename actor_result<B, TupleT>::type rb = b.eval(args);
0285 return op(ra, rb);
0286 }
0287
0288 mutable OperationT op;
0289 A a; B b;
0290 };
0291
0292
0293
0294
0295
0296
0297 template <typename OperationT, typename TupleT,
0298 typename A, typename B, typename C>
0299 struct composite3_result {
0300
0301 typedef typename OperationT::template result<
0302 typename actor_result<A, TupleT>::plain_type,
0303 typename actor_result<B, TupleT>::plain_type,
0304 typename actor_result<C, TupleT>::plain_type
0305 >::type type;
0306 };
0307
0308
0309 template <typename OperationT,
0310 typename A, typename B, typename C>
0311 struct composite<OperationT,
0312 A, B, C,
0313 #if PHOENIX_LIMIT > 3
0314 nil_t, nil_t, nil_t,
0315 #if PHOENIX_LIMIT > 6
0316 nil_t, nil_t, nil_t,
0317 #if PHOENIX_LIMIT > 9
0318 nil_t, nil_t, nil_t,
0319 #if PHOENIX_LIMIT > 12
0320 nil_t, nil_t, nil_t,
0321 #endif
0322 #endif
0323 #endif
0324 #endif
0325 nil_t
0326 > {
0327
0328 typedef composite<OperationT, A, B, C> self_t;
0329
0330 template <typename TupleT>
0331 struct result {
0332
0333 typedef typename composite3_result<
0334 OperationT, TupleT, A, B, C
0335 >::type type;
0336 };
0337
0338 composite(OperationT const& op_,
0339 A const& a_, B const& b_, C const& c_)
0340 : op(op_), a(a_), b(b_), c(c_) {}
0341
0342 template <typename TupleT>
0343 typename actor_result<self_t, TupleT>::type
0344 eval(TupleT const& args) const
0345 {
0346 typename actor_result<A, TupleT>::type ra = a.eval(args);
0347 typename actor_result<B, TupleT>::type rb = b.eval(args);
0348 typename actor_result<C, TupleT>::type rc = c.eval(args);
0349 return op(ra, rb, rc);
0350 }
0351
0352 mutable OperationT op;
0353 A a; B b; C c;
0354 };
0355
0356 #if PHOENIX_LIMIT > 3
0357
0358
0359
0360
0361
0362 template <typename OperationT, typename TupleT,
0363 typename A, typename B, typename C, typename D>
0364 struct composite4_result {
0365
0366 typedef typename OperationT::template result<
0367 typename actor_result<A, TupleT>::plain_type,
0368 typename actor_result<B, TupleT>::plain_type,
0369 typename actor_result<C, TupleT>::plain_type,
0370 typename actor_result<D, TupleT>::plain_type
0371 >::type type;
0372 };
0373
0374
0375 template <typename OperationT,
0376 typename A, typename B, typename C, typename D>
0377 struct composite<OperationT,
0378 A, B, C, D, nil_t, nil_t,
0379 #if PHOENIX_LIMIT > 6
0380 nil_t, nil_t, nil_t,
0381 #if PHOENIX_LIMIT > 9
0382 nil_t, nil_t, nil_t,
0383 #if PHOENIX_LIMIT > 12
0384 nil_t, nil_t, nil_t,
0385 #endif
0386 #endif
0387 #endif
0388 nil_t
0389 > {
0390
0391 typedef composite<OperationT, A, B, C, D> self_t;
0392
0393 template <typename TupleT>
0394 struct result {
0395
0396 typedef typename composite4_result<
0397 OperationT, TupleT, A, B, C, D
0398 >::type type;
0399 };
0400
0401 composite(OperationT const& op_,
0402 A const& a_, B const& b_, C const& c_, D const& d_)
0403 : op(op_), a(a_), b(b_), c(c_), d(d_) {}
0404
0405 template <typename TupleT>
0406 typename actor_result<self_t, TupleT>::type
0407 eval(TupleT const& args) const
0408 {
0409 typename actor_result<A, TupleT>::type ra = a.eval(args);
0410 typename actor_result<B, TupleT>::type rb = b.eval(args);
0411 typename actor_result<C, TupleT>::type rc = c.eval(args);
0412 typename actor_result<D, TupleT>::type rd = d.eval(args);
0413 return op(ra, rb, rc, rd);
0414 }
0415
0416 mutable OperationT op;
0417 A a; B b; C c; D d;
0418 };
0419
0420
0421
0422
0423
0424
0425 template <typename OperationT, typename TupleT,
0426 typename A, typename B, typename C, typename D, typename E>
0427 struct composite5_result {
0428
0429 typedef typename OperationT::template result<
0430 typename actor_result<A, TupleT>::plain_type,
0431 typename actor_result<B, TupleT>::plain_type,
0432 typename actor_result<C, TupleT>::plain_type,
0433 typename actor_result<D, TupleT>::plain_type,
0434 typename actor_result<E, TupleT>::plain_type
0435 >::type type;
0436 };
0437
0438
0439 template <typename OperationT,
0440 typename A, typename B, typename C, typename D, typename E>
0441 struct composite<OperationT,
0442 A, B, C, D, E, nil_t,
0443 #if PHOENIX_LIMIT > 6
0444 nil_t, nil_t, nil_t,
0445 #if PHOENIX_LIMIT > 9
0446 nil_t, nil_t, nil_t,
0447 #if PHOENIX_LIMIT > 12
0448 nil_t, nil_t, nil_t,
0449 #endif
0450 #endif
0451 #endif
0452 nil_t
0453 > {
0454
0455 typedef composite<OperationT, A, B, C, D, E> self_t;
0456
0457 template <typename TupleT>
0458 struct result {
0459
0460 typedef typename composite5_result<
0461 OperationT, TupleT, A, B, C, D, E
0462 >::type type;
0463 };
0464
0465 composite(OperationT const& op_,
0466 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_)
0467 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_) {}
0468
0469 template <typename TupleT>
0470 typename actor_result<self_t, TupleT>::type
0471 eval(TupleT const& args) const
0472 {
0473 typename actor_result<A, TupleT>::type ra = a.eval(args);
0474 typename actor_result<B, TupleT>::type rb = b.eval(args);
0475 typename actor_result<C, TupleT>::type rc = c.eval(args);
0476 typename actor_result<D, TupleT>::type rd = d.eval(args);
0477 typename actor_result<E, TupleT>::type re = e.eval(args);
0478 return op(ra, rb, rc, rd, re);
0479 }
0480
0481 mutable OperationT op;
0482 A a; B b; C c; D d; E e;
0483 };
0484
0485
0486
0487
0488
0489
0490 template <typename OperationT, typename TupleT,
0491 typename A, typename B, typename C, typename D, typename E,
0492 typename F>
0493 struct composite6_result {
0494
0495 typedef typename OperationT::template result<
0496 typename actor_result<A, TupleT>::plain_type,
0497 typename actor_result<B, TupleT>::plain_type,
0498 typename actor_result<C, TupleT>::plain_type,
0499 typename actor_result<D, TupleT>::plain_type,
0500 typename actor_result<E, TupleT>::plain_type,
0501 typename actor_result<F, TupleT>::plain_type
0502 >::type type;
0503 };
0504
0505
0506 template <typename OperationT,
0507 typename A, typename B, typename C, typename D, typename E,
0508 typename F>
0509 struct composite<OperationT,
0510 A, B, C, D, E, F,
0511 #if PHOENIX_LIMIT > 6
0512 nil_t, nil_t, nil_t,
0513 #if PHOENIX_LIMIT > 9
0514 nil_t, nil_t, nil_t,
0515 #if PHOENIX_LIMIT > 12
0516 nil_t, nil_t, nil_t,
0517 #endif
0518 #endif
0519 #endif
0520 nil_t
0521 > {
0522
0523 typedef composite<OperationT, A, B, C, D, E, F> self_t;
0524
0525 template <typename TupleT>
0526 struct result {
0527
0528 typedef typename composite6_result<
0529 OperationT, TupleT, A, B, C, D, E, F
0530 >::type type;
0531 };
0532
0533 composite(OperationT const& op_,
0534 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0535 F const& f_)
0536 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0537 f(f_) {}
0538
0539 template <typename TupleT>
0540 typename actor_result<self_t, TupleT>::type
0541 eval(TupleT const& args) const
0542 {
0543 typename actor_result<A, TupleT>::type ra = a.eval(args);
0544 typename actor_result<B, TupleT>::type rb = b.eval(args);
0545 typename actor_result<C, TupleT>::type rc = c.eval(args);
0546 typename actor_result<D, TupleT>::type rd = d.eval(args);
0547 typename actor_result<E, TupleT>::type re = e.eval(args);
0548 typename actor_result<F, TupleT>::type rf = f.eval(args);
0549 return op(ra, rb, rc, rd, re, rf);
0550 }
0551
0552 mutable OperationT op;
0553 A a; B b; C c; D d; E e; F f;
0554 };
0555
0556 #if PHOENIX_LIMIT > 6
0557
0558
0559
0560
0561
0562 template <typename OperationT, typename TupleT,
0563 typename A, typename B, typename C, typename D, typename E,
0564 typename F, typename G>
0565 struct composite7_result {
0566
0567 typedef typename OperationT::template result<
0568 typename actor_result<A, TupleT>::plain_type,
0569 typename actor_result<B, TupleT>::plain_type,
0570 typename actor_result<C, TupleT>::plain_type,
0571 typename actor_result<D, TupleT>::plain_type,
0572 typename actor_result<E, TupleT>::plain_type,
0573 typename actor_result<F, TupleT>::plain_type,
0574 typename actor_result<G, TupleT>::plain_type
0575 >::type type;
0576 };
0577
0578
0579 template <typename OperationT,
0580 typename A, typename B, typename C, typename D, typename E,
0581 typename F, typename G>
0582 struct composite<OperationT,
0583 A, B, C, D, E, F, G, nil_t, nil_t,
0584 #if PHOENIX_LIMIT > 9
0585 nil_t, nil_t, nil_t,
0586 #if PHOENIX_LIMIT > 12
0587 nil_t, nil_t, nil_t,
0588 #endif
0589 #endif
0590 nil_t
0591 > {
0592
0593 typedef composite<OperationT, A, B, C, D, E, F, G> self_t;
0594
0595 template <typename TupleT>
0596 struct result {
0597
0598 typedef typename composite7_result<
0599 OperationT, TupleT, A, B, C, D, E, F, G
0600 >::type type;
0601 };
0602
0603 composite(OperationT const& op_,
0604 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0605 F const& f_, G const& g_)
0606 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0607 f(f_), g(g_) {}
0608
0609 template <typename TupleT>
0610 typename actor_result<self_t, TupleT>::type
0611 eval(TupleT const& args) const
0612 {
0613 typename actor_result<A, TupleT>::type ra = a.eval(args);
0614 typename actor_result<B, TupleT>::type rb = b.eval(args);
0615 typename actor_result<C, TupleT>::type rc = c.eval(args);
0616 typename actor_result<D, TupleT>::type rd = d.eval(args);
0617 typename actor_result<E, TupleT>::type re = e.eval(args);
0618 typename actor_result<F, TupleT>::type rf = f.eval(args);
0619 typename actor_result<G, TupleT>::type rg = g.eval(args);
0620 return op(ra, rb, rc, rd, re, rf, rg);
0621 }
0622
0623 mutable OperationT op;
0624 A a; B b; C c; D d; E e; F f; G g;
0625 };
0626
0627
0628
0629
0630
0631
0632 template <typename OperationT, typename TupleT,
0633 typename A, typename B, typename C, typename D, typename E,
0634 typename F, typename G, typename H>
0635 struct composite8_result {
0636
0637 typedef typename OperationT::template result<
0638 typename actor_result<A, TupleT>::plain_type,
0639 typename actor_result<B, TupleT>::plain_type,
0640 typename actor_result<C, TupleT>::plain_type,
0641 typename actor_result<D, TupleT>::plain_type,
0642 typename actor_result<E, TupleT>::plain_type,
0643 typename actor_result<F, TupleT>::plain_type,
0644 typename actor_result<G, TupleT>::plain_type,
0645 typename actor_result<H, TupleT>::plain_type
0646 >::type type;
0647 };
0648
0649
0650 template <typename OperationT,
0651 typename A, typename B, typename C, typename D, typename E,
0652 typename F, typename G, typename H>
0653 struct composite<OperationT,
0654 A, B, C, D, E, F, G, H, nil_t,
0655 #if PHOENIX_LIMIT > 9
0656 nil_t, nil_t, nil_t,
0657 #if PHOENIX_LIMIT > 12
0658 nil_t, nil_t, nil_t,
0659 #endif
0660 #endif
0661 nil_t
0662 > {
0663
0664 typedef composite<OperationT, A, B, C, D, E, F, G, H> self_t;
0665
0666 template <typename TupleT>
0667 struct result {
0668
0669 typedef typename composite8_result<
0670 OperationT, TupleT, A, B, C, D, E, F, G, H
0671 >::type type;
0672 };
0673
0674 composite(OperationT const& op_,
0675 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0676 F const& f_, G const& g_, H const& h_)
0677 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0678 f(f_), g(g_), h(h_) {}
0679
0680 template <typename TupleT>
0681 typename actor_result<self_t, TupleT>::type
0682 eval(TupleT const& args) const
0683 {
0684 typename actor_result<A, TupleT>::type ra = a.eval(args);
0685 typename actor_result<B, TupleT>::type rb = b.eval(args);
0686 typename actor_result<C, TupleT>::type rc = c.eval(args);
0687 typename actor_result<D, TupleT>::type rd = d.eval(args);
0688 typename actor_result<E, TupleT>::type re = e.eval(args);
0689 typename actor_result<F, TupleT>::type rf = f.eval(args);
0690 typename actor_result<G, TupleT>::type rg = g.eval(args);
0691 typename actor_result<H, TupleT>::type rh = h.eval(args);
0692 return op(ra, rb, rc, rd, re, rf, rg, rh);
0693 }
0694
0695 mutable OperationT op;
0696 A a; B b; C c; D d; E e; F f; G g; H h;
0697 };
0698
0699
0700
0701
0702
0703
0704 template <typename OperationT, typename TupleT,
0705 typename A, typename B, typename C, typename D, typename E,
0706 typename F, typename G, typename H, typename I>
0707 struct composite9_result {
0708
0709 typedef typename OperationT::template result<
0710 typename actor_result<A, TupleT>::plain_type,
0711 typename actor_result<B, TupleT>::plain_type,
0712 typename actor_result<C, TupleT>::plain_type,
0713 typename actor_result<D, TupleT>::plain_type,
0714 typename actor_result<E, TupleT>::plain_type,
0715 typename actor_result<F, TupleT>::plain_type,
0716 typename actor_result<G, TupleT>::plain_type,
0717 typename actor_result<H, TupleT>::plain_type,
0718 typename actor_result<I, TupleT>::plain_type
0719 >::type type;
0720 };
0721
0722
0723 template <typename OperationT,
0724 typename A, typename B, typename C, typename D, typename E,
0725 typename F, typename G, typename H, typename I>
0726 struct composite<OperationT,
0727 A, B, C, D, E, F, G, H, I,
0728 #if PHOENIX_LIMIT > 9
0729 nil_t, nil_t, nil_t,
0730 #if PHOENIX_LIMIT > 12
0731 nil_t, nil_t, nil_t,
0732 #endif
0733 #endif
0734 nil_t
0735 > {
0736
0737 typedef composite<OperationT, A, B, C, D, E, F, G, H, I> self_t;
0738
0739 template <typename TupleT>
0740 struct result {
0741
0742 typedef typename composite9_result<
0743 OperationT, TupleT, A, B, C, D, E, F, G, H, I
0744 >::type type;
0745 };
0746
0747 composite(OperationT const& op_,
0748 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0749 F const& f_, G const& g_, H const& h_, I const& i_)
0750 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0751 f(f_), g(g_), h(h_), i(i_) {}
0752
0753 template <typename TupleT>
0754 typename actor_result<self_t, TupleT>::type
0755 eval(TupleT const& args) const
0756 {
0757 typename actor_result<A, TupleT>::type ra = a.eval(args);
0758 typename actor_result<B, TupleT>::type rb = b.eval(args);
0759 typename actor_result<C, TupleT>::type rc = c.eval(args);
0760 typename actor_result<D, TupleT>::type rd = d.eval(args);
0761 typename actor_result<E, TupleT>::type re = e.eval(args);
0762 typename actor_result<F, TupleT>::type rf = f.eval(args);
0763 typename actor_result<G, TupleT>::type rg = g.eval(args);
0764 typename actor_result<H, TupleT>::type rh = h.eval(args);
0765 typename actor_result<I, TupleT>::type ri = i.eval(args);
0766 return op(ra, rb, rc, rd, re, rf, rg, rh, ri);
0767 }
0768
0769 mutable OperationT op;
0770 A a; B b; C c; D d; E e; F f; G g; H h; I i;
0771 };
0772
0773 #if PHOENIX_LIMIT > 9
0774
0775
0776
0777
0778
0779 template <typename OperationT, typename TupleT,
0780 typename A, typename B, typename C, typename D, typename E,
0781 typename F, typename G, typename H, typename I, typename J>
0782 struct composite10_result {
0783
0784 typedef typename OperationT::template result<
0785 typename actor_result<A, TupleT>::plain_type,
0786 typename actor_result<B, TupleT>::plain_type,
0787 typename actor_result<C, TupleT>::plain_type,
0788 typename actor_result<D, TupleT>::plain_type,
0789 typename actor_result<E, TupleT>::plain_type,
0790 typename actor_result<F, TupleT>::plain_type,
0791 typename actor_result<G, TupleT>::plain_type,
0792 typename actor_result<H, TupleT>::plain_type,
0793 typename actor_result<I, TupleT>::plain_type,
0794 typename actor_result<J, TupleT>::plain_type
0795 >::type type;
0796 };
0797
0798
0799 template <typename OperationT,
0800 typename A, typename B, typename C, typename D, typename E,
0801 typename F, typename G, typename H, typename I, typename J>
0802 struct composite<OperationT,
0803 A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
0804 #if PHOENIX_LIMIT > 12
0805 nil_t, nil_t, nil_t,
0806 #endif
0807 nil_t
0808 > {
0809
0810 typedef composite<OperationT, A, B, C, D, E, F, G, H, I, J> self_t;
0811
0812 template <typename TupleT>
0813 struct result {
0814
0815 typedef typename composite10_result<
0816 OperationT, TupleT, A, B, C, D, E, F, G, H, I, J
0817 >::type type;
0818 };
0819
0820 composite(OperationT const& op_,
0821 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0822 F const& f_, G const& g_, H const& h_, I const& i_, J const& j_)
0823 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0824 f(f_), g(g_), h(h_), i(i_), j(j_) {}
0825
0826 template <typename TupleT>
0827 typename actor_result<self_t, TupleT>::type
0828 eval(TupleT const& args) const
0829 {
0830 typename actor_result<A, TupleT>::type ra = a.eval(args);
0831 typename actor_result<B, TupleT>::type rb = b.eval(args);
0832 typename actor_result<C, TupleT>::type rc = c.eval(args);
0833 typename actor_result<D, TupleT>::type rd = d.eval(args);
0834 typename actor_result<E, TupleT>::type re = e.eval(args);
0835 typename actor_result<F, TupleT>::type rf = f.eval(args);
0836 typename actor_result<G, TupleT>::type rg = g.eval(args);
0837 typename actor_result<H, TupleT>::type rh = h.eval(args);
0838 typename actor_result<I, TupleT>::type ri = i.eval(args);
0839 typename actor_result<J, TupleT>::type rj = j.eval(args);
0840 return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj);
0841 }
0842
0843 mutable OperationT op;
0844 A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
0845 };
0846
0847
0848
0849
0850
0851
0852 template <typename OperationT, typename TupleT,
0853 typename A, typename B, typename C, typename D, typename E,
0854 typename F, typename G, typename H, typename I, typename J,
0855 typename K>
0856 struct composite11_result {
0857
0858 typedef typename OperationT::template result<
0859 typename actor_result<A, TupleT>::plain_type,
0860 typename actor_result<B, TupleT>::plain_type,
0861 typename actor_result<C, TupleT>::plain_type,
0862 typename actor_result<D, TupleT>::plain_type,
0863 typename actor_result<E, TupleT>::plain_type,
0864 typename actor_result<F, TupleT>::plain_type,
0865 typename actor_result<G, TupleT>::plain_type,
0866 typename actor_result<H, TupleT>::plain_type,
0867 typename actor_result<I, TupleT>::plain_type,
0868 typename actor_result<J, TupleT>::plain_type,
0869 typename actor_result<K, TupleT>::plain_type
0870 >::type type;
0871 };
0872
0873
0874 template <typename OperationT,
0875 typename A, typename B, typename C, typename D, typename E,
0876 typename F, typename G, typename H, typename I, typename J,
0877 typename K>
0878 struct composite<OperationT,
0879 A, B, C, D, E, F, G, H, I, J, K, nil_t,
0880 #if PHOENIX_LIMIT > 12
0881 nil_t, nil_t, nil_t,
0882 #endif
0883 nil_t
0884 > {
0885
0886 typedef composite<OperationT,
0887 A, B, C, D, E, F, G, H, I, J, K> self_t;
0888
0889 template <typename TupleT>
0890 struct result {
0891
0892 typedef typename composite11_result<
0893 OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K
0894 >::type type;
0895 };
0896
0897 composite(OperationT const& op_,
0898 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0899 F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
0900 K const& k_)
0901 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0902 f(f_), g(g_), h(h_), i(i_), j(j_),
0903 k(k_) {}
0904
0905 template <typename TupleT>
0906 typename actor_result<self_t, TupleT>::type
0907 eval(TupleT const& args) const
0908 {
0909 typename actor_result<A, TupleT>::type ra = a.eval(args);
0910 typename actor_result<B, TupleT>::type rb = b.eval(args);
0911 typename actor_result<C, TupleT>::type rc = c.eval(args);
0912 typename actor_result<D, TupleT>::type rd = d.eval(args);
0913 typename actor_result<E, TupleT>::type re = e.eval(args);
0914 typename actor_result<F, TupleT>::type rf = f.eval(args);
0915 typename actor_result<G, TupleT>::type rg = g.eval(args);
0916 typename actor_result<H, TupleT>::type rh = h.eval(args);
0917 typename actor_result<I, TupleT>::type ri = i.eval(args);
0918 typename actor_result<J, TupleT>::type rj = j.eval(args);
0919 typename actor_result<K, TupleT>::type rk = k.eval(args);
0920 return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk);
0921 }
0922
0923 mutable OperationT op;
0924 A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
0925 K k;
0926 };
0927
0928
0929
0930
0931
0932
0933 template <typename OperationT, typename TupleT,
0934 typename A, typename B, typename C, typename D, typename E,
0935 typename F, typename G, typename H, typename I, typename J,
0936 typename K, typename L>
0937 struct composite12_result {
0938
0939 typedef typename OperationT::template result<
0940 typename actor_result<A, TupleT>::plain_type,
0941 typename actor_result<B, TupleT>::plain_type,
0942 typename actor_result<C, TupleT>::plain_type,
0943 typename actor_result<D, TupleT>::plain_type,
0944 typename actor_result<E, TupleT>::plain_type,
0945 typename actor_result<F, TupleT>::plain_type,
0946 typename actor_result<G, TupleT>::plain_type,
0947 typename actor_result<H, TupleT>::plain_type,
0948 typename actor_result<I, TupleT>::plain_type,
0949 typename actor_result<J, TupleT>::plain_type,
0950 typename actor_result<K, TupleT>::plain_type,
0951 typename actor_result<L, TupleT>::plain_type
0952 >::type type;
0953 };
0954
0955
0956 template <typename OperationT,
0957 typename A, typename B, typename C, typename D, typename E,
0958 typename F, typename G, typename H, typename I, typename J,
0959 typename K, typename L>
0960 struct composite<OperationT,
0961 A, B, C, D, E, F, G, H, I, J, K, L,
0962 #if PHOENIX_LIMIT > 12
0963 nil_t, nil_t, nil_t,
0964 #endif
0965 nil_t
0966 > {
0967
0968 typedef composite<OperationT,
0969 A, B, C, D, E, F, G, H, I, J, K, L> self_t;
0970
0971 template <typename TupleT>
0972 struct result {
0973
0974 typedef typename composite12_result<
0975 OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L
0976 >::type type;
0977 };
0978
0979 composite(OperationT const& op_,
0980 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
0981 F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
0982 K const& k_, L const& l_)
0983 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
0984 f(f_), g(g_), h(h_), i(i_), j(j_),
0985 k(k_), l(l_) {}
0986
0987 template <typename TupleT>
0988 typename actor_result<self_t, TupleT>::type
0989 eval(TupleT const& args) const
0990 {
0991 typename actor_result<A, TupleT>::type ra = a.eval(args);
0992 typename actor_result<B, TupleT>::type rb = b.eval(args);
0993 typename actor_result<C, TupleT>::type rc = c.eval(args);
0994 typename actor_result<D, TupleT>::type rd = d.eval(args);
0995 typename actor_result<E, TupleT>::type re = e.eval(args);
0996 typename actor_result<F, TupleT>::type rf = f.eval(args);
0997 typename actor_result<G, TupleT>::type rg = g.eval(args);
0998 typename actor_result<H, TupleT>::type rh = h.eval(args);
0999 typename actor_result<I, TupleT>::type ri = i.eval(args);
1000 typename actor_result<J, TupleT>::type rj = j.eval(args);
1001 typename actor_result<K, TupleT>::type rk = k.eval(args);
1002 typename actor_result<L, TupleT>::type rl = l.eval(args);
1003 return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl);
1004 }
1005
1006 mutable OperationT op;
1007 A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
1008 K k; L l;
1009 };
1010
1011 #if PHOENIX_LIMIT > 12
1012
1013
1014
1015
1016
1017 template <typename OperationT, typename TupleT,
1018 typename A, typename B, typename C, typename D, typename E,
1019 typename F, typename G, typename H, typename I, typename J,
1020 typename K, typename L, typename M>
1021 struct composite13_result {
1022
1023 typedef typename OperationT::template result<
1024 typename actor_result<A, TupleT>::plain_type,
1025 typename actor_result<B, TupleT>::plain_type,
1026 typename actor_result<C, TupleT>::plain_type,
1027 typename actor_result<D, TupleT>::plain_type,
1028 typename actor_result<E, TupleT>::plain_type,
1029 typename actor_result<F, TupleT>::plain_type,
1030 typename actor_result<G, TupleT>::plain_type,
1031 typename actor_result<H, TupleT>::plain_type,
1032 typename actor_result<I, TupleT>::plain_type,
1033 typename actor_result<J, TupleT>::plain_type,
1034 typename actor_result<K, TupleT>::plain_type,
1035 typename actor_result<L, TupleT>::plain_type,
1036 typename actor_result<M, TupleT>::plain_type
1037 >::type type;
1038 };
1039
1040
1041 template <typename OperationT,
1042 typename A, typename B, typename C, typename D, typename E,
1043 typename F, typename G, typename H, typename I, typename J,
1044 typename K, typename L, typename M>
1045 struct composite<OperationT,
1046 A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t
1047 > {
1048
1049 typedef composite<OperationT,
1050 A, B, C, D, E, F, G, H, I, J, K, L, M> self_t;
1051
1052 template <typename TupleT>
1053 struct result {
1054
1055 typedef typename composite13_result<
1056 OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M
1057 >::type type;
1058 };
1059
1060 composite(OperationT const& op_,
1061 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
1062 F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
1063 K const& k_, L const& l_, M const& m_)
1064 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
1065 f(f_), g(g_), h(h_), i(i_), j(j_),
1066 k(k_), l(l_), m(m_) {}
1067
1068 template <typename TupleT>
1069 typename actor_result<self_t, TupleT>::type
1070 eval(TupleT const& args) const
1071 {
1072 typename actor_result<A, TupleT>::type ra = a.eval(args);
1073 typename actor_result<B, TupleT>::type rb = b.eval(args);
1074 typename actor_result<C, TupleT>::type rc = c.eval(args);
1075 typename actor_result<D, TupleT>::type rd = d.eval(args);
1076 typename actor_result<E, TupleT>::type re = e.eval(args);
1077 typename actor_result<F, TupleT>::type rf = f.eval(args);
1078 typename actor_result<G, TupleT>::type rg = g.eval(args);
1079 typename actor_result<H, TupleT>::type rh = h.eval(args);
1080 typename actor_result<I, TupleT>::type ri = i.eval(args);
1081 typename actor_result<J, TupleT>::type rj = j.eval(args);
1082 typename actor_result<K, TupleT>::type rk = k.eval(args);
1083 typename actor_result<L, TupleT>::type rl = l.eval(args);
1084 typename actor_result<M, TupleT>::type rm = m.eval(args);
1085 return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm);
1086 }
1087
1088 mutable OperationT op;
1089 A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
1090 K k; L l; M m;
1091 };
1092
1093
1094
1095
1096
1097
1098 template <typename OperationT, typename TupleT,
1099 typename A, typename B, typename C, typename D, typename E,
1100 typename F, typename G, typename H, typename I, typename J,
1101 typename K, typename L, typename M, typename N>
1102 struct composite14_result {
1103
1104 typedef typename OperationT::template result<
1105 typename actor_result<A, TupleT>::plain_type,
1106 typename actor_result<B, TupleT>::plain_type,
1107 typename actor_result<C, TupleT>::plain_type,
1108 typename actor_result<D, TupleT>::plain_type,
1109 typename actor_result<E, TupleT>::plain_type,
1110 typename actor_result<F, TupleT>::plain_type,
1111 typename actor_result<G, TupleT>::plain_type,
1112 typename actor_result<H, TupleT>::plain_type,
1113 typename actor_result<I, TupleT>::plain_type,
1114 typename actor_result<J, TupleT>::plain_type,
1115 typename actor_result<K, TupleT>::plain_type,
1116 typename actor_result<L, TupleT>::plain_type,
1117 typename actor_result<M, TupleT>::plain_type,
1118 typename actor_result<N, TupleT>::plain_type
1119 >::type type;
1120 };
1121
1122
1123 template <typename OperationT,
1124 typename A, typename B, typename C, typename D, typename E,
1125 typename F, typename G, typename H, typename I, typename J,
1126 typename K, typename L, typename M, typename N>
1127 struct composite<OperationT,
1128 A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t
1129 > {
1130
1131 typedef composite<OperationT,
1132 A, B, C, D, E, F, G, H, I, J, K, L, M, N> self_t;
1133
1134 template <typename TupleT>
1135 struct result {
1136
1137 typedef typename composite14_result<
1138 OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
1139 >::type type;
1140 };
1141
1142 composite(OperationT const& op_,
1143 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
1144 F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
1145 K const& k_, L const& l_, M const& m_, N const& n_)
1146 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
1147 f(f_), g(g_), h(h_), i(i_), j(j_),
1148 k(k_), l(l_), m(m_), n(n_) {}
1149
1150 template <typename TupleT>
1151 typename actor_result<self_t, TupleT>::type
1152 eval(TupleT const& args) const
1153 {
1154 typename actor_result<A, TupleT>::type ra = a.eval(args);
1155 typename actor_result<B, TupleT>::type rb = b.eval(args);
1156 typename actor_result<C, TupleT>::type rc = c.eval(args);
1157 typename actor_result<D, TupleT>::type rd = d.eval(args);
1158 typename actor_result<E, TupleT>::type re = e.eval(args);
1159 typename actor_result<F, TupleT>::type rf = f.eval(args);
1160 typename actor_result<G, TupleT>::type rg = g.eval(args);
1161 typename actor_result<H, TupleT>::type rh = h.eval(args);
1162 typename actor_result<I, TupleT>::type ri = i.eval(args);
1163 typename actor_result<J, TupleT>::type rj = j.eval(args);
1164 typename actor_result<K, TupleT>::type rk = k.eval(args);
1165 typename actor_result<L, TupleT>::type rl = l.eval(args);
1166 typename actor_result<M, TupleT>::type rm = m.eval(args);
1167 typename actor_result<N, TupleT>::type rn = n.eval(args);
1168 return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn);
1169 }
1170
1171 mutable OperationT op;
1172 A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
1173 K k; L l; M m; N n;
1174 };
1175
1176
1177
1178
1179
1180
1181 template <typename OperationT, typename TupleT,
1182 typename A, typename B, typename C, typename D, typename E,
1183 typename F, typename G, typename H, typename I, typename J,
1184 typename K, typename L, typename M, typename N, typename O>
1185 struct composite15_result {
1186
1187 typedef typename OperationT::template result<
1188 typename actor_result<A, TupleT>::plain_type,
1189 typename actor_result<B, TupleT>::plain_type,
1190 typename actor_result<C, TupleT>::plain_type,
1191 typename actor_result<D, TupleT>::plain_type,
1192 typename actor_result<E, TupleT>::plain_type,
1193 typename actor_result<F, TupleT>::plain_type,
1194 typename actor_result<G, TupleT>::plain_type,
1195 typename actor_result<H, TupleT>::plain_type,
1196 typename actor_result<I, TupleT>::plain_type,
1197 typename actor_result<J, TupleT>::plain_type,
1198 typename actor_result<K, TupleT>::plain_type,
1199 typename actor_result<L, TupleT>::plain_type,
1200 typename actor_result<M, TupleT>::plain_type,
1201 typename actor_result<N, TupleT>::plain_type,
1202 typename actor_result<O, TupleT>::plain_type
1203 >::type type;
1204 };
1205
1206
1207 template <typename OperationT,
1208 typename A, typename B, typename C, typename D, typename E,
1209 typename F, typename G, typename H, typename I, typename J,
1210 typename K, typename L, typename M, typename N, typename O>
1211 struct composite<OperationT,
1212 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t
1213 > {
1214
1215 typedef composite<OperationT,
1216 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> self_t;
1217
1218 template <typename TupleT>
1219 struct result {
1220
1221 typedef typename composite15_result<
1222 OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
1223 >::type type;
1224 };
1225
1226 composite(OperationT const& op_,
1227 A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
1228 F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
1229 K const& k_, L const& l_, M const& m_, N const& n_, O const& o_)
1230 : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
1231 f(f_), g(g_), h(h_), i(i_), j(j_),
1232 k(k_), l(l_), m(m_), n(n_), o(o_) {}
1233
1234 template <typename TupleT>
1235 typename actor_result<self_t, TupleT>::type
1236 eval(TupleT const& args) const
1237 {
1238 typename actor_result<A, TupleT>::type ra = a.eval(args);
1239 typename actor_result<B, TupleT>::type rb = b.eval(args);
1240 typename actor_result<C, TupleT>::type rc = c.eval(args);
1241 typename actor_result<D, TupleT>::type rd = d.eval(args);
1242 typename actor_result<E, TupleT>::type re = e.eval(args);
1243 typename actor_result<F, TupleT>::type rf = f.eval(args);
1244 typename actor_result<G, TupleT>::type rg = g.eval(args);
1245 typename actor_result<H, TupleT>::type rh = h.eval(args);
1246 typename actor_result<I, TupleT>::type ri = i.eval(args);
1247 typename actor_result<J, TupleT>::type rj = j.eval(args);
1248 typename actor_result<K, TupleT>::type rk = k.eval(args);
1249 typename actor_result<L, TupleT>::type rl = l.eval(args);
1250 typename actor_result<M, TupleT>::type rm = m.eval(args);
1251 typename actor_result<N, TupleT>::type rn = n.eval(args);
1252 typename actor_result<O, TupleT>::type ro = o.eval(args);
1253 return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn, ro);
1254 }
1255
1256 mutable OperationT op;
1257 A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
1258 K k; L l; M m; N n; O o;
1259 };
1260
1261 #endif
1262 #endif
1263 #endif
1264 #endif
1265
1266 namespace impl {
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276 template <
1277 typename OperationT
1278 , typename A = nil_t
1279 , typename B = nil_t
1280 , typename C = nil_t
1281
1282 #if PHOENIX_LIMIT > 3
1283 , typename D = nil_t
1284 , typename E = nil_t
1285 , typename F = nil_t
1286
1287 #if PHOENIX_LIMIT > 6
1288 , typename G = nil_t
1289 , typename H = nil_t
1290 , typename I = nil_t
1291
1292 #if PHOENIX_LIMIT > 9
1293 , typename J = nil_t
1294 , typename K = nil_t
1295 , typename L = nil_t
1296
1297 #if PHOENIX_LIMIT > 12
1298 , typename M = nil_t
1299 , typename N = nil_t
1300 , typename O = nil_t
1301
1302 #endif
1303 #endif
1304 #endif
1305 #endif
1306 >
1307 struct make_composite {
1308
1309 typedef composite<OperationT
1310 , typename as_actor<A>::type
1311 , typename as_actor<B>::type
1312 , typename as_actor<C>::type
1313
1314 #if PHOENIX_LIMIT > 3
1315 , typename as_actor<D>::type
1316 , typename as_actor<E>::type
1317 , typename as_actor<F>::type
1318
1319 #if PHOENIX_LIMIT > 6
1320 , typename as_actor<G>::type
1321 , typename as_actor<H>::type
1322 , typename as_actor<I>::type
1323
1324 #if PHOENIX_LIMIT > 9
1325 , typename as_actor<J>::type
1326 , typename as_actor<K>::type
1327 , typename as_actor<L>::type
1328
1329 #if PHOENIX_LIMIT > 12
1330 , typename as_actor<M>::type
1331 , typename as_actor<N>::type
1332 , typename as_actor<O>::type
1333
1334 #endif
1335 #endif
1336 #endif
1337 #endif
1338 > composite_type;
1339
1340 typedef actor<composite_type> type;
1341 };
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352 template <typename OperationT, typename BaseT>
1353 struct make_unary {
1354
1355 typedef typename make_composite
1356 <OperationT, actor<BaseT> >::type type;
1357
1358 static type
1359 construct(actor<BaseT> const& _0)
1360 {
1361 typedef typename make_composite
1362 <OperationT, actor<BaseT> >::composite_type
1363 ret_t;
1364
1365 return ret_t(OperationT(), _0);
1366 }
1367 };
1368
1369
1370 template <typename OperationT, typename BaseT, typename B>
1371 struct make_binary1 {
1372
1373 typedef typename make_composite
1374 <OperationT, actor<BaseT>, B>::type type;
1375
1376 static type
1377 construct(actor<BaseT> const& _0_, B const& _1_)
1378 {
1379 typedef typename make_composite
1380 <OperationT, actor<BaseT>, B>::composite_type
1381 ret_t;
1382
1383 return ret_t(OperationT(), _0_, as_actor<B>::convert(_1_));
1384 }
1385 };
1386
1387
1388 template <typename OperationT, typename A, typename BaseT>
1389 struct make_binary2 {
1390
1391 typedef typename make_composite
1392 <OperationT, A, actor<BaseT> >::type type;
1393
1394 static type
1395 construct(A const& _0_, actor<BaseT> const& _1_)
1396 {
1397 typedef typename make_composite
1398 <OperationT, A, actor<BaseT> >::composite_type
1399 ret_t;
1400
1401 return ret_t(OperationT(), as_actor<A>::convert(_0_), _1_);
1402 }
1403 };
1404
1405
1406 template <typename OperationT, typename BaseA, typename BaseB>
1407 struct make_binary3 {
1408
1409 typedef typename make_composite
1410 <OperationT, actor<BaseA>, actor<BaseB> >::type type;
1411
1412 static type
1413 construct(actor<BaseA> const& _0_, actor<BaseB> const& _1_)
1414 {
1415 typedef typename make_composite
1416 <OperationT, actor<BaseA>, actor<BaseB> >::composite_type
1417 ret_t;
1418
1419 return ret_t(OperationT(), _0_, _1_);
1420 }
1421 };
1422
1423 }
1424
1425 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
1426 #pragma warning(pop)
1427 #endif
1428
1429 }
1430
1431 #endif