bind_function_20.hpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  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 T0 , typename T1
  9. , typename A0 , typename A1
  10. >
  11. inline
  12. typename detail::expression::function_eval<
  13. detail::function_ptr<
  14. 2
  15. , RT
  16. , RT(*)(T0 , T1)
  17. >
  18. , A0 , A1
  19. >::type const
  20. bind(
  21. RT(*f)(T0 , T1)
  22. , A0 const& a0 , A1 const& a1
  23. )
  24. {
  25. typedef detail::function_ptr<
  26. 2
  27. , RT
  28. , RT(*)(T0 , T1)
  29. > fp_type;
  30. return
  31. detail::expression::function_eval<
  32. fp_type
  33. , A0 , A1
  34. >::make(
  35. fp_type(f)
  36. , a0 , a1
  37. );
  38. }
  39. template <
  40. typename RT
  41. , typename T0 , typename T1 , typename T2
  42. , typename A0 , typename A1 , typename A2
  43. >
  44. inline
  45. typename detail::expression::function_eval<
  46. detail::function_ptr<
  47. 3
  48. , RT
  49. , RT(*)(T0 , T1 , T2)
  50. >
  51. , A0 , A1 , A2
  52. >::type const
  53. bind(
  54. RT(*f)(T0 , T1 , T2)
  55. , A0 const& a0 , A1 const& a1 , A2 const& a2
  56. )
  57. {
  58. typedef detail::function_ptr<
  59. 3
  60. , RT
  61. , RT(*)(T0 , T1 , T2)
  62. > fp_type;
  63. return
  64. detail::expression::function_eval<
  65. fp_type
  66. , A0 , A1 , A2
  67. >::make(
  68. fp_type(f)
  69. , a0 , a1 , a2
  70. );
  71. }
  72. template <
  73. typename RT
  74. , typename T0 , typename T1 , typename T2 , typename T3
  75. , typename A0 , typename A1 , typename A2 , typename A3
  76. >
  77. inline
  78. typename detail::expression::function_eval<
  79. detail::function_ptr<
  80. 4
  81. , RT
  82. , RT(*)(T0 , T1 , T2 , T3)
  83. >
  84. , A0 , A1 , A2 , A3
  85. >::type const
  86. bind(
  87. RT(*f)(T0 , T1 , T2 , T3)
  88. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
  89. )
  90. {
  91. typedef detail::function_ptr<
  92. 4
  93. , RT
  94. , RT(*)(T0 , T1 , T2 , T3)
  95. > fp_type;
  96. return
  97. detail::expression::function_eval<
  98. fp_type
  99. , A0 , A1 , A2 , A3
  100. >::make(
  101. fp_type(f)
  102. , a0 , a1 , a2 , a3
  103. );
  104. }
  105. template <
  106. typename RT
  107. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
  108. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
  109. >
  110. inline
  111. typename detail::expression::function_eval<
  112. detail::function_ptr<
  113. 5
  114. , RT
  115. , RT(*)(T0 , T1 , T2 , T3 , T4)
  116. >
  117. , A0 , A1 , A2 , A3 , A4
  118. >::type const
  119. bind(
  120. RT(*f)(T0 , T1 , T2 , T3 , T4)
  121. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
  122. )
  123. {
  124. typedef detail::function_ptr<
  125. 5
  126. , RT
  127. , RT(*)(T0 , T1 , T2 , T3 , T4)
  128. > fp_type;
  129. return
  130. detail::expression::function_eval<
  131. fp_type
  132. , A0 , A1 , A2 , A3 , A4
  133. >::make(
  134. fp_type(f)
  135. , a0 , a1 , a2 , a3 , a4
  136. );
  137. }
  138. template <
  139. typename RT
  140. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
  141. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
  142. >
  143. inline
  144. typename detail::expression::function_eval<
  145. detail::function_ptr<
  146. 6
  147. , RT
  148. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5)
  149. >
  150. , A0 , A1 , A2 , A3 , A4 , A5
  151. >::type const
  152. bind(
  153. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5)
  154. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
  155. )
  156. {
  157. typedef detail::function_ptr<
  158. 6
  159. , RT
  160. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5)
  161. > fp_type;
  162. return
  163. detail::expression::function_eval<
  164. fp_type
  165. , A0 , A1 , A2 , A3 , A4 , A5
  166. >::make(
  167. fp_type(f)
  168. , a0 , a1 , a2 , a3 , a4 , a5
  169. );
  170. }
  171. template <
  172. typename RT
  173. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
  174. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
  175. >
  176. inline
  177. typename detail::expression::function_eval<
  178. detail::function_ptr<
  179. 7
  180. , RT
  181. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
  182. >
  183. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  184. >::type const
  185. bind(
  186. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
  187. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
  188. )
  189. {
  190. typedef detail::function_ptr<
  191. 7
  192. , RT
  193. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
  194. > fp_type;
  195. return
  196. detail::expression::function_eval<
  197. fp_type
  198. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  199. >::make(
  200. fp_type(f)
  201. , a0 , a1 , a2 , a3 , a4 , a5 , a6
  202. );
  203. }
  204. template <
  205. typename RT
  206. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
  207. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
  208. >
  209. inline
  210. typename detail::expression::function_eval<
  211. detail::function_ptr<
  212. 8
  213. , RT
  214. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
  215. >
  216. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  217. >::type const
  218. bind(
  219. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
  220. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
  221. )
  222. {
  223. typedef detail::function_ptr<
  224. 8
  225. , RT
  226. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
  227. > fp_type;
  228. return
  229. detail::expression::function_eval<
  230. fp_type
  231. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  232. >::make(
  233. fp_type(f)
  234. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
  235. );
  236. }
  237. template <
  238. typename RT
  239. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
  240. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
  241. >
  242. inline
  243. typename detail::expression::function_eval<
  244. detail::function_ptr<
  245. 9
  246. , RT
  247. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
  248. >
  249. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  250. >::type const
  251. bind(
  252. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
  253. , 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
  254. )
  255. {
  256. typedef detail::function_ptr<
  257. 9
  258. , RT
  259. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
  260. > fp_type;
  261. return
  262. detail::expression::function_eval<
  263. fp_type
  264. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  265. >::make(
  266. fp_type(f)
  267. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
  268. );
  269. }
  270. template <
  271. typename RT
  272. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9
  273. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
  274. >
  275. inline
  276. typename detail::expression::function_eval<
  277. detail::function_ptr<
  278. 10
  279. , RT
  280. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
  281. >
  282. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
  283. >::type const
  284. bind(
  285. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
  286. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9
  287. )
  288. {
  289. typedef detail::function_ptr<
  290. 10
  291. , RT
  292. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)
  293. > fp_type;
  294. return
  295. detail::expression::function_eval<
  296. fp_type
  297. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
  298. >::make(
  299. fp_type(f)
  300. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9
  301. );
  302. }
  303. template <
  304. typename RT
  305. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10
  306. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10
  307. >
  308. inline
  309. typename detail::expression::function_eval<
  310. detail::function_ptr<
  311. 11
  312. , RT
  313. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
  314. >
  315. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
  316. >::type const
  317. bind(
  318. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
  319. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10
  320. )
  321. {
  322. typedef detail::function_ptr<
  323. 11
  324. , RT
  325. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)
  326. > fp_type;
  327. return
  328. detail::expression::function_eval<
  329. fp_type
  330. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
  331. >::make(
  332. fp_type(f)
  333. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10
  334. );
  335. }
  336. template <
  337. typename RT
  338. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11
  339. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11
  340. >
  341. inline
  342. typename detail::expression::function_eval<
  343. detail::function_ptr<
  344. 12
  345. , RT
  346. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
  347. >
  348. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
  349. >::type const
  350. bind(
  351. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
  352. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11
  353. )
  354. {
  355. typedef detail::function_ptr<
  356. 12
  357. , RT
  358. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)
  359. > fp_type;
  360. return
  361. detail::expression::function_eval<
  362. fp_type
  363. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
  364. >::make(
  365. fp_type(f)
  366. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11
  367. );
  368. }
  369. template <
  370. typename RT
  371. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12
  372. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12
  373. >
  374. inline
  375. typename detail::expression::function_eval<
  376. detail::function_ptr<
  377. 13
  378. , RT
  379. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
  380. >
  381. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
  382. >::type const
  383. bind(
  384. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
  385. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12
  386. )
  387. {
  388. typedef detail::function_ptr<
  389. 13
  390. , RT
  391. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)
  392. > fp_type;
  393. return
  394. detail::expression::function_eval<
  395. fp_type
  396. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
  397. >::make(
  398. fp_type(f)
  399. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12
  400. );
  401. }
  402. template <
  403. typename RT
  404. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13
  405. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13
  406. >
  407. inline
  408. typename detail::expression::function_eval<
  409. detail::function_ptr<
  410. 14
  411. , RT
  412. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
  413. >
  414. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
  415. >::type const
  416. bind(
  417. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
  418. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13
  419. )
  420. {
  421. typedef detail::function_ptr<
  422. 14
  423. , RT
  424. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)
  425. > fp_type;
  426. return
  427. detail::expression::function_eval<
  428. fp_type
  429. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
  430. >::make(
  431. fp_type(f)
  432. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13
  433. );
  434. }
  435. template <
  436. typename RT
  437. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14
  438. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14
  439. >
  440. inline
  441. typename detail::expression::function_eval<
  442. detail::function_ptr<
  443. 15
  444. , RT
  445. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
  446. >
  447. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
  448. >::type const
  449. bind(
  450. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
  451. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14
  452. )
  453. {
  454. typedef detail::function_ptr<
  455. 15
  456. , RT
  457. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)
  458. > fp_type;
  459. return
  460. detail::expression::function_eval<
  461. fp_type
  462. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
  463. >::make(
  464. fp_type(f)
  465. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14
  466. );
  467. }
  468. template <
  469. typename RT
  470. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15
  471. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15
  472. >
  473. inline
  474. typename detail::expression::function_eval<
  475. detail::function_ptr<
  476. 16
  477. , RT
  478. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
  479. >
  480. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
  481. >::type const
  482. bind(
  483. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
  484. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15
  485. )
  486. {
  487. typedef detail::function_ptr<
  488. 16
  489. , RT
  490. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)
  491. > fp_type;
  492. return
  493. detail::expression::function_eval<
  494. fp_type
  495. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
  496. >::make(
  497. fp_type(f)
  498. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15
  499. );
  500. }
  501. template <
  502. typename RT
  503. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16
  504. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16
  505. >
  506. inline
  507. typename detail::expression::function_eval<
  508. detail::function_ptr<
  509. 17
  510. , RT
  511. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
  512. >
  513. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
  514. >::type const
  515. bind(
  516. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
  517. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16
  518. )
  519. {
  520. typedef detail::function_ptr<
  521. 17
  522. , RT
  523. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)
  524. > fp_type;
  525. return
  526. detail::expression::function_eval<
  527. fp_type
  528. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
  529. >::make(
  530. fp_type(f)
  531. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16
  532. );
  533. }
  534. template <
  535. typename RT
  536. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17
  537. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17
  538. >
  539. inline
  540. typename detail::expression::function_eval<
  541. detail::function_ptr<
  542. 18
  543. , RT
  544. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
  545. >
  546. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
  547. >::type const
  548. bind(
  549. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
  550. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17
  551. )
  552. {
  553. typedef detail::function_ptr<
  554. 18
  555. , RT
  556. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)
  557. > fp_type;
  558. return
  559. detail::expression::function_eval<
  560. fp_type
  561. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
  562. >::make(
  563. fp_type(f)
  564. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17
  565. );
  566. }
  567. template <
  568. typename RT
  569. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18
  570. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18
  571. >
  572. inline
  573. typename detail::expression::function_eval<
  574. detail::function_ptr<
  575. 19
  576. , RT
  577. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
  578. >
  579. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
  580. >::type const
  581. bind(
  582. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
  583. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18
  584. )
  585. {
  586. typedef detail::function_ptr<
  587. 19
  588. , RT
  589. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)
  590. > fp_type;
  591. return
  592. detail::expression::function_eval<
  593. fp_type
  594. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
  595. >::make(
  596. fp_type(f)
  597. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18
  598. );
  599. }