]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/bind.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
2a045c11770dd6ef1e9311a876b31d4eadd63126
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / bind.hpp
1 \r
2 #if !defined(BOOST_PP_IS_ITERATING)\r
3 \r
4 ///// header body\r
5 \r
6 #ifndef BOOST_MPL_BIND_HPP_INCLUDED\r
7 #define BOOST_MPL_BIND_HPP_INCLUDED\r
8 \r
9 // Copyright Peter Dimov 2001\r
10 // Copyright Aleksey Gurtovoy 2001-2004\r
11 //\r
12 // Distributed under the Boost Software License, Version 1.0. \r
13 // (See accompanying file LICENSE_1_0.txt or copy at \r
14 // http://www.boost.org/LICENSE_1_0.txt)\r
15 //\r
16 // See http://www.boost.org/libs/mpl for documentation.\r
17 \r
18 // $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
19 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
20 // $Revision: 49267 $\r
21 \r
22 #if !defined(BOOST_MPL_PREPROCESSING_MODE)\r
23 #   include <boost/mpl/bind_fwd.hpp>\r
24 #   include <boost/mpl/placeholders.hpp>\r
25 #   include <boost/mpl/next.hpp>\r
26 #   include <boost/mpl/protect.hpp>\r
27 #   include <boost/mpl/apply_wrap.hpp>\r
28 #   include <boost/mpl/limits/arity.hpp>\r
29 #   include <boost/mpl/aux_/na.hpp>\r
30 #   include <boost/mpl/aux_/arity_spec.hpp>\r
31 #   include <boost/mpl/aux_/type_wrapper.hpp>\r
32 #   include <boost/mpl/aux_/yes_no.hpp>\r
33 #   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
34 #       include <boost/type_traits/is_reference.hpp>\r
35 #   endif \r
36 #endif\r
37 \r
38 #include <boost/mpl/aux_/config/bind.hpp>\r
39 #include <boost/mpl/aux_/config/static_constant.hpp>\r
40 #include <boost/mpl/aux_/config/use_preprocessed.hpp>\r
41 \r
42 #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\r
43     && !defined(BOOST_MPL_PREPROCESSING_MODE)\r
44 \r
45 #   if defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\r
46 #       define BOOST_MPL_PREPROCESSED_HEADER basic_bind.hpp\r
47 #   else\r
48 #       define BOOST_MPL_PREPROCESSED_HEADER bind.hpp\r
49 #   endif\r
50 #   include <boost/mpl/aux_/include_preprocessed.hpp>\r
51 \r
52 #else\r
53 \r
54 #   include <boost/mpl/aux_/preprocessor/params.hpp>\r
55 #   include <boost/mpl/aux_/preprocessor/default_params.hpp>\r
56 #   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\r
57 #   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\r
58 #   include <boost/mpl/aux_/preprocessor/ext_params.hpp>\r
59 #   include <boost/mpl/aux_/preprocessor/repeat.hpp>\r
60 #   include <boost/mpl/aux_/preprocessor/enum.hpp>\r
61 #   include <boost/mpl/aux_/preprocessor/add.hpp>\r
62 #   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\r
63 #   include <boost/mpl/aux_/config/ctps.hpp>\r
64 #   include <boost/mpl/aux_/config/ttp.hpp>\r
65 #   include <boost/mpl/aux_/config/dtp.hpp>\r
66 #   include <boost/mpl/aux_/nttp_decl.hpp>\r
67 \r
68 #   include <boost/preprocessor/iterate.hpp>\r
69 #   include <boost/preprocessor/comma_if.hpp>\r
70 #   include <boost/preprocessor/cat.hpp>\r
71 #   include <boost/preprocessor/inc.hpp>\r
72 \r
73 namespace boost { namespace mpl {\r
74 \r
75 // local macros, #undef-ined at the end of the header\r
76 #   define AUX778076_APPLY \\r
77     BOOST_PP_CAT(apply_wrap,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \\r
78     /**/\r
79 \r
80 #   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\r
81 #       define AUX778076_DMC_PARAM() , int dummy_\r
82 #   else\r
83 #       define AUX778076_DMC_PARAM()\r
84 #   endif\r
85 \r
86 #   define AUX778076_BIND_PARAMS(param) \\r
87     BOOST_MPL_PP_PARAMS( \\r
88           BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\r
89         , param \\r
90         ) \\r
91     /**/\r
92 \r
93 #   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \\r
94     BOOST_MPL_PP_DEFAULT_PARAMS( \\r
95           BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\r
96         , param \\r
97         , value \\r
98         ) \\r
99     /**/\r
100 \r
101 #   define AUX778076_BIND_N_PARAMS(n, param) \\r
102     BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \\r
103     /**/\r
104 \r
105 #   define AUX778076_BIND_N_SPEC_PARAMS(n, param, def) \\r
106     BOOST_PP_COMMA_IF(n) \\r
107     BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \\r
108     /**/\r
109 \r
110 #if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\r
111 #   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \\r
112     AUX778076_BIND_DEFAULT_PARAMS(param, value) \\r
113     /**/\r
114 #else\r
115 #   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \\r
116     AUX778076_BIND_PARAMS(param) \\r
117     /**/\r
118 #endif\r
119 \r
120 namespace aux {\r
121 \r
122 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
123 \r
124 template<\r
125       typename T, AUX778076_BIND_PARAMS(typename U)\r
126     >\r
127 struct resolve_bind_arg\r
128 {\r
129     typedef T type;\r
130 };\r
131 \r
132 #   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\r
133 \r
134 template<\r
135       typename T\r
136     , typename Arg\r
137     >\r
138 struct replace_unnamed_arg\r
139 {\r
140     typedef Arg next;\r
141     typedef T type;\r
142 };\r
143 \r
144 template<\r
145       typename Arg\r
146     >\r
147 struct replace_unnamed_arg< arg<-1>,Arg >\r
148 {\r
149     typedef typename Arg::next next;\r
150     typedef Arg type;\r
151 };\r
152 \r
153 #   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\r
154 \r
155 template<\r
156       BOOST_MPL_AUX_NTTP_DECL(int, N), AUX778076_BIND_PARAMS(typename U)\r
157     >\r
158 struct resolve_bind_arg< arg<N>,AUX778076_BIND_PARAMS(U) >\r
159 {\r
160     typedef typename AUX778076_APPLY<mpl::arg<N>, AUX778076_BIND_PARAMS(U)>::type type;\r
161 };\r
162 \r
163 #if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\r
164 template<\r
165       typename F, AUX778076_BIND_PARAMS(typename T), AUX778076_BIND_PARAMS(typename U)\r
166     >\r
167 struct resolve_bind_arg< bind<F,AUX778076_BIND_PARAMS(T)>,AUX778076_BIND_PARAMS(U) >\r
168 {\r
169     typedef bind<F,AUX778076_BIND_PARAMS(T)> f_;\r
170     typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;\r
171 };\r
172 #endif\r
173 \r
174 #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
175 \r
176 // agurt, 15/jan/02: it's not a intended to be used as a function class, and \r
177 // MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't\r
178 // work), so I went with the 'result_' here, and in all other similar cases\r
179 template< bool >\r
180 struct resolve_arg_impl\r
181 {\r
182     template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_\r
183     {\r
184         typedef T type;\r
185     };\r
186 };\r
187 \r
188 template<> \r
189 struct resolve_arg_impl<true>\r
190 {\r
191     template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_\r
192     {\r
193         typedef typename AUX778076_APPLY<\r
194               T\r
195             , AUX778076_BIND_PARAMS(U)\r
196             >::type type;\r
197     };\r
198 };\r
199 \r
200 // for 'resolve_bind_arg'\r
201 template< typename T > struct is_bind_template;\r
202 \r
203 template< \r
204       typename T, AUX778076_BIND_PARAMS(typename U)\r
205     >\r
206 struct resolve_bind_arg\r
207     : resolve_arg_impl< is_bind_template<T>::value >\r
208             ::template result_< T,AUX778076_BIND_PARAMS(U) >\r
209 {\r
210 };\r
211 \r
212 #   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\r
213 \r
214 template< typename T > \r
215 struct replace_unnamed_arg_impl\r
216 {\r
217     template< typename Arg > struct result_\r
218     {\r
219         typedef Arg next;\r
220         typedef T type;\r
221     };\r
222 };\r
223 \r
224 template<> \r
225 struct replace_unnamed_arg_impl< arg<-1> >\r
226 {\r
227     template< typename Arg > struct result_\r
228     {\r
229         typedef typename next<Arg>::type next;\r
230         typedef Arg type;\r
231     };\r
232 };\r
233 \r
234 template< typename T, typename Arg > \r
235 struct replace_unnamed_arg\r
236     : replace_unnamed_arg_impl<T>::template result_<Arg>\r
237 {\r
238 };\r
239 \r
240 #   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\r
241 \r
242 // agurt, 10/mar/02: the forward declaration has to appear before any of\r
243 // 'is_bind_helper' overloads, otherwise MSVC6.5 issues an ICE on it\r
244 template< BOOST_MPL_AUX_NTTP_DECL(int, arity_) > struct bind_chooser;\r
245 \r
246 aux::no_tag is_bind_helper(...);\r
247 template< typename T > aux::no_tag is_bind_helper(protect<T>*);\r
248 \r
249 // overload for "main" form\r
250 // agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload \r
251 // in case if we use 'aux::type_wrapper< bind<...> >' here, and all \r
252 // 'bind' instantiations form a complete type anyway\r
253 #if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\r
254 template<\r
255       typename F, AUX778076_BIND_PARAMS(typename T)\r
256     >\r
257 aux::yes_tag is_bind_helper(bind<F,AUX778076_BIND_PARAMS(T)>*);\r
258 #endif\r
259 \r
260 template< BOOST_MPL_AUX_NTTP_DECL(int, N) >\r
261 aux::yes_tag is_bind_helper(arg<N>*);\r
262 \r
263 template< bool is_ref_ = true >\r
264 struct is_bind_template_impl\r
265 {\r
266     template< typename T > struct result_\r
267     {\r
268         BOOST_STATIC_CONSTANT(bool, value = false);\r
269     };\r
270 };\r
271 \r
272 template<>\r
273 struct is_bind_template_impl<false>\r
274 {\r
275     template< typename T > struct result_\r
276     {\r
277         BOOST_STATIC_CONSTANT(bool, value = \r
278               sizeof(aux::is_bind_helper(static_cast<T*>(0))) \r
279                 == sizeof(aux::yes_tag)\r
280             );\r
281     };\r
282 };\r
283 \r
284 template< typename T > struct is_bind_template\r
285     : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\r
286         ::template result_<T>\r
287 {\r
288 };\r
289 \r
290 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
291 \r
292 } // namespace aux\r
293 \r
294 \r
295 #define BOOST_PP_ITERATION_PARAMS_1 \\r
296     (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind.hpp>))\r
297 #include BOOST_PP_ITERATE()\r
298 \r
299 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\r
300     && !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)\r
301 /// if_/eval_if specializations\r
302 #   define AUX778076_SPEC_NAME if_\r
303 #   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))\r
304 #   include BOOST_PP_ITERATE()\r
305 \r
306 #if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\r
307 #   define AUX778076_SPEC_NAME eval_if\r
308 #   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))\r
309 #   include BOOST_PP_ITERATE()\r
310 #endif\r
311 #endif\r
312 \r
313 // real C++ version is already taken care of\r
314 #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\r
315     && !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\r
316 \r
317 namespace aux {\r
318 // apply_count_args\r
319 #define AUX778076_COUNT_ARGS_PREFIX bind\r
320 #define AUX778076_COUNT_ARGS_DEFAULT na\r
321 #define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\r
322 #include <boost/mpl/aux_/count_args.hpp>\r
323 }\r
324 \r
325 // bind\r
326 template<\r
327       typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM()\r
328     >\r
329 struct bind\r
330     : aux::bind_chooser<\r
331           aux::bind_count_args<AUX778076_BIND_PARAMS(T)>::value\r
332         >::template result_< F,AUX778076_BIND_PARAMS(T) >::type\r
333 {\r
334 };\r
335 \r
336 BOOST_MPL_AUX_ARITY_SPEC(\r
337       BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\r
338     , bind\r
339     )\r
340 \r
341 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(\r
342       BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\r
343     , bind\r
344     )\r
345 \r
346 \r
347 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
348 \r
349 #   undef AUX778076_BIND_NESTED_DEFAULT_PARAMS\r
350 #   undef AUX778076_BIND_N_SPEC_PARAMS\r
351 #   undef AUX778076_BIND_N_PARAMS\r
352 #   undef AUX778076_BIND_DEFAULT_PARAMS\r
353 #   undef AUX778076_BIND_PARAMS\r
354 #   undef AUX778076_DMC_PARAM\r
355 #   undef AUX778076_APPLY\r
356 \r
357 }}\r
358 \r
359 #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\r
360 #endif // BOOST_MPL_BIND_HPP_INCLUDED\r
361 \r
362 ///// iteration, depth == 1\r
363 \r
364 // For gcc 4.4 compatability, we must include the\r
365 // BOOST_PP_ITERATION_DEPTH test inside an #else clause.\r
366 #else // BOOST_PP_IS_ITERATING\r
367 #if BOOST_PP_ITERATION_DEPTH() == 1\r
368 \r
369 #   define i_ BOOST_PP_FRAME_ITERATION(1)\r
370 \r
371 #if defined(AUX778076_SPEC_NAME)\r
372 \r
373 // lazy metafunction specialization\r
374 template< template< BOOST_MPL_PP_PARAMS(i_, typename T) > class F, typename Tag >\r
375 struct BOOST_PP_CAT(quote,i_);\r
376 \r
377 template< BOOST_MPL_PP_PARAMS(i_, typename T) > struct AUX778076_SPEC_NAME;\r
378 \r
379 template<\r
380       typename Tag AUX778076_BIND_N_PARAMS(i_, typename T)\r
381     >\r
382 struct BOOST_PP_CAT(bind,i_)< \r
383       BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag>\r
384     AUX778076_BIND_N_PARAMS(i_,T)\r
385     >\r
386 {\r
387     template<\r
388           AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)\r
389         >\r
390     struct apply\r
391     {\r
392      private:\r
393         typedef mpl::arg<1> n1;\r
394 #       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))\r
395 #       include BOOST_PP_ITERATE()\r
396 \r
397         typedef typename AUX778076_SPEC_NAME<\r
398               typename t1::type\r
399             , BOOST_MPL_PP_EXT_PARAMS(2, BOOST_PP_INC(i_), t)\r
400             >::type f_;\r
401 \r
402      public:\r
403         typedef typename f_::type type;\r
404     };\r
405 };\r
406 \r
407 #undef AUX778076_SPEC_NAME\r
408 \r
409 #else // AUX778076_SPEC_NAME\r
410 \r
411 template<\r
412       typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\r
413     >\r
414 struct BOOST_PP_CAT(bind,i_)\r
415 {\r
416     template<\r
417           AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)\r
418         >\r
419     struct apply\r
420     {\r
421      private:\r
422 #   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\r
423 \r
424         typedef aux::replace_unnamed_arg< F,mpl::arg<1> > r0;\r
425         typedef typename r0::type a0;\r
426         typedef typename r0::next n1;\r
427         typedef typename aux::resolve_bind_arg<a0,AUX778076_BIND_PARAMS(U)>::type f_;\r
428         ///\r
429 #   else\r
430         typedef typename aux::resolve_bind_arg<F,AUX778076_BIND_PARAMS(U)>::type f_;\r
431 \r
432 #   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\r
433 \r
434 #   if i_ > 0\r
435 #       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))\r
436 #       include BOOST_PP_ITERATE()\r
437 #   endif\r
438 \r
439      public:\r
440 \r
441 #   define AUX778076_ARG(unused, i_, t) \\r
442     BOOST_PP_COMMA_IF(i_) \\r
443     typename BOOST_PP_CAT(t,BOOST_PP_INC(i_))::type \\r
444 /**/\r
445 \r
446         typedef typename BOOST_PP_CAT(apply_wrap,i_)<\r
447               f_ \r
448             BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t)\r
449             >::type type;\r
450 \r
451 #   undef AUX778076_ARG\r
452     };\r
453 };\r
454 \r
455 namespace aux {\r
456 \r
457 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
458 \r
459 template<\r
460       typename F AUX778076_BIND_N_PARAMS(i_, typename T), AUX778076_BIND_PARAMS(typename U)\r
461     >\r
462 struct resolve_bind_arg<\r
463       BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>,AUX778076_BIND_PARAMS(U)\r
464     >\r
465 {\r
466     typedef BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)> f_;\r
467     typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;\r
468 };\r
469 \r
470 #else\r
471 \r
472 template<\r
473       typename F AUX778076_BIND_N_PARAMS(i_, typename T)\r
474     >\r
475 aux::yes_tag\r
476 is_bind_helper(BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>*);\r
477 \r
478 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
479 \r
480 } // namespace aux\r
481 \r
482 BOOST_MPL_AUX_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))\r
483 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))\r
484 \r
485 #   if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\r
486 #   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
487     \r
488 #if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY\r
489 /// primary template (not a specialization!)\r
490 template<\r
491       typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\r
492     >\r
493 struct bind\r
494     : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >\r
495 {\r
496 };\r
497 #else\r
498 template<\r
499       typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\r
500     >\r
501 struct bind< F AUX778076_BIND_N_SPEC_PARAMS(i_, T, na) >\r
502     : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >\r
503 {\r
504 };\r
505 #endif\r
506 \r
507 #   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
508 \r
509 namespace aux {\r
510 \r
511 template<>\r
512 struct bind_chooser<i_>\r
513 {\r
514     template<\r
515           typename F, AUX778076_BIND_PARAMS(typename T)\r
516         >\r
517     struct result_\r
518     {\r
519         typedef BOOST_PP_CAT(bind,i_)< F AUX778076_BIND_N_PARAMS(i_,T) > type;\r
520     };\r
521 };\r
522 \r
523 } // namespace aux\r
524 \r
525 #   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
526 #   endif // BOOST_MPL_CFG_NO_BIND_TEMPLATE\r
527 \r
528 #endif // AUX778076_SPEC_NAME\r
529 \r
530 #   undef i_\r
531 \r
532 ///// iteration, depth == 2\r
533 \r
534 #elif BOOST_PP_ITERATION_DEPTH() == 2\r
535 \r
536 #   define j_ BOOST_PP_FRAME_ITERATION(2)\r
537 #   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\r
538 \r
539         typedef aux::replace_unnamed_arg< BOOST_PP_CAT(T,j_),BOOST_PP_CAT(n,j_) > BOOST_PP_CAT(r,j_);\r
540         typedef typename BOOST_PP_CAT(r,j_)::type BOOST_PP_CAT(a,j_);\r
541         typedef typename BOOST_PP_CAT(r,j_)::next BOOST_PP_CAT(n,BOOST_PP_INC(j_));\r
542         typedef aux::resolve_bind_arg<BOOST_PP_CAT(a,j_), AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);\r
543         ///\r
544 #   else\r
545         typedef aux::resolve_bind_arg< BOOST_PP_CAT(T,j_),AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);\r
546 \r
547 #   endif\r
548 #   undef j_\r
549 \r
550 #endif // BOOST_PP_ITERATION_DEPTH()\r
551 #endif // BOOST_PP_IS_ITERATING\r