[857] | 1 |
|
---|
| 2 | // Copyright Peter Dimov 2001
|
---|
| 3 | // Copyright Aleksey Gurtovoy 2001-2004
|
---|
| 4 | //
|
---|
| 5 | // Distributed under the Boost Software License, Version 1.0.
|
---|
| 6 | // (See accompanying file LICENSE_1_0.txt or copy at
|
---|
| 7 | // http://www.boost.org/LICENSE_1_0.txt)
|
---|
| 8 | //
|
---|
| 9 |
|
---|
| 10 | // Preprocessed version of "boost/mpl/bind.hpp" header
|
---|
| 11 | // -- DO NOT modify by hand!
|
---|
| 12 |
|
---|
| 13 | namespace boost { namespace mpl {
|
---|
| 14 |
|
---|
| 15 | namespace aux {
|
---|
| 16 | template< bool >
|
---|
| 17 | struct resolve_arg_impl
|
---|
| 18 | {
|
---|
| 19 | template<
|
---|
| 20 | typename T, typename U1, typename U2, typename U3
|
---|
| 21 | , typename U4, typename U5
|
---|
| 22 | >
|
---|
| 23 | struct result_
|
---|
| 24 | {
|
---|
| 25 | typedef T type;
|
---|
| 26 | };
|
---|
| 27 | };
|
---|
| 28 |
|
---|
| 29 | template<>
|
---|
| 30 | struct resolve_arg_impl<true>
|
---|
| 31 | {
|
---|
| 32 | template<
|
---|
| 33 | typename T, typename U1, typename U2, typename U3
|
---|
| 34 | , typename U4, typename U5
|
---|
| 35 | >
|
---|
| 36 | struct result_
|
---|
| 37 | {
|
---|
| 38 | typedef typename apply_wrap5<
|
---|
| 39 | T
|
---|
| 40 | , U1, U2, U3, U4, U5
|
---|
| 41 | >::type type;
|
---|
| 42 | };
|
---|
| 43 | };
|
---|
| 44 |
|
---|
| 45 | template< typename T > struct is_bind_template;
|
---|
| 46 |
|
---|
| 47 | template<
|
---|
| 48 | typename T, typename U1, typename U2, typename U3, typename U4
|
---|
| 49 | , typename U5
|
---|
| 50 | >
|
---|
| 51 | struct resolve_bind_arg
|
---|
| 52 | : resolve_arg_impl< is_bind_template<T>::value >
|
---|
| 53 | ::template result_< T,U1,U2,U3,U4,U5 >
|
---|
| 54 | {
|
---|
| 55 | };
|
---|
| 56 |
|
---|
| 57 | template< typename T >
|
---|
| 58 | struct replace_unnamed_arg_impl
|
---|
| 59 | {
|
---|
| 60 | template< typename Arg > struct result_
|
---|
| 61 | {
|
---|
| 62 | typedef Arg next;
|
---|
| 63 | typedef T type;
|
---|
| 64 | };
|
---|
| 65 | };
|
---|
| 66 |
|
---|
| 67 | template<>
|
---|
| 68 | struct replace_unnamed_arg_impl< arg< -1 > >
|
---|
| 69 | {
|
---|
| 70 | template< typename Arg > struct result_
|
---|
| 71 | {
|
---|
| 72 | typedef typename next<Arg>::type next;
|
---|
| 73 | typedef Arg type;
|
---|
| 74 | };
|
---|
| 75 | };
|
---|
| 76 |
|
---|
| 77 | template< typename T, typename Arg >
|
---|
| 78 | struct replace_unnamed_arg
|
---|
| 79 | : replace_unnamed_arg_impl<T>::template result_<Arg>
|
---|
| 80 | {
|
---|
| 81 | };
|
---|
| 82 |
|
---|
| 83 | template< int arity_ > struct bind_chooser;
|
---|
| 84 |
|
---|
| 85 | aux::no_tag is_bind_helper(...);
|
---|
| 86 | template< typename T > aux::no_tag is_bind_helper(protect<T>*);
|
---|
| 87 |
|
---|
| 88 | template<
|
---|
| 89 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 90 | , typename T5
|
---|
| 91 | >
|
---|
| 92 | aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
|
---|
| 93 |
|
---|
| 94 | template< int N >
|
---|
| 95 | aux::yes_tag is_bind_helper(arg<N>*);
|
---|
| 96 |
|
---|
| 97 | template< bool is_ref_ = true >
|
---|
| 98 | struct is_bind_template_impl
|
---|
| 99 | {
|
---|
| 100 | template< typename T > struct result_
|
---|
| 101 | {
|
---|
| 102 | BOOST_STATIC_CONSTANT(bool, value = false);
|
---|
| 103 | };
|
---|
| 104 | };
|
---|
| 105 |
|
---|
| 106 | template<>
|
---|
| 107 | struct is_bind_template_impl<false>
|
---|
| 108 | {
|
---|
| 109 | template< typename T > struct result_
|
---|
| 110 | {
|
---|
| 111 | BOOST_STATIC_CONSTANT(bool, value =
|
---|
| 112 | sizeof(aux::is_bind_helper(static_cast<T*>(0)))
|
---|
| 113 | == sizeof(aux::yes_tag)
|
---|
| 114 | );
|
---|
| 115 | };
|
---|
| 116 | };
|
---|
| 117 |
|
---|
| 118 | template< typename T > struct is_bind_template
|
---|
| 119 | : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
|
---|
| 120 | ::template result_<T>
|
---|
| 121 | {
|
---|
| 122 | };
|
---|
| 123 |
|
---|
| 124 | } // namespace aux
|
---|
| 125 |
|
---|
| 126 | template<
|
---|
| 127 | typename F
|
---|
| 128 | >
|
---|
| 129 | struct bind0
|
---|
| 130 | {
|
---|
| 131 | template<
|
---|
| 132 | typename U1 = na, typename U2 = na, typename U3 = na
|
---|
| 133 | , typename U4 = na, typename U5 = na
|
---|
| 134 | >
|
---|
| 135 | struct apply
|
---|
| 136 | {
|
---|
| 137 | private:
|
---|
| 138 | typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
|
---|
| 139 | typedef typename r0::type a0;
|
---|
| 140 | typedef typename r0::next n1;
|
---|
| 141 | typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
|
---|
| 142 | ///
|
---|
| 143 | public:
|
---|
| 144 | typedef typename apply_wrap0<
|
---|
| 145 | f_
|
---|
| 146 | >::type type;
|
---|
| 147 |
|
---|
| 148 | };
|
---|
| 149 | };
|
---|
| 150 |
|
---|
| 151 | namespace aux {
|
---|
| 152 |
|
---|
| 153 | template<
|
---|
| 154 | typename F
|
---|
| 155 | >
|
---|
| 156 | aux::yes_tag
|
---|
| 157 | is_bind_helper(bind0<F>*);
|
---|
| 158 |
|
---|
| 159 | } // namespace aux
|
---|
| 160 |
|
---|
| 161 | BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
|
---|
| 162 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
|
---|
| 163 |
|
---|
| 164 | namespace aux {
|
---|
| 165 |
|
---|
| 166 | template<>
|
---|
| 167 | struct bind_chooser<0>
|
---|
| 168 | {
|
---|
| 169 | template<
|
---|
| 170 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 171 | , typename T5
|
---|
| 172 | >
|
---|
| 173 | struct result_
|
---|
| 174 | {
|
---|
| 175 | typedef bind0<F> type;
|
---|
| 176 | };
|
---|
| 177 | };
|
---|
| 178 |
|
---|
| 179 | } // namespace aux
|
---|
| 180 |
|
---|
| 181 | template<
|
---|
| 182 | typename F, typename T1
|
---|
| 183 | >
|
---|
| 184 | struct bind1
|
---|
| 185 | {
|
---|
| 186 | template<
|
---|
| 187 | typename U1 = na, typename U2 = na, typename U3 = na
|
---|
| 188 | , typename U4 = na, typename U5 = na
|
---|
| 189 | >
|
---|
| 190 | struct apply
|
---|
| 191 | {
|
---|
| 192 | private:
|
---|
| 193 | typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
|
---|
| 194 | typedef typename r0::type a0;
|
---|
| 195 | typedef typename r0::next n1;
|
---|
| 196 | typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
|
---|
| 197 | ///
|
---|
| 198 | typedef aux::replace_unnamed_arg< T1,n1 > r1;
|
---|
| 199 | typedef typename r1::type a1;
|
---|
| 200 | typedef typename r1::next n2;
|
---|
| 201 | typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
|
---|
| 202 | ///
|
---|
| 203 | public:
|
---|
| 204 | typedef typename apply_wrap1<
|
---|
| 205 | f_
|
---|
| 206 | , typename t1::type
|
---|
| 207 | >::type type;
|
---|
| 208 |
|
---|
| 209 | };
|
---|
| 210 | };
|
---|
| 211 |
|
---|
| 212 | namespace aux {
|
---|
| 213 |
|
---|
| 214 | template<
|
---|
| 215 | typename F, typename T1
|
---|
| 216 | >
|
---|
| 217 | aux::yes_tag
|
---|
| 218 | is_bind_helper(bind1< F,T1 >*);
|
---|
| 219 |
|
---|
| 220 | } // namespace aux
|
---|
| 221 |
|
---|
| 222 | BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
|
---|
| 223 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
|
---|
| 224 |
|
---|
| 225 | namespace aux {
|
---|
| 226 |
|
---|
| 227 | template<>
|
---|
| 228 | struct bind_chooser<1>
|
---|
| 229 | {
|
---|
| 230 | template<
|
---|
| 231 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 232 | , typename T5
|
---|
| 233 | >
|
---|
| 234 | struct result_
|
---|
| 235 | {
|
---|
| 236 | typedef bind1< F,T1 > type;
|
---|
| 237 | };
|
---|
| 238 | };
|
---|
| 239 |
|
---|
| 240 | } // namespace aux
|
---|
| 241 |
|
---|
| 242 | template<
|
---|
| 243 | typename F, typename T1, typename T2
|
---|
| 244 | >
|
---|
| 245 | struct bind2
|
---|
| 246 | {
|
---|
| 247 | template<
|
---|
| 248 | typename U1 = na, typename U2 = na, typename U3 = na
|
---|
| 249 | , typename U4 = na, typename U5 = na
|
---|
| 250 | >
|
---|
| 251 | struct apply
|
---|
| 252 | {
|
---|
| 253 | private:
|
---|
| 254 | typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
|
---|
| 255 | typedef typename r0::type a0;
|
---|
| 256 | typedef typename r0::next n1;
|
---|
| 257 | typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
|
---|
| 258 | ///
|
---|
| 259 | typedef aux::replace_unnamed_arg< T1,n1 > r1;
|
---|
| 260 | typedef typename r1::type a1;
|
---|
| 261 | typedef typename r1::next n2;
|
---|
| 262 | typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
|
---|
| 263 | ///
|
---|
| 264 | typedef aux::replace_unnamed_arg< T2,n2 > r2;
|
---|
| 265 | typedef typename r2::type a2;
|
---|
| 266 | typedef typename r2::next n3;
|
---|
| 267 | typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
|
---|
| 268 | ///
|
---|
| 269 | public:
|
---|
| 270 | typedef typename apply_wrap2<
|
---|
| 271 | f_
|
---|
| 272 | , typename t1::type, typename t2::type
|
---|
| 273 | >::type type;
|
---|
| 274 |
|
---|
| 275 | };
|
---|
| 276 | };
|
---|
| 277 |
|
---|
| 278 | namespace aux {
|
---|
| 279 |
|
---|
| 280 | template<
|
---|
| 281 | typename F, typename T1, typename T2
|
---|
| 282 | >
|
---|
| 283 | aux::yes_tag
|
---|
| 284 | is_bind_helper(bind2< F,T1,T2 >*);
|
---|
| 285 |
|
---|
| 286 | } // namespace aux
|
---|
| 287 |
|
---|
| 288 | BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
|
---|
| 289 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
|
---|
| 290 |
|
---|
| 291 | namespace aux {
|
---|
| 292 |
|
---|
| 293 | template<>
|
---|
| 294 | struct bind_chooser<2>
|
---|
| 295 | {
|
---|
| 296 | template<
|
---|
| 297 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 298 | , typename T5
|
---|
| 299 | >
|
---|
| 300 | struct result_
|
---|
| 301 | {
|
---|
| 302 | typedef bind2< F,T1,T2 > type;
|
---|
| 303 | };
|
---|
| 304 | };
|
---|
| 305 |
|
---|
| 306 | } // namespace aux
|
---|
| 307 |
|
---|
| 308 | template<
|
---|
| 309 | typename F, typename T1, typename T2, typename T3
|
---|
| 310 | >
|
---|
| 311 | struct bind3
|
---|
| 312 | {
|
---|
| 313 | template<
|
---|
| 314 | typename U1 = na, typename U2 = na, typename U3 = na
|
---|
| 315 | , typename U4 = na, typename U5 = na
|
---|
| 316 | >
|
---|
| 317 | struct apply
|
---|
| 318 | {
|
---|
| 319 | private:
|
---|
| 320 | typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
|
---|
| 321 | typedef typename r0::type a0;
|
---|
| 322 | typedef typename r0::next n1;
|
---|
| 323 | typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
|
---|
| 324 | ///
|
---|
| 325 | typedef aux::replace_unnamed_arg< T1,n1 > r1;
|
---|
| 326 | typedef typename r1::type a1;
|
---|
| 327 | typedef typename r1::next n2;
|
---|
| 328 | typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
|
---|
| 329 | ///
|
---|
| 330 | typedef aux::replace_unnamed_arg< T2,n2 > r2;
|
---|
| 331 | typedef typename r2::type a2;
|
---|
| 332 | typedef typename r2::next n3;
|
---|
| 333 | typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
|
---|
| 334 | ///
|
---|
| 335 | typedef aux::replace_unnamed_arg< T3,n3 > r3;
|
---|
| 336 | typedef typename r3::type a3;
|
---|
| 337 | typedef typename r3::next n4;
|
---|
| 338 | typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
|
---|
| 339 | ///
|
---|
| 340 | public:
|
---|
| 341 | typedef typename apply_wrap3<
|
---|
| 342 | f_
|
---|
| 343 | , typename t1::type, typename t2::type, typename t3::type
|
---|
| 344 | >::type type;
|
---|
| 345 |
|
---|
| 346 | };
|
---|
| 347 | };
|
---|
| 348 |
|
---|
| 349 | namespace aux {
|
---|
| 350 |
|
---|
| 351 | template<
|
---|
| 352 | typename F, typename T1, typename T2, typename T3
|
---|
| 353 | >
|
---|
| 354 | aux::yes_tag
|
---|
| 355 | is_bind_helper(bind3< F,T1,T2,T3 >*);
|
---|
| 356 |
|
---|
| 357 | } // namespace aux
|
---|
| 358 |
|
---|
| 359 | BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
|
---|
| 360 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
|
---|
| 361 |
|
---|
| 362 | namespace aux {
|
---|
| 363 |
|
---|
| 364 | template<>
|
---|
| 365 | struct bind_chooser<3>
|
---|
| 366 | {
|
---|
| 367 | template<
|
---|
| 368 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 369 | , typename T5
|
---|
| 370 | >
|
---|
| 371 | struct result_
|
---|
| 372 | {
|
---|
| 373 | typedef bind3< F,T1,T2,T3 > type;
|
---|
| 374 | };
|
---|
| 375 | };
|
---|
| 376 |
|
---|
| 377 | } // namespace aux
|
---|
| 378 |
|
---|
| 379 | template<
|
---|
| 380 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 381 | >
|
---|
| 382 | struct bind4
|
---|
| 383 | {
|
---|
| 384 | template<
|
---|
| 385 | typename U1 = na, typename U2 = na, typename U3 = na
|
---|
| 386 | , typename U4 = na, typename U5 = na
|
---|
| 387 | >
|
---|
| 388 | struct apply
|
---|
| 389 | {
|
---|
| 390 | private:
|
---|
| 391 | typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
|
---|
| 392 | typedef typename r0::type a0;
|
---|
| 393 | typedef typename r0::next n1;
|
---|
| 394 | typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
|
---|
| 395 | ///
|
---|
| 396 | typedef aux::replace_unnamed_arg< T1,n1 > r1;
|
---|
| 397 | typedef typename r1::type a1;
|
---|
| 398 | typedef typename r1::next n2;
|
---|
| 399 | typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
|
---|
| 400 | ///
|
---|
| 401 | typedef aux::replace_unnamed_arg< T2,n2 > r2;
|
---|
| 402 | typedef typename r2::type a2;
|
---|
| 403 | typedef typename r2::next n3;
|
---|
| 404 | typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
|
---|
| 405 | ///
|
---|
| 406 | typedef aux::replace_unnamed_arg< T3,n3 > r3;
|
---|
| 407 | typedef typename r3::type a3;
|
---|
| 408 | typedef typename r3::next n4;
|
---|
| 409 | typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
|
---|
| 410 | ///
|
---|
| 411 | typedef aux::replace_unnamed_arg< T4,n4 > r4;
|
---|
| 412 | typedef typename r4::type a4;
|
---|
| 413 | typedef typename r4::next n5;
|
---|
| 414 | typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
|
---|
| 415 | ///
|
---|
| 416 | public:
|
---|
| 417 | typedef typename apply_wrap4<
|
---|
| 418 | f_
|
---|
| 419 | , typename t1::type, typename t2::type, typename t3::type
|
---|
| 420 | , typename t4::type
|
---|
| 421 | >::type type;
|
---|
| 422 |
|
---|
| 423 | };
|
---|
| 424 | };
|
---|
| 425 |
|
---|
| 426 | namespace aux {
|
---|
| 427 |
|
---|
| 428 | template<
|
---|
| 429 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 430 | >
|
---|
| 431 | aux::yes_tag
|
---|
| 432 | is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
|
---|
| 433 |
|
---|
| 434 | } // namespace aux
|
---|
| 435 |
|
---|
| 436 | BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
|
---|
| 437 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
|
---|
| 438 |
|
---|
| 439 | namespace aux {
|
---|
| 440 |
|
---|
| 441 | template<>
|
---|
| 442 | struct bind_chooser<4>
|
---|
| 443 | {
|
---|
| 444 | template<
|
---|
| 445 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 446 | , typename T5
|
---|
| 447 | >
|
---|
| 448 | struct result_
|
---|
| 449 | {
|
---|
| 450 | typedef bind4< F,T1,T2,T3,T4 > type;
|
---|
| 451 | };
|
---|
| 452 | };
|
---|
| 453 |
|
---|
| 454 | } // namespace aux
|
---|
| 455 |
|
---|
| 456 | template<
|
---|
| 457 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 458 | , typename T5
|
---|
| 459 | >
|
---|
| 460 | struct bind5
|
---|
| 461 | {
|
---|
| 462 | template<
|
---|
| 463 | typename U1 = na, typename U2 = na, typename U3 = na
|
---|
| 464 | , typename U4 = na, typename U5 = na
|
---|
| 465 | >
|
---|
| 466 | struct apply
|
---|
| 467 | {
|
---|
| 468 | private:
|
---|
| 469 | typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
|
---|
| 470 | typedef typename r0::type a0;
|
---|
| 471 | typedef typename r0::next n1;
|
---|
| 472 | typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
|
---|
| 473 | ///
|
---|
| 474 | typedef aux::replace_unnamed_arg< T1,n1 > r1;
|
---|
| 475 | typedef typename r1::type a1;
|
---|
| 476 | typedef typename r1::next n2;
|
---|
| 477 | typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
|
---|
| 478 | ///
|
---|
| 479 | typedef aux::replace_unnamed_arg< T2,n2 > r2;
|
---|
| 480 | typedef typename r2::type a2;
|
---|
| 481 | typedef typename r2::next n3;
|
---|
| 482 | typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
|
---|
| 483 | ///
|
---|
| 484 | typedef aux::replace_unnamed_arg< T3,n3 > r3;
|
---|
| 485 | typedef typename r3::type a3;
|
---|
| 486 | typedef typename r3::next n4;
|
---|
| 487 | typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
|
---|
| 488 | ///
|
---|
| 489 | typedef aux::replace_unnamed_arg< T4,n4 > r4;
|
---|
| 490 | typedef typename r4::type a4;
|
---|
| 491 | typedef typename r4::next n5;
|
---|
| 492 | typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
|
---|
| 493 | ///
|
---|
| 494 | typedef aux::replace_unnamed_arg< T5,n5 > r5;
|
---|
| 495 | typedef typename r5::type a5;
|
---|
| 496 | typedef typename r5::next n6;
|
---|
| 497 | typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
|
---|
| 498 | ///
|
---|
| 499 | public:
|
---|
| 500 | typedef typename apply_wrap5<
|
---|
| 501 | f_
|
---|
| 502 | , typename t1::type, typename t2::type, typename t3::type
|
---|
| 503 | , typename t4::type, typename t5::type
|
---|
| 504 | >::type type;
|
---|
| 505 |
|
---|
| 506 | };
|
---|
| 507 | };
|
---|
| 508 |
|
---|
| 509 | namespace aux {
|
---|
| 510 |
|
---|
| 511 | template<
|
---|
| 512 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 513 | , typename T5
|
---|
| 514 | >
|
---|
| 515 | aux::yes_tag
|
---|
| 516 | is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
|
---|
| 517 |
|
---|
| 518 | } // namespace aux
|
---|
| 519 |
|
---|
| 520 | BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
|
---|
| 521 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
|
---|
| 522 |
|
---|
| 523 | namespace aux {
|
---|
| 524 |
|
---|
| 525 | template<>
|
---|
| 526 | struct bind_chooser<5>
|
---|
| 527 | {
|
---|
| 528 | template<
|
---|
| 529 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 530 | , typename T5
|
---|
| 531 | >
|
---|
| 532 | struct result_
|
---|
| 533 | {
|
---|
| 534 | typedef bind5< F,T1,T2,T3,T4,T5 > type;
|
---|
| 535 | };
|
---|
| 536 | };
|
---|
| 537 |
|
---|
| 538 | } // namespace aux
|
---|
| 539 |
|
---|
| 540 | namespace aux {
|
---|
| 541 |
|
---|
| 542 | template< typename T >
|
---|
| 543 | struct is_bind_arg
|
---|
| 544 | {
|
---|
| 545 | BOOST_STATIC_CONSTANT(bool, value = true);
|
---|
| 546 | };
|
---|
| 547 |
|
---|
| 548 | template<>
|
---|
| 549 | struct is_bind_arg<na>
|
---|
| 550 | {
|
---|
| 551 | BOOST_STATIC_CONSTANT(bool, value = false);
|
---|
| 552 | };
|
---|
| 553 |
|
---|
| 554 | template<
|
---|
| 555 | typename T1, typename T2, typename T3, typename T4, typename T5
|
---|
| 556 | >
|
---|
| 557 | struct bind_count_args
|
---|
| 558 | {
|
---|
| 559 | BOOST_STATIC_CONSTANT(int, value =
|
---|
| 560 | is_bind_arg<T1>::value + is_bind_arg<T2>::value
|
---|
| 561 | + is_bind_arg<T3>::value + is_bind_arg<T4>::value
|
---|
| 562 | + is_bind_arg<T5>::value
|
---|
| 563 | );
|
---|
| 564 |
|
---|
| 565 | };
|
---|
| 566 |
|
---|
| 567 | }
|
---|
| 568 |
|
---|
| 569 | template<
|
---|
| 570 | typename F, typename T1, typename T2, typename T3, typename T4
|
---|
| 571 | , typename T5
|
---|
| 572 | >
|
---|
| 573 | struct bind
|
---|
| 574 | : aux::bind_chooser<
|
---|
| 575 | aux::bind_count_args< T1,T2,T3,T4,T5 >::value
|
---|
| 576 | >::template result_< F,T1,T2,T3,T4,T5 >::type
|
---|
| 577 | {
|
---|
| 578 | };
|
---|
| 579 |
|
---|
| 580 | BOOST_MPL_AUX_ARITY_SPEC(
|
---|
| 581 | 6
|
---|
| 582 | , bind
|
---|
| 583 | )
|
---|
| 584 |
|
---|
| 585 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
|
---|
| 586 | 6
|
---|
| 587 | , bind
|
---|
| 588 | )
|
---|
| 589 | }}
|
---|
| 590 |
|
---|