1 /*============================================================================== 2 Copyright (c) 2005-2010 Joel de Guzman 3 Copyright (c) 2010 Thomas Heller 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 9 10 11 12 13 14 15 template <typename F, typename A0> 16 struct function<F, A0> 17 : proto::result_of::make_expr< 18 proto::tag::function 19 , phoenix_domain 20 , F 21 , A0 22 > 23 {}; 24 25 26 27 28 29 30 31 template <typename F, typename A0 , typename A1> 32 struct function<F, A0 , A1> 33 : proto::result_of::make_expr< 34 proto::tag::function 35 , phoenix_domain 36 , F 37 , A0 , A1 38 > 39 {}; 40 41 42 43 44 45 46 47 template <typename F, typename A0 , typename A1 , typename A2> 48 struct function<F, A0 , A1 , A2> 49 : proto::result_of::make_expr< 50 proto::tag::function 51 , phoenix_domain 52 , F 53 , A0 , A1 , A2 54 > 55 {}; 56 57 58 59 60 61 62 63 template <typename F, typename A0 , typename A1 , typename A2 , typename A3> 64 struct function<F, A0 , A1 , A2 , A3> 65 : proto::result_of::make_expr< 66 proto::tag::function 67 , phoenix_domain 68 , F 69 , A0 , A1 , A2 , A3 70 > 71 {}; 72 73 74 75 76 77 78 79 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4> 80 struct function<F, A0 , A1 , A2 , A3 , A4> 81 : proto::result_of::make_expr< 82 proto::tag::function 83 , phoenix_domain 84 , F 85 , A0 , A1 , A2 , A3 , A4 86 > 87 {}; 88 89 90 91 92 93 94 95 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> 96 struct function<F, A0 , A1 , A2 , A3 , A4 , A5> 97 : proto::result_of::make_expr< 98 proto::tag::function 99 , phoenix_domain 100 , F 101 , A0 , A1 , A2 , A3 , A4 , A5 102 > 103 {}; 104 105 106 107 108 109 110 111 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> 112 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6> 113 : proto::result_of::make_expr< 114 proto::tag::function 115 , phoenix_domain 116 , F 117 , A0 , A1 , A2 , A3 , A4 , A5 , A6 118 > 119 {}; 120 121 122 123 124 125 126 127 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> 128 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> 129 : proto::result_of::make_expr< 130 proto::tag::function 131 , phoenix_domain 132 , F 133 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 134 > 135 {}; 136 137 138 139 140 141 142 143 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> 144 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> 145 : proto::result_of::make_expr< 146 proto::tag::function 147 , phoenix_domain 148 , F 149 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 150 > 151 {}; 152 153 154 155 156 157 158 159 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9> 160 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> 161 : proto::result_of::make_expr< 162 proto::tag::function 163 , phoenix_domain 164 , F 165 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 166 > 167 {}; 168 169 170 171 172 173 174 175 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10> 176 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> 177 : proto::result_of::make_expr< 178 proto::tag::function 179 , phoenix_domain 180 , F 181 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 182 > 183 {}; 184 185 186 187 188 189 190 191 template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11> 192 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> 193 : proto::result_of::make_expr< 194 proto::tag::function 195 , phoenix_domain 196 , F 197 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 198 > 199 {}; 200 201 202 203 204 205 206 207 template <typename F, 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> 208 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> 209 : proto::result_of::make_expr< 210 proto::tag::function 211 , phoenix_domain 212 , F 213 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 214 > 215 {}; 216 217 218 219 220 221 222 223 template <typename F, 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> 224 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> 225 : proto::result_of::make_expr< 226 proto::tag::function 227 , phoenix_domain 228 , F 229 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 230 > 231 {}; 232 233 234 235 236 237 238 239 template <typename F, 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> 240 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> 241 : proto::result_of::make_expr< 242 proto::tag::function 243 , phoenix_domain 244 , F 245 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 246 > 247 {}; 248 249 250 251 252 253 254 255 template <typename F, 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> 256 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> 257 : proto::result_of::make_expr< 258 proto::tag::function 259 , phoenix_domain 260 , F 261 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 262 > 263 {}; 264 265 266 267 268 269 270 271 template <typename F, 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> 272 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> 273 : proto::result_of::make_expr< 274 proto::tag::function 275 , phoenix_domain 276 , F 277 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 278 > 279 {}; 280 281 282 283 284 285 286 287 template <typename F, 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> 288 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> 289 : proto::result_of::make_expr< 290 proto::tag::function 291 , phoenix_domain 292 , F 293 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 294 > 295 {}; 296 297 298 299 300 301 302 303 template <typename F, 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> 304 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> 305 : proto::result_of::make_expr< 306 proto::tag::function 307 , phoenix_domain 308 , F 309 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 310 > 311 {}; 312 313 314 315 316 317 318 319 template <typename F, 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 , typename A19> 320 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> 321 : proto::result_of::make_expr< 322 proto::tag::function 323 , phoenix_domain 324 , F 325 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 326 > 327 {}; 328 329 330 331 332 333 334 335 template <typename F, 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 , typename A19 , typename A20> 336 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> 337 : proto::result_of::make_expr< 338 proto::tag::function 339 , phoenix_domain 340 , F 341 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 342 > 343 {}; 344 345 346 347 348 349 350 351 template <typename F, 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 , typename A19 , typename A20 , typename A21> 352 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> 353 : proto::result_of::make_expr< 354 proto::tag::function 355 , phoenix_domain 356 , F 357 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 358 > 359 {}; 360 361 362 363 364 365 366 367 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22> 368 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> 369 : proto::result_of::make_expr< 370 proto::tag::function 371 , phoenix_domain 372 , F 373 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 374 > 375 {}; 376 377 378 379 380 381 382 383 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23> 384 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> 385 : proto::result_of::make_expr< 386 proto::tag::function 387 , phoenix_domain 388 , F 389 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 390 > 391 {}; 392 393 394 395 396 397 398 399 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24> 400 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24> 401 : proto::result_of::make_expr< 402 proto::tag::function 403 , phoenix_domain 404 , F 405 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 406 > 407 {}; 408 409 410 411 412 413 414 415 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25> 416 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25> 417 : proto::result_of::make_expr< 418 proto::tag::function 419 , phoenix_domain 420 , F 421 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 422 > 423 {}; 424 425 426 427 428 429 430 431 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26> 432 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26> 433 : proto::result_of::make_expr< 434 proto::tag::function 435 , phoenix_domain 436 , F 437 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 438 > 439 {}; 440 441 442 443 444 445 446 447 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27> 448 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27> 449 : proto::result_of::make_expr< 450 proto::tag::function 451 , phoenix_domain 452 , F 453 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 454 > 455 {}; 456 457 458 459 460 461 462 463 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28> 464 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28> 465 : proto::result_of::make_expr< 466 proto::tag::function 467 , phoenix_domain 468 , F 469 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 470 > 471 {}; 472 473 474 475 476 477 478 479 template <typename F, 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 , typename A19 , typename A20 , typename A21 , typename A22 , typename A23 , typename A24 , typename A25 , typename A26 , typename A27 , typename A28 , typename A29> 480 struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29> 481 : proto::result_of::make_expr< 482 proto::tag::function 483 , phoenix_domain 484 , F 485 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 486 > 487 {}; 488