2 #if !defined(BOOST_PP_IS_ITERATING)
6 #ifndef BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
7 #define BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
21 #if !defined(BOOST_MPL_PREPROCESSING_MODE)
30 #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
31 && !defined(BOOST_MPL_PREPROCESSING_MODE)
33 # define BOOST_MPL_PREPROCESSED_HEADER apply_wrap.hpp
41 # include <boost/mpl/aux_/preprocessor/add.hpp>
58 # define AUX778076_APPLY_WRAP_PARAMS(n, param) \
59 BOOST_MPL_PP_PARAMS(n, param) \
62 # define AUX778076_APPLY_WRAP_SPEC_PARAMS(n, param) \
63 BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \
67 #define BOOST_PP_ITERATION_PARAMS_1 \
68 (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_wrap.hpp>))
69 #include BOOST_PP_ITERATE()
72 # undef AUX778076_APPLY_WRAP_SPEC_PARAMS
73 # undef AUX778076_APPLY_WRAP_PARAMS
77 #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
78 #endif // BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
84 #else // BOOST_PP_IS_ITERATING
85 #if BOOST_PP_ITERATION_DEPTH() == 1
87 # define i_ BOOST_PP_FRAME_ITERATION(1)
89 # if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
92 #define AUX778076_MSVC_DTW_NAME BOOST_PP_CAT(msvc_apply,i_)
93 #define AUX778076_MSVC_DTW_ORIGINAL_NAME apply
94 #define AUX778076_MSVC_DTW_ARITY i_
95 #include <boost/mpl/aux_/msvc_dtw.hpp>
103 typedef typename BOOST_PP_CAT(msvc_apply,i_)<F>::template result_<
104 AUX778076_APPLY_WRAP_PARAMS(i_,
T)
108 # elif defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
116 #define BOOST_PP_ITERATION_PARAMS_2 \
117 (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY - i_, <boost/mpl/apply_wrap.hpp>))
118 #include BOOST_PP_ITERATE()
125 ::boost::mpl::aux::arity<F,i_>::value
127 BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)
144 : F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_,
T) >
148 typedef typename F::template apply<
149 AUX778076_APPLY_WRAP_PARAMS(i_,
T)
154 #if i_ == 0 && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
155 template<
typename F >
162 # endif // workarounds
164 #if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
167 struct BOOST_PP_CAT(apply_wrap,i_)<AUX778076_APPLY_WRAP_SPEC_PARAMS(i_, int)>
177 #elif BOOST_PP_ITERATION_DEPTH() == 2
179 # define j_ BOOST_PP_FRAME_ITERATION(2)
181 #if i_ == 0 && j_ == 0 \
182 && defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \
183 && !defined(BOOST_MPL_CFG_NO_HAS_APPLY)
185 template<
typename F,
bool F_has_apply >
186 struct apply_wrap_impl0_bcb {
187 typedef typename F::template apply< na >
type;
190 template<
typename F >
191 struct apply_wrap_impl0_bcb< F, true > {
192 typedef typename F::apply
type;
199 BOOST_MPL_PP_ADD(i_, j_)
212 BOOST_MPL_PP_ADD(i_, j_)
217 typedef typename F::template apply<
218 AUX778076_APPLY_WRAP_PARAMS(i_,
T)
219 #if i_ == 0 && j_ == 0
233 #endif // BOOST_PP_ITERATION_DEPTH()
234 #endif // BOOST_PP_IS_ITERATING