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