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