Fixes for VS 2008
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / bcc_pre590 / basic_bind.hpp
1 \r
2 // Copyright Peter Dimov 2001\r
3 // Copyright Aleksey Gurtovoy 2001-2004\r
4 //\r
5 // Distributed under the Boost Software License, Version 1.0. \r
6 // (See accompanying file LICENSE_1_0.txt or copy at \r
7 // http://www.boost.org/LICENSE_1_0.txt)\r
8 //\r
9 \r
10 // *Preprocessed* version of the main "basic_bind.hpp" header\r
11 // -- DO NOT modify by hand!\r
12 \r
13 namespace boost { namespace mpl {\r
14 \r
15 namespace aux {\r
16 \r
17 template<\r
18       typename T, typename U1, typename U2, typename U3, typename U4\r
19     , typename U5\r
20     >\r
21 struct resolve_bind_arg\r
22 {\r
23     typedef T type;\r
24 };\r
25 \r
26 template<\r
27       int N, typename U1, typename U2, typename U3, typename U4, typename U5\r
28     >\r
29 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\r
30 {\r
31     typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\r
32 };\r
33 \r
34 } // namespace aux\r
35 \r
36 template<\r
37       typename F\r
38     >\r
39 struct bind0\r
40 {\r
41     template<\r
42           typename U1, typename U2, typename U3, typename U4, typename U5\r
43         >\r
44     struct apply\r
45     {\r
46      private:\r
47         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
48 \r
49      public:\r
50         typedef typename apply_wrap0<\r
51               f_\r
52             >::type type;\r
53 \r
54     };\r
55 };\r
56 \r
57 namespace aux {\r
58 \r
59 template<\r
60       typename F, typename U1, typename U2, typename U3, typename U4\r
61     , typename U5\r
62     >\r
63 struct resolve_bind_arg<\r
64       bind0<F>, U1, U2, U3, U4, U5\r
65     >\r
66 {\r
67     typedef bind0<F> f_;\r
68     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
69 };\r
70 \r
71 } // namespace aux\r
72 \r
73 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)\r
74 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\r
75 \r
76 template<\r
77       typename F, typename T1\r
78     >\r
79 struct bind1\r
80 {\r
81     template<\r
82           typename U1, typename U2, typename U3, typename U4, typename U5\r
83         >\r
84     struct apply\r
85     {\r
86      private:\r
87         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
88         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
89 \r
90      public:\r
91         typedef typename apply_wrap1<\r
92               f_\r
93             , typename t1::type\r
94             >::type type;\r
95 \r
96     };\r
97 };\r
98 \r
99 namespace aux {\r
100 \r
101 template<\r
102       typename F, typename T1, typename U1, typename U2, typename U3\r
103     , typename U4, typename U5\r
104     >\r
105 struct resolve_bind_arg<\r
106       bind1< F,T1 >, U1, U2, U3, U4, U5\r
107     >\r
108 {\r
109     typedef bind1< F,T1 > f_;\r
110     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
111 };\r
112 \r
113 } // namespace aux\r
114 \r
115 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)\r
116 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\r
117 \r
118 template<\r
119       typename F, typename T1, typename T2\r
120     >\r
121 struct bind2\r
122 {\r
123     template<\r
124           typename U1, typename U2, typename U3, typename U4, typename U5\r
125         >\r
126     struct apply\r
127     {\r
128      private:\r
129         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
130         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
131         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
132 \r
133      public:\r
134         typedef typename apply_wrap2<\r
135               f_\r
136             , typename t1::type, typename t2::type\r
137             >::type type;\r
138 \r
139     };\r
140 };\r
141 \r
142 namespace aux {\r
143 \r
144 template<\r
145       typename F, typename T1, typename T2, typename U1, typename U2\r
146     , typename U3, typename U4, typename U5\r
147     >\r
148 struct resolve_bind_arg<\r
149       bind2< F,T1,T2 >, U1, U2, U3, U4, U5\r
150     >\r
151 {\r
152     typedef bind2< F,T1,T2 > f_;\r
153     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
154 };\r
155 \r
156 } // namespace aux\r
157 \r
158 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)\r
159 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\r
160 \r
161 template<\r
162       typename F, typename T1, typename T2, typename T3\r
163     >\r
164 struct bind3\r
165 {\r
166     template<\r
167           typename U1, typename U2, typename U3, typename U4, typename U5\r
168         >\r
169     struct apply\r
170     {\r
171      private:\r
172         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
173         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
174         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
175         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
176 \r
177      public:\r
178         typedef typename apply_wrap3<\r
179               f_\r
180             , typename t1::type, typename t2::type, typename t3::type\r
181             >::type type;\r
182 \r
183     };\r
184 };\r
185 \r
186 namespace aux {\r
187 \r
188 template<\r
189       typename F, typename T1, typename T2, typename T3, typename U1\r
190     , typename U2, typename U3, typename U4, typename U5\r
191     >\r
192 struct resolve_bind_arg<\r
193       bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\r
194     >\r
195 {\r
196     typedef bind3< F,T1,T2,T3 > f_;\r
197     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
198 };\r
199 \r
200 } // namespace aux\r
201 \r
202 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)\r
203 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\r
204 \r
205 template<\r
206       typename F, typename T1, typename T2, typename T3, typename T4\r
207     >\r
208 struct bind4\r
209 {\r
210     template<\r
211           typename U1, typename U2, typename U3, typename U4, typename U5\r
212         >\r
213     struct apply\r
214     {\r
215      private:\r
216         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
217         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
218         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
219         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
220         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\r
221 \r
222      public:\r
223         typedef typename apply_wrap4<\r
224               f_\r
225             , typename t1::type, typename t2::type, typename t3::type\r
226             , typename t4::type\r
227             >::type type;\r
228 \r
229     };\r
230 };\r
231 \r
232 namespace aux {\r
233 \r
234 template<\r
235       typename F, typename T1, typename T2, typename T3, typename T4\r
236     , typename U1, typename U2, typename U3, typename U4, typename U5\r
237     >\r
238 struct resolve_bind_arg<\r
239       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\r
240     >\r
241 {\r
242     typedef bind4< F,T1,T2,T3,T4 > f_;\r
243     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
244 };\r
245 \r
246 } // namespace aux\r
247 \r
248 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)\r
249 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\r
250 \r
251 template<\r
252       typename F, typename T1, typename T2, typename T3, typename T4\r
253     , typename T5\r
254     >\r
255 struct bind5\r
256 {\r
257     template<\r
258           typename U1, typename U2, typename U3, typename U4, typename U5\r
259         >\r
260     struct apply\r
261     {\r
262      private:\r
263         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
264         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
265         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
266         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
267         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\r
268         typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\r
269 \r
270      public:\r
271         typedef typename apply_wrap5<\r
272               f_\r
273             , typename t1::type, typename t2::type, typename t3::type\r
274             , typename t4::type, typename t5::type\r
275             >::type type;\r
276 \r
277     };\r
278 };\r
279 \r
280 namespace aux {\r
281 \r
282 template<\r
283       typename F, typename T1, typename T2, typename T3, typename T4\r
284     , typename T5, typename U1, typename U2, typename U3, typename U4\r
285     , typename U5\r
286     >\r
287 struct resolve_bind_arg<\r
288       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\r
289     >\r
290 {\r
291     typedef bind5< F,T1,T2,T3,T4,T5 > f_;\r
292     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
293 };\r
294 \r
295 } // namespace aux\r
296 \r
297 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)\r
298 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\r
299 }}\r
300 \r