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