]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mpl/include/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / mpl / include / boost / mpl / aux_ / preprocessed / no_ctps / basic_bind.hpp
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/aux_/basic_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< int arity_ > struct bind_chooser;
58
59 aux::no_tag is_bind_helper(...);
60 template< typename T > aux::no_tag is_bind_helper(protect<T>*);
61
62 template<
63 typename F, typename T1, typename T2, typename T3, typename T4
64 , typename T5
65 >
66 aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
67
68 template< int N >
69 aux::yes_tag is_bind_helper(arg<N>*);
70
71 template< bool is_ref_ = true >
72 struct is_bind_template_impl
73 {
74 template< typename T > struct result_
75 {
76 BOOST_STATIC_CONSTANT(bool, value = false);
77 };
78 };
79
80 template<>
81 struct is_bind_template_impl<false>
82 {
83 template< typename T > struct result_
84 {
85 BOOST_STATIC_CONSTANT(bool, value =
86 sizeof(aux::is_bind_helper(static_cast<T*>(0)))
87 == sizeof(aux::yes_tag)
88 );
89 };
90 };
91
92 template< typename T > struct is_bind_template
93 : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
94 ::template result_<T>
95 {
96 };
97
98 } // namespace aux
99
100 template<
101 typename F
102 >
103 struct bind0
104 {
105 template<
106 typename U1 = na, typename U2 = na, typename U3 = na
107 , typename U4 = na, typename U5 = na
108 >
109 struct apply
110 {
111 private:
112 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
113
114 public:
115 typedef typename apply_wrap0<
116 f_
117 >::type type;
118
119 };
120 };
121
122 namespace aux {
123
124 template<
125 typename F
126 >
127 aux::yes_tag
128 is_bind_helper(bind0<F>*);
129
130 } // namespace aux
131
132 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
133 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
134
135 namespace aux {
136
137 template<>
138 struct bind_chooser<0>
139 {
140 template<
141 typename F, typename T1, typename T2, typename T3, typename T4
142 , typename T5
143 >
144 struct result_
145 {
146 typedef bind0<F> type;
147 };
148 };
149
150 } // namespace aux
151
152 template<
153 typename F, typename T1
154 >
155 struct bind1
156 {
157 template<
158 typename U1 = na, typename U2 = na, typename U3 = na
159 , typename U4 = na, typename U5 = na
160 >
161 struct apply
162 {
163 private:
164 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
165 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
166
167 public:
168 typedef typename apply_wrap1<
169 f_
170 , typename t1::type
171 >::type type;
172
173 };
174 };
175
176 namespace aux {
177
178 template<
179 typename F, typename T1
180 >
181 aux::yes_tag
182 is_bind_helper(bind1< F,T1 >*);
183
184 } // namespace aux
185
186 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
187 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
188
189 namespace aux {
190
191 template<>
192 struct bind_chooser<1>
193 {
194 template<
195 typename F, typename T1, typename T2, typename T3, typename T4
196 , typename T5
197 >
198 struct result_
199 {
200 typedef bind1< F,T1 > type;
201 };
202 };
203
204 } // namespace aux
205
206 template<
207 typename F, typename T1, typename T2
208 >
209 struct bind2
210 {
211 template<
212 typename U1 = na, typename U2 = na, typename U3 = na
213 , typename U4 = na, typename U5 = na
214 >
215 struct apply
216 {
217 private:
218 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
219 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
220 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
221
222 public:
223 typedef typename apply_wrap2<
224 f_
225 , typename t1::type, typename t2::type
226 >::type type;
227
228 };
229 };
230
231 namespace aux {
232
233 template<
234 typename F, typename T1, typename T2
235 >
236 aux::yes_tag
237 is_bind_helper(bind2< F,T1,T2 >*);
238
239 } // namespace aux
240
241 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
242 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
243
244 namespace aux {
245
246 template<>
247 struct bind_chooser<2>
248 {
249 template<
250 typename F, typename T1, typename T2, typename T3, typename T4
251 , typename T5
252 >
253 struct result_
254 {
255 typedef bind2< F,T1,T2 > type;
256 };
257 };
258
259 } // namespace aux
260
261 template<
262 typename F, typename T1, typename T2, typename T3
263 >
264 struct bind3
265 {
266 template<
267 typename U1 = na, typename U2 = na, typename U3 = na
268 , typename U4 = na, typename U5 = na
269 >
270 struct apply
271 {
272 private:
273 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
274 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
275 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
276 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
277
278 public:
279 typedef typename apply_wrap3<
280 f_
281 , typename t1::type, typename t2::type, typename t3::type
282 >::type type;
283
284 };
285 };
286
287 namespace aux {
288
289 template<
290 typename F, typename T1, typename T2, typename T3
291 >
292 aux::yes_tag
293 is_bind_helper(bind3< F,T1,T2,T3 >*);
294
295 } // namespace aux
296
297 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
298 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
299
300 namespace aux {
301
302 template<>
303 struct bind_chooser<3>
304 {
305 template<
306 typename F, typename T1, typename T2, typename T3, typename T4
307 , typename T5
308 >
309 struct result_
310 {
311 typedef bind3< F,T1,T2,T3 > type;
312 };
313 };
314
315 } // namespace aux
316
317 template<
318 typename F, typename T1, typename T2, typename T3, typename T4
319 >
320 struct bind4
321 {
322 template<
323 typename U1 = na, typename U2 = na, typename U3 = na
324 , typename U4 = na, typename U5 = na
325 >
326 struct apply
327 {
328 private:
329 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
330 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
331 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
332 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
333 typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
334
335 public:
336 typedef typename apply_wrap4<
337 f_
338 , typename t1::type, typename t2::type, typename t3::type
339 , typename t4::type
340 >::type type;
341
342 };
343 };
344
345 namespace aux {
346
347 template<
348 typename F, typename T1, typename T2, typename T3, typename T4
349 >
350 aux::yes_tag
351 is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
352
353 } // namespace aux
354
355 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
356 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
357
358 namespace aux {
359
360 template<>
361 struct bind_chooser<4>
362 {
363 template<
364 typename F, typename T1, typename T2, typename T3, typename T4
365 , typename T5
366 >
367 struct result_
368 {
369 typedef bind4< F,T1,T2,T3,T4 > type;
370 };
371 };
372
373 } // namespace aux
374
375 template<
376 typename F, typename T1, typename T2, typename T3, typename T4
377 , typename T5
378 >
379 struct bind5
380 {
381 template<
382 typename U1 = na, typename U2 = na, typename U3 = na
383 , typename U4 = na, typename U5 = na
384 >
385 struct apply
386 {
387 private:
388 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
389 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
390 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
391 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
392 typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
393 typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
394
395 public:
396 typedef typename apply_wrap5<
397 f_
398 , typename t1::type, typename t2::type, typename t3::type
399 , typename t4::type, typename t5::type
400 >::type type;
401
402 };
403 };
404
405 namespace aux {
406
407 template<
408 typename F, typename T1, typename T2, typename T3, typename T4
409 , typename T5
410 >
411 aux::yes_tag
412 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
413
414 } // namespace aux
415
416 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
417 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
418
419 namespace aux {
420
421 template<>
422 struct bind_chooser<5>
423 {
424 template<
425 typename F, typename T1, typename T2, typename T3, typename T4
426 , typename T5
427 >
428 struct result_
429 {
430 typedef bind5< F,T1,T2,T3,T4,T5 > type;
431 };
432 };
433
434 } // namespace aux
435
436 namespace aux {
437
438 template< typename T >
439 struct is_bind_arg
440 {
441 BOOST_STATIC_CONSTANT(bool, value = true);
442 };
443
444 template<>
445 struct is_bind_arg<na>
446 {
447 BOOST_STATIC_CONSTANT(bool, value = false);
448 };
449
450 template<
451 typename T1, typename T2, typename T3, typename T4, typename T5
452 >
453 struct bind_count_args
454 {
455 BOOST_STATIC_CONSTANT(int, value =
456 is_bind_arg<T1>::value + is_bind_arg<T2>::value
457 + is_bind_arg<T3>::value + is_bind_arg<T4>::value
458 + is_bind_arg<T5>::value
459 );
460
461 };
462
463 }
464
465 template<
466 typename F, typename T1, typename T2, typename T3, typename T4
467 , typename T5
468 >
469 struct bind
470 : aux::bind_chooser<
471 aux::bind_count_args< T1,T2,T3,T4,T5 >::value
472 >::template result_< F,T1,T2,T3,T4,T5 >::type
473 {
474 };
475
476 BOOST_MPL_AUX_ARITY_SPEC(
477 6
478 , bind
479 )
480
481 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
482 6
483 , bind
484 )
485 }}
486