bind_member_function_10.hpp 29 KB

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