1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/bind.hpp Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,547 @@
1.4 +
1.5 +#if !defined(BOOST_PP_IS_ITERATING)
1.6 +
1.7 +///// header body
1.8 +
1.9 +#ifndef BOOST_MPL_BIND_HPP_INCLUDED
1.10 +#define BOOST_MPL_BIND_HPP_INCLUDED
1.11 +
1.12 +// Copyright Peter Dimov 2001
1.13 +// Copyright Aleksey Gurtovoy 2001-2004
1.14 +//
1.15 +// Distributed under the Boost Software License, Version 1.0.
1.16 +// (See accompanying file LICENSE_1_0.txt or copy at
1.17 +// http://www.boost.org/LICENSE_1_0.txt)
1.18 +//
1.19 +// See http://www.boost.org/libs/mpl for documentation.
1.20 +
1.21 +// $Source: /cvsroot/boost/boost/boost/mpl/bind.hpp,v $
1.22 +// $Date: 2004/10/26 14:51:04 $
1.23 +// $Revision: 1.13 $
1.24 +
1.25 +#if !defined(BOOST_MPL_PREPROCESSING_MODE)
1.26 +# include <boost/mpl/bind_fwd.hpp>
1.27 +# include <boost/mpl/placeholders.hpp>
1.28 +# include <boost/mpl/next.hpp>
1.29 +# include <boost/mpl/protect.hpp>
1.30 +# include <boost/mpl/apply_wrap.hpp>
1.31 +# include <boost/mpl/limits/arity.hpp>
1.32 +# include <boost/mpl/aux_/na.hpp>
1.33 +# include <boost/mpl/aux_/arity_spec.hpp>
1.34 +# include <boost/mpl/aux_/type_wrapper.hpp>
1.35 +# include <boost/mpl/aux_/yes_no.hpp>
1.36 +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1.37 +# include <boost/type_traits/is_reference.hpp>
1.38 +# endif
1.39 +#endif
1.40 +
1.41 +#include <boost/mpl/aux_/config/bind.hpp>
1.42 +#include <boost/mpl/aux_/config/static_constant.hpp>
1.43 +#include <boost/mpl/aux_/config/use_preprocessed.hpp>
1.44 +
1.45 +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
1.46 + && !defined(BOOST_MPL_PREPROCESSING_MODE)
1.47 +
1.48 +# if defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
1.49 +# define BOOST_MPL_PREPROCESSED_HEADER basic_bind.hpp
1.50 +# else
1.51 +# define BOOST_MPL_PREPROCESSED_HEADER bind.hpp
1.52 +# endif
1.53 +# include <boost/mpl/aux_/include_preprocessed.hpp>
1.54 +
1.55 +#else
1.56 +
1.57 +# include <boost/mpl/aux_/preprocessor/params.hpp>
1.58 +# include <boost/mpl/aux_/preprocessor/default_params.hpp>
1.59 +# include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
1.60 +# include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
1.61 +# include <boost/mpl/aux_/preprocessor/ext_params.hpp>
1.62 +# include <boost/mpl/aux_/preprocessor/repeat.hpp>
1.63 +# include <boost/mpl/aux_/preprocessor/enum.hpp>
1.64 +# include <boost/mpl/aux_/preprocessor/add.hpp>
1.65 +# include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
1.66 +# include <boost/mpl/aux_/config/ctps.hpp>
1.67 +# include <boost/mpl/aux_/config/ttp.hpp>
1.68 +# include <boost/mpl/aux_/config/dtp.hpp>
1.69 +# include <boost/mpl/aux_/nttp_decl.hpp>
1.70 +
1.71 +# include <boost/preprocessor/iterate.hpp>
1.72 +# include <boost/preprocessor/comma_if.hpp>
1.73 +# include <boost/preprocessor/cat.hpp>
1.74 +# include <boost/preprocessor/inc.hpp>
1.75 +
1.76 +namespace boost { namespace mpl {
1.77 +
1.78 +// local macros, #undef-ined at the end of the header
1.79 +# define AUX778076_APPLY \
1.80 + BOOST_PP_CAT(apply_wrap,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \
1.81 + /**/
1.82 +
1.83 +# if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
1.84 +# define AUX778076_DMC_PARAM() , int dummy_
1.85 +# else
1.86 +# define AUX778076_DMC_PARAM()
1.87 +# endif
1.88 +
1.89 +# define AUX778076_BIND_PARAMS(param) \
1.90 + BOOST_MPL_PP_PARAMS( \
1.91 + BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
1.92 + , param \
1.93 + ) \
1.94 + /**/
1.95 +
1.96 +# define AUX778076_BIND_DEFAULT_PARAMS(param, value) \
1.97 + BOOST_MPL_PP_DEFAULT_PARAMS( \
1.98 + BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
1.99 + , param \
1.100 + , value \
1.101 + ) \
1.102 + /**/
1.103 +
1.104 +# define AUX778076_BIND_N_PARAMS(n, param) \
1.105 + BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \
1.106 + /**/
1.107 +
1.108 +# define AUX778076_BIND_N_SPEC_PARAMS(n, param, def) \
1.109 + BOOST_PP_COMMA_IF(n) \
1.110 + BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
1.111 + /**/
1.112 +
1.113 +#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
1.114 +# define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \
1.115 + AUX778076_BIND_DEFAULT_PARAMS(param, value) \
1.116 + /**/
1.117 +#else
1.118 +# define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \
1.119 + AUX778076_BIND_PARAMS(param) \
1.120 + /**/
1.121 +#endif
1.122 +
1.123 +namespace aux {
1.124 +
1.125 +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1.126 +
1.127 +template<
1.128 + typename T, AUX778076_BIND_PARAMS(typename U)
1.129 + >
1.130 +struct resolve_bind_arg
1.131 +{
1.132 + typedef T type;
1.133 +};
1.134 +
1.135 +# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
1.136 +
1.137 +template<
1.138 + typename T
1.139 + , typename Arg
1.140 + >
1.141 +struct replace_unnamed_arg
1.142 +{
1.143 + typedef Arg next;
1.144 + typedef T type;
1.145 +};
1.146 +
1.147 +template<
1.148 + typename Arg
1.149 + >
1.150 +struct replace_unnamed_arg< arg<-1>,Arg >
1.151 +{
1.152 + typedef typename Arg::next next;
1.153 + typedef Arg type;
1.154 +};
1.155 +
1.156 +# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
1.157 +
1.158 +template<
1.159 + BOOST_MPL_AUX_NTTP_DECL(int, N), AUX778076_BIND_PARAMS(typename U)
1.160 + >
1.161 +struct resolve_bind_arg< arg<N>,AUX778076_BIND_PARAMS(U) >
1.162 +{
1.163 + typedef typename AUX778076_APPLY<mpl::arg<N>, AUX778076_BIND_PARAMS(U)>::type type;
1.164 +};
1.165 +
1.166 +#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
1.167 +template<
1.168 + typename F, AUX778076_BIND_PARAMS(typename T), AUX778076_BIND_PARAMS(typename U)
1.169 + >
1.170 +struct resolve_bind_arg< bind<F,AUX778076_BIND_PARAMS(T)>,AUX778076_BIND_PARAMS(U) >
1.171 +{
1.172 + typedef bind<F,AUX778076_BIND_PARAMS(T)> f_;
1.173 + typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;
1.174 +};
1.175 +#endif
1.176 +
1.177 +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.178 +
1.179 +// agurt, 15/jan/02: it's not a intended to be used as a function class, and
1.180 +// MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't
1.181 +// work), so I went with the 'result_' here, and in all other similar cases
1.182 +template< bool >
1.183 +struct resolve_arg_impl
1.184 +{
1.185 + template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_
1.186 + {
1.187 + typedef T type;
1.188 + };
1.189 +};
1.190 +
1.191 +template<>
1.192 +struct resolve_arg_impl<true>
1.193 +{
1.194 + template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_
1.195 + {
1.196 + typedef typename AUX778076_APPLY<
1.197 + T
1.198 + , AUX778076_BIND_PARAMS(U)
1.199 + >::type type;
1.200 + };
1.201 +};
1.202 +
1.203 +// for 'resolve_bind_arg'
1.204 +template< typename T > struct is_bind_template;
1.205 +
1.206 +template<
1.207 + typename T, AUX778076_BIND_PARAMS(typename U)
1.208 + >
1.209 +struct resolve_bind_arg
1.210 + : resolve_arg_impl< is_bind_template<T>::value >
1.211 + ::template result_< T,AUX778076_BIND_PARAMS(U) >
1.212 +{
1.213 +};
1.214 +
1.215 +# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
1.216 +
1.217 +template< typename T >
1.218 +struct replace_unnamed_arg_impl
1.219 +{
1.220 + template< typename Arg > struct result_
1.221 + {
1.222 + typedef Arg next;
1.223 + typedef T type;
1.224 + };
1.225 +};
1.226 +
1.227 +template<>
1.228 +struct replace_unnamed_arg_impl< arg<-1> >
1.229 +{
1.230 + template< typename Arg > struct result_
1.231 + {
1.232 + typedef typename next<Arg>::type next;
1.233 + typedef Arg type;
1.234 + };
1.235 +};
1.236 +
1.237 +template< typename T, typename Arg >
1.238 +struct replace_unnamed_arg
1.239 + : replace_unnamed_arg_impl<T>::template result_<Arg>
1.240 +{
1.241 +};
1.242 +
1.243 +# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
1.244 +
1.245 +// agurt, 10/mar/02: the forward declaration has to appear before any of
1.246 +// 'is_bind_helper' overloads, otherwise MSVC6.5 issues an ICE on it
1.247 +template< BOOST_MPL_AUX_NTTP_DECL(int, arity_) > struct bind_chooser;
1.248 +
1.249 +aux::no_tag is_bind_helper(...);
1.250 +template< typename T > aux::no_tag is_bind_helper(protect<T>*);
1.251 +
1.252 +// overload for "main" form
1.253 +// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload
1.254 +// in case if we use 'aux::type_wrapper< bind<...> >' here, and all
1.255 +// 'bind' instantiations form a complete type anyway
1.256 +#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
1.257 +template<
1.258 + typename F, AUX778076_BIND_PARAMS(typename T)
1.259 + >
1.260 +aux::yes_tag is_bind_helper(bind<F,AUX778076_BIND_PARAMS(T)>*);
1.261 +#endif
1.262 +
1.263 +template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
1.264 +aux::yes_tag is_bind_helper(arg<N>*);
1.265 +
1.266 +template< bool is_ref_ = true >
1.267 +struct is_bind_template_impl
1.268 +{
1.269 + template< typename T > struct result_
1.270 + {
1.271 + BOOST_STATIC_CONSTANT(bool, value = false);
1.272 + };
1.273 +};
1.274 +
1.275 +template<>
1.276 +struct is_bind_template_impl<false>
1.277 +{
1.278 + template< typename T > struct result_
1.279 + {
1.280 + BOOST_STATIC_CONSTANT(bool, value =
1.281 + sizeof(aux::is_bind_helper(static_cast<T*>(0)))
1.282 + == sizeof(aux::yes_tag)
1.283 + );
1.284 + };
1.285 +};
1.286 +
1.287 +template< typename T > struct is_bind_template
1.288 + : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
1.289 + ::template result_<T>
1.290 +{
1.291 +};
1.292 +
1.293 +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.294 +
1.295 +} // namespace aux
1.296 +
1.297 +
1.298 +#define BOOST_PP_ITERATION_PARAMS_1 \
1.299 + (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind.hpp>))
1.300 +#include BOOST_PP_ITERATE()
1.301 +
1.302 +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
1.303 + && !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)
1.304 +/// if_/eval_if specializations
1.305 +# define AUX778076_SPEC_NAME if_
1.306 +# define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))
1.307 +# include BOOST_PP_ITERATE()
1.308 +
1.309 +#if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
1.310 +# define AUX778076_SPEC_NAME eval_if
1.311 +# define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))
1.312 +# include BOOST_PP_ITERATE()
1.313 +#endif
1.314 +#endif
1.315 +
1.316 +// real C++ version is already taken care of
1.317 +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
1.318 + && !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
1.319 +
1.320 +namespace aux {
1.321 +// apply_count_args
1.322 +#define AUX778076_COUNT_ARGS_PREFIX bind
1.323 +#define AUX778076_COUNT_ARGS_DEFAULT na
1.324 +#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
1.325 +#include <boost/mpl/aux_/count_args.hpp>
1.326 +}
1.327 +
1.328 +// bind
1.329 +template<
1.330 + typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM()
1.331 + >
1.332 +struct bind
1.333 + : aux::bind_chooser<
1.334 + aux::bind_count_args<AUX778076_BIND_PARAMS(T)>::value
1.335 + >::template result_< F,AUX778076_BIND_PARAMS(T) >::type
1.336 +{
1.337 +};
1.338 +
1.339 +BOOST_MPL_AUX_ARITY_SPEC(
1.340 + BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
1.341 + , bind
1.342 + )
1.343 +
1.344 +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
1.345 + BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
1.346 + , bind
1.347 + )
1.348 +
1.349 +
1.350 +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.351 +
1.352 +# undef AUX778076_BIND_NESTED_DEFAULT_PARAMS
1.353 +# undef AUX778076_BIND_N_SPEC_PARAMS
1.354 +# undef AUX778076_BIND_N_PARAMS
1.355 +# undef AUX778076_BIND_DEFAULT_PARAMS
1.356 +# undef AUX778076_BIND_PARAMS
1.357 +# undef AUX778076_DMC_PARAM
1.358 +# undef AUX778076_APPLY
1.359 +
1.360 +}}
1.361 +
1.362 +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
1.363 +#endif // BOOST_MPL_BIND_HPP_INCLUDED
1.364 +
1.365 +///// iteration, depth == 1
1.366 +
1.367 +#elif BOOST_PP_ITERATION_DEPTH() == 1
1.368 +
1.369 +# define i_ BOOST_PP_FRAME_ITERATION(1)
1.370 +
1.371 +#if defined(AUX778076_SPEC_NAME)
1.372 +
1.373 +// lazy metafunction specialization
1.374 +template< template< BOOST_MPL_PP_PARAMS(i_, typename T) > class F, typename Tag >
1.375 +struct BOOST_PP_CAT(quote,i_);
1.376 +
1.377 +template< BOOST_MPL_PP_PARAMS(i_, typename T) > struct AUX778076_SPEC_NAME;
1.378 +
1.379 +template<
1.380 + typename Tag AUX778076_BIND_N_PARAMS(i_, typename T)
1.381 + >
1.382 +struct BOOST_PP_CAT(bind,i_)<
1.383 + BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag>
1.384 + AUX778076_BIND_N_PARAMS(i_,T)
1.385 + >
1.386 +{
1.387 + template<
1.388 + AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)
1.389 + >
1.390 + struct apply
1.391 + {
1.392 + private:
1.393 + typedef mpl::arg<1> n1;
1.394 +# define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))
1.395 +# include BOOST_PP_ITERATE()
1.396 +
1.397 + typedef typename AUX778076_SPEC_NAME<
1.398 + typename t1::type
1.399 + , BOOST_MPL_PP_EXT_PARAMS(2, BOOST_PP_INC(i_), t)
1.400 + >::type f_;
1.401 +
1.402 + public:
1.403 + typedef typename f_::type type;
1.404 + };
1.405 +};
1.406 +
1.407 +#undef AUX778076_SPEC_NAME
1.408 +
1.409 +#else // AUX778076_SPEC_NAME
1.410 +
1.411 +template<
1.412 + typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
1.413 + >
1.414 +struct BOOST_PP_CAT(bind,i_)
1.415 +{
1.416 + template<
1.417 + AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)
1.418 + >
1.419 + struct apply
1.420 + {
1.421 + private:
1.422 +# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
1.423 +
1.424 + typedef aux::replace_unnamed_arg< F,mpl::arg<1> > r0;
1.425 + typedef typename r0::type a0;
1.426 + typedef typename r0::next n1;
1.427 + typedef typename aux::resolve_bind_arg<a0,AUX778076_BIND_PARAMS(U)>::type f_;
1.428 + ///
1.429 +# else
1.430 + typedef typename aux::resolve_bind_arg<F,AUX778076_BIND_PARAMS(U)>::type f_;
1.431 +
1.432 +# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
1.433 +
1.434 +# if i_ > 0
1.435 +# define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))
1.436 +# include BOOST_PP_ITERATE()
1.437 +# endif
1.438 +
1.439 + public:
1.440 +
1.441 +# define AUX778076_ARG(unused, i_, t) \
1.442 + BOOST_PP_COMMA_IF(i_) \
1.443 + typename BOOST_PP_CAT(t,BOOST_PP_INC(i_))::type \
1.444 +/**/
1.445 +
1.446 + typedef typename BOOST_PP_CAT(apply_wrap,i_)<
1.447 + f_
1.448 + BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t)
1.449 + >::type type;
1.450 +
1.451 +# undef AUX778076_ARG
1.452 + };
1.453 +};
1.454 +
1.455 +namespace aux {
1.456 +
1.457 +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1.458 +
1.459 +template<
1.460 + typename F AUX778076_BIND_N_PARAMS(i_, typename T), AUX778076_BIND_PARAMS(typename U)
1.461 + >
1.462 +struct resolve_bind_arg<
1.463 + BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>,AUX778076_BIND_PARAMS(U)
1.464 + >
1.465 +{
1.466 + typedef BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)> f_;
1.467 + typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;
1.468 +};
1.469 +
1.470 +#else
1.471 +
1.472 +template<
1.473 + typename F AUX778076_BIND_N_PARAMS(i_, typename T)
1.474 + >
1.475 +aux::yes_tag
1.476 +is_bind_helper(BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>*);
1.477 +
1.478 +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.479 +
1.480 +} // namespace aux
1.481 +
1.482 +BOOST_MPL_AUX_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))
1.483 +BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))
1.484 +
1.485 +# if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
1.486 +# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1.487 +
1.488 +#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
1.489 +/// primary template (not a specialization!)
1.490 +template<
1.491 + typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
1.492 + >
1.493 +struct bind
1.494 + : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >
1.495 +{
1.496 +};
1.497 +#else
1.498 +template<
1.499 + typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
1.500 + >
1.501 +struct bind< F AUX778076_BIND_N_SPEC_PARAMS(i_, T, na) >
1.502 + : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >
1.503 +{
1.504 +};
1.505 +#endif
1.506 +
1.507 +# else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.508 +
1.509 +namespace aux {
1.510 +
1.511 +template<>
1.512 +struct bind_chooser<i_>
1.513 +{
1.514 + template<
1.515 + typename F, AUX778076_BIND_PARAMS(typename T)
1.516 + >
1.517 + struct result_
1.518 + {
1.519 + typedef BOOST_PP_CAT(bind,i_)< F AUX778076_BIND_N_PARAMS(i_,T) > type;
1.520 + };
1.521 +};
1.522 +
1.523 +} // namespace aux
1.524 +
1.525 +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.526 +# endif // BOOST_MPL_CFG_NO_BIND_TEMPLATE
1.527 +
1.528 +#endif // AUX778076_SPEC_NAME
1.529 +
1.530 +# undef i_
1.531 +
1.532 +///// iteration, depth == 2
1.533 +
1.534 +#elif BOOST_PP_ITERATION_DEPTH() == 2
1.535 +
1.536 +# define j_ BOOST_PP_FRAME_ITERATION(2)
1.537 +# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
1.538 +
1.539 + typedef aux::replace_unnamed_arg< BOOST_PP_CAT(T,j_),BOOST_PP_CAT(n,j_) > BOOST_PP_CAT(r,j_);
1.540 + typedef typename BOOST_PP_CAT(r,j_)::type BOOST_PP_CAT(a,j_);
1.541 + typedef typename BOOST_PP_CAT(r,j_)::next BOOST_PP_CAT(n,BOOST_PP_INC(j_));
1.542 + typedef aux::resolve_bind_arg<BOOST_PP_CAT(a,j_), AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);
1.543 + ///
1.544 +# else
1.545 + typedef aux::resolve_bind_arg< BOOST_PP_CAT(T,j_),AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);
1.546 +
1.547 +# endif
1.548 +# undef j_
1.549 +
1.550 +#endif // BOOST_PP_IS_ITERATING