Merge c:/dyninst/pc_bluegene/dyninst into dyn_pc_integration
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / msvc60 / 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< int N >
63 aux::yes_tag is_bind_helper(arg<N>*);
64
65 template< bool is_ref_  = true >
66 struct is_bind_template_impl
67 {
68     template< typename T > struct result_
69     {
70         BOOST_STATIC_CONSTANT(bool, value  = false);
71     };
72 };
73
74 template<>
75 struct is_bind_template_impl<false>
76 {
77     template< typename T > struct result_
78     {
79         BOOST_STATIC_CONSTANT(bool, value =
80               sizeof(aux::is_bind_helper(static_cast<T*>(0)))
81                 == sizeof(aux::yes_tag)
82             );
83     };
84 };
85
86 template< typename T > struct is_bind_template
87     : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
88         ::template result_<T>
89 {
90 };
91
92 } // namespace aux
93
94 template<
95       typename F
96     >
97 struct bind0
98 {
99     template<
100           typename U1 = na, typename U2 = na, typename U3 = na
101         , typename U4 = na, typename U5 = na
102         >
103     struct apply
104     {
105      private:
106         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
107
108      public:
109         typedef typename apply_wrap0<
110               f_
111             >::type type;
112
113     };
114 };
115
116 namespace aux {
117
118 template<
119       typename F
120     >
121 aux::yes_tag
122 is_bind_helper(bind0<F>*);
123
124 } // namespace aux
125
126 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
127 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
128
129 template<
130       typename F, typename T1
131     >
132 struct bind1
133 {
134     template<
135           typename U1 = na, typename U2 = na, typename U3 = na
136         , typename U4 = na, typename U5 = na
137         >
138     struct apply
139     {
140      private:
141         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
142         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
143
144      public:
145         typedef typename apply_wrap1<
146               f_
147             , typename t1::type
148             >::type type;
149
150     };
151 };
152
153 namespace aux {
154
155 template<
156       typename F, typename T1
157     >
158 aux::yes_tag
159 is_bind_helper(bind1< F,T1 >*);
160
161 } // namespace aux
162
163 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
164 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
165
166 template<
167       typename F, typename T1, typename T2
168     >
169 struct bind2
170 {
171     template<
172           typename U1 = na, typename U2 = na, typename U3 = na
173         , typename U4 = na, typename U5 = na
174         >
175     struct apply
176     {
177      private:
178         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
179         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
180         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
181
182      public:
183         typedef typename apply_wrap2<
184               f_
185             , typename t1::type, typename t2::type
186             >::type type;
187
188     };
189 };
190
191 namespace aux {
192
193 template<
194       typename F, typename T1, typename T2
195     >
196 aux::yes_tag
197 is_bind_helper(bind2< F,T1,T2 >*);
198
199 } // namespace aux
200
201 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
202 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
203
204 template<
205       typename F, typename T1, typename T2, typename T3
206     >
207 struct bind3
208 {
209     template<
210           typename U1 = na, typename U2 = na, typename U3 = na
211         , typename U4 = na, typename U5 = na
212         >
213     struct apply
214     {
215      private:
216         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
217         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
218         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
219         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
220
221      public:
222         typedef typename apply_wrap3<
223               f_
224             , typename t1::type, typename t2::type, typename t3::type
225             >::type type;
226
227     };
228 };
229
230 namespace aux {
231
232 template<
233       typename F, typename T1, typename T2, typename T3
234     >
235 aux::yes_tag
236 is_bind_helper(bind3< F,T1,T2,T3 >*);
237
238 } // namespace aux
239
240 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
241 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
242
243 template<
244       typename F, typename T1, typename T2, typename T3, typename T4
245     >
246 struct bind4
247 {
248     template<
249           typename U1 = na, typename U2 = na, typename U3 = na
250         , typename U4 = na, typename U5 = na
251         >
252     struct apply
253     {
254      private:
255         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
256         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
257         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
258         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
259         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
260
261      public:
262         typedef typename apply_wrap4<
263               f_
264             , typename t1::type, typename t2::type, typename t3::type
265             , typename t4::type
266             >::type type;
267
268     };
269 };
270
271 namespace aux {
272
273 template<
274       typename F, typename T1, typename T2, typename T3, typename T4
275     >
276 aux::yes_tag
277 is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
278
279 } // namespace aux
280
281 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
282 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
283
284 template<
285       typename F, typename T1, typename T2, typename T3, typename T4
286     , typename T5
287     >
288 struct bind5
289 {
290     template<
291           typename U1 = na, typename U2 = na, typename U3 = na
292         , typename U4 = na, typename U5 = na
293         >
294     struct apply
295     {
296      private:
297         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
298         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
299         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
300         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
301         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
302         typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
303
304      public:
305         typedef typename apply_wrap5<
306               f_
307             , typename t1::type, typename t2::type, typename t3::type
308             , typename t4::type, typename t5::type
309             >::type type;
310
311     };
312 };
313
314 namespace aux {
315
316 template<
317       typename F, typename T1, typename T2, typename T3, typename T4
318     , typename T5
319     >
320 aux::yes_tag
321 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
322
323 } // namespace aux
324
325 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
326 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
327 }}
328