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