bind_function_object_20.hpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  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 F
  8. , typename A0
  9. >
  10. inline
  11. typename detail::expression::function_eval<
  12. F
  13. , A0
  14. >::type const
  15. bind(F f, A0 const& a0)
  16. {
  17. return
  18. detail::expression::function_eval<F, A0>::make(
  19. f
  20. , a0
  21. );
  22. }
  23. template <
  24. typename F
  25. , typename A0 , typename A1
  26. >
  27. inline
  28. typename detail::expression::function_eval<
  29. F
  30. , A0 , A1
  31. >::type const
  32. bind(F f, A0 const& a0 , A1 const& a1)
  33. {
  34. return
  35. detail::expression::function_eval<F, A0 , A1>::make(
  36. f
  37. , a0 , a1
  38. );
  39. }
  40. template <
  41. typename F
  42. , typename A0 , typename A1 , typename A2
  43. >
  44. inline
  45. typename detail::expression::function_eval<
  46. F
  47. , A0 , A1 , A2
  48. >::type const
  49. bind(F f, A0 const& a0 , A1 const& a1 , A2 const& a2)
  50. {
  51. return
  52. detail::expression::function_eval<F, A0 , A1 , A2>::make(
  53. f
  54. , a0 , a1 , a2
  55. );
  56. }
  57. template <
  58. typename F
  59. , typename A0 , typename A1 , typename A2 , typename A3
  60. >
  61. inline
  62. typename detail::expression::function_eval<
  63. F
  64. , A0 , A1 , A2 , A3
  65. >::type const
  66. bind(F f, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3)
  67. {
  68. return
  69. detail::expression::function_eval<F, A0 , A1 , A2 , A3>::make(
  70. f
  71. , a0 , a1 , a2 , a3
  72. );
  73. }
  74. template <
  75. typename F
  76. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
  77. >
  78. inline
  79. typename detail::expression::function_eval<
  80. F
  81. , A0 , A1 , A2 , A3 , A4
  82. >::type const
  83. bind(F f, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4)
  84. {
  85. return
  86. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4>::make(
  87. f
  88. , a0 , a1 , a2 , a3 , a4
  89. );
  90. }
  91. template <
  92. typename F
  93. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
  94. >
  95. inline
  96. typename detail::expression::function_eval<
  97. F
  98. , A0 , A1 , A2 , A3 , A4 , A5
  99. >::type const
  100. bind(F f, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5)
  101. {
  102. return
  103. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5>::make(
  104. f
  105. , a0 , a1 , a2 , a3 , a4 , a5
  106. );
  107. }
  108. template <
  109. typename F
  110. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
  111. >
  112. inline
  113. typename detail::expression::function_eval<
  114. F
  115. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  116. >::type const
  117. bind(F f, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6)
  118. {
  119. return
  120. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6>::make(
  121. f
  122. , a0 , a1 , a2 , a3 , a4 , a5 , a6
  123. );
  124. }
  125. template <
  126. typename F
  127. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
  128. >
  129. inline
  130. typename detail::expression::function_eval<
  131. F
  132. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  133. >::type const
  134. bind(F f, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7)
  135. {
  136. return
  137. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>::make(
  138. f
  139. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
  140. );
  141. }
  142. template <
  143. typename F
  144. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
  145. >
  146. inline
  147. typename detail::expression::function_eval<
  148. F
  149. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  150. >::type const
  151. bind(F f, 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)
  152. {
  153. return
  154. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>::make(
  155. f
  156. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
  157. );
  158. }
  159. template <
  160. typename F
  161. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
  162. >
  163. inline
  164. typename detail::expression::function_eval<
  165. F
  166. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
  167. >::type const
  168. bind(F f, 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)
  169. {
  170. return
  171. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>::make(
  172. f
  173. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9
  174. );
  175. }
  176. template <
  177. typename F
  178. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10
  179. >
  180. inline
  181. typename detail::expression::function_eval<
  182. F
  183. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10
  184. >::type const
  185. bind(F f, 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)
  186. {
  187. return
  188. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10>::make(
  189. f
  190. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10
  191. );
  192. }
  193. template <
  194. typename F
  195. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11
  196. >
  197. inline
  198. typename detail::expression::function_eval<
  199. F
  200. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11
  201. >::type const
  202. bind(F f, 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)
  203. {
  204. return
  205. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11>::make(
  206. f
  207. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11
  208. );
  209. }
  210. template <
  211. typename F
  212. , 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
  213. >
  214. inline
  215. typename detail::expression::function_eval<
  216. F
  217. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12
  218. >::type const
  219. bind(F f, 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)
  220. {
  221. return
  222. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12>::make(
  223. f
  224. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12
  225. );
  226. }
  227. template <
  228. typename F
  229. , 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
  230. >
  231. inline
  232. typename detail::expression::function_eval<
  233. F
  234. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13
  235. >::type const
  236. bind(F f, 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)
  237. {
  238. return
  239. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13>::make(
  240. f
  241. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13
  242. );
  243. }
  244. template <
  245. typename F
  246. , 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
  247. >
  248. inline
  249. typename detail::expression::function_eval<
  250. F
  251. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14
  252. >::type const
  253. bind(F f, 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)
  254. {
  255. return
  256. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14>::make(
  257. f
  258. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14
  259. );
  260. }
  261. template <
  262. typename F
  263. , 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
  264. >
  265. inline
  266. typename detail::expression::function_eval<
  267. F
  268. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15
  269. >::type const
  270. bind(F f, 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)
  271. {
  272. return
  273. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15>::make(
  274. f
  275. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15
  276. );
  277. }
  278. template <
  279. typename F
  280. , 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
  281. >
  282. inline
  283. typename detail::expression::function_eval<
  284. F
  285. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16
  286. >::type const
  287. bind(F f, 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)
  288. {
  289. return
  290. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16>::make(
  291. f
  292. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16
  293. );
  294. }
  295. template <
  296. typename F
  297. , 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
  298. >
  299. inline
  300. typename detail::expression::function_eval<
  301. F
  302. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17
  303. >::type const
  304. bind(F f, 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)
  305. {
  306. return
  307. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17>::make(
  308. f
  309. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17
  310. );
  311. }
  312. template <
  313. typename F
  314. , 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
  315. >
  316. inline
  317. typename detail::expression::function_eval<
  318. F
  319. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18
  320. >::type const
  321. bind(F f, 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)
  322. {
  323. return
  324. detail::expression::function_eval<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18>::make(
  325. f
  326. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18
  327. );
  328. }