]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/proto/include/boost/proto/transform/detail/preprocessed/pack_impl.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / proto / include / boost / proto / transform / detail / preprocessed / pack_impl.hpp
CommitLineData
7c673cae
FG
1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file pack_impl.hpp
3 /// Contains helpers for pseudo-pack expansion.
4 //
5 // Copyright 2012 Eric Niebler. Distributed under the Boost
6 // Software License, Version 1.0. (See accompanying file
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 template<typename Fun, typename Cont>
9 struct expand_pattern<1, Fun, Cont>
10 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type>
11 {
12 BOOST_MPL_ASSERT_MSG(
13 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
14 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
15 , (Fun)
16 );
17 };
18 template<typename Ret >
19 struct expand_pattern_rest_0
20 {
21 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void , typename C5 = void , typename C6 = void , typename C7 = void , typename C8 = void , typename C9 = void , typename C10 = void>
22 struct cat;
23 template<typename C0>
24 struct cat<C0>
25 {
26 typedef msvc_fun_workaround<Ret( C0)> type;
27 };
28 template<typename C0 , typename C1>
29 struct cat<C0 , C1>
30 {
31 typedef msvc_fun_workaround<Ret( C0 , C1)> type;
32 };
33 template<typename C0 , typename C1 , typename C2>
34 struct cat<C0 , C1 , C2>
35 {
36 typedef msvc_fun_workaround<Ret( C0 , C1 , C2)> type;
37 };
38 template<typename C0 , typename C1 , typename C2 , typename C3>
39 struct cat<C0 , C1 , C2 , C3>
40 {
41 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3)> type;
42 };
43 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
44 struct cat<C0 , C1 , C2 , C3 , C4>
45 {
46 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3 , C4)> type;
47 };
48 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5>
49 struct cat<C0 , C1 , C2 , C3 , C4 , C5>
50 {
51 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3 , C4 , C5)> type;
52 };
53 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6>
54 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6>
55 {
56 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3 , C4 , C5 , C6)> type;
57 };
58 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7>
59 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7>
60 {
61 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7)> type;
62 };
63 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7 , typename C8>
64 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8>
65 {
66 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8)> type;
67 };
68 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7 , typename C8 , typename C9>
69 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8 , C9>
70 {
71 typedef msvc_fun_workaround<Ret( C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8 , C9)> type;
72 };
73 };
74 template<typename Fun, typename Cont>
75 struct expand_pattern<2, Fun, Cont>
76 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type>
77 {
78 BOOST_MPL_ASSERT_MSG(
79 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
80 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
81 , (Fun)
82 );
83 };
84 template<typename Ret , typename A0>
85 struct expand_pattern_rest_1
86 {
87 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void , typename C5 = void , typename C6 = void , typename C7 = void , typename C8 = void , typename C9 = void>
88 struct cat;
89 template<typename C0>
90 struct cat<C0>
91 {
92 typedef msvc_fun_workaround<Ret(A0 , C0)> type;
93 };
94 template<typename C0 , typename C1>
95 struct cat<C0 , C1>
96 {
97 typedef msvc_fun_workaround<Ret(A0 , C0 , C1)> type;
98 };
99 template<typename C0 , typename C1 , typename C2>
100 struct cat<C0 , C1 , C2>
101 {
102 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2)> type;
103 };
104 template<typename C0 , typename C1 , typename C2 , typename C3>
105 struct cat<C0 , C1 , C2 , C3>
106 {
107 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2 , C3)> type;
108 };
109 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
110 struct cat<C0 , C1 , C2 , C3 , C4>
111 {
112 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2 , C3 , C4)> type;
113 };
114 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5>
115 struct cat<C0 , C1 , C2 , C3 , C4 , C5>
116 {
117 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2 , C3 , C4 , C5)> type;
118 };
119 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6>
120 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6>
121 {
122 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2 , C3 , C4 , C5 , C6)> type;
123 };
124 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7>
125 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7>
126 {
127 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7)> type;
128 };
129 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7 , typename C8>
130 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8>
131 {
132 typedef msvc_fun_workaround<Ret(A0 , C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8)> type;
133 };
134 };
135 template<typename Fun, typename Cont>
136 struct expand_pattern<3, Fun, Cont>
137 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type>
138 {
139 BOOST_MPL_ASSERT_MSG(
140 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
141 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
142 , (Fun)
143 );
144 };
145 template<typename Ret , typename A0 , typename A1>
146 struct expand_pattern_rest_2
147 {
148 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void , typename C5 = void , typename C6 = void , typename C7 = void , typename C8 = void>
149 struct cat;
150 template<typename C0>
151 struct cat<C0>
152 {
153 typedef msvc_fun_workaround<Ret(A0 , A1 , C0)> type;
154 };
155 template<typename C0 , typename C1>
156 struct cat<C0 , C1>
157 {
158 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1)> type;
159 };
160 template<typename C0 , typename C1 , typename C2>
161 struct cat<C0 , C1 , C2>
162 {
163 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1 , C2)> type;
164 };
165 template<typename C0 , typename C1 , typename C2 , typename C3>
166 struct cat<C0 , C1 , C2 , C3>
167 {
168 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1 , C2 , C3)> type;
169 };
170 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
171 struct cat<C0 , C1 , C2 , C3 , C4>
172 {
173 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1 , C2 , C3 , C4)> type;
174 };
175 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5>
176 struct cat<C0 , C1 , C2 , C3 , C4 , C5>
177 {
178 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1 , C2 , C3 , C4 , C5)> type;
179 };
180 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6>
181 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6>
182 {
183 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1 , C2 , C3 , C4 , C5 , C6)> type;
184 };
185 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6 , typename C7>
186 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7>
187 {
188 typedef msvc_fun_workaround<Ret(A0 , A1 , C0 , C1 , C2 , C3 , C4 , C5 , C6 , C7)> type;
189 };
190 };
191 template<typename Fun, typename Cont>
192 struct expand_pattern<4, Fun, Cont>
193 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type>
194 {
195 BOOST_MPL_ASSERT_MSG(
196 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
197 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
198 , (Fun)
199 );
200 };
201 template<typename Ret , typename A0 , typename A1 , typename A2>
202 struct expand_pattern_rest_3
203 {
204 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void , typename C5 = void , typename C6 = void , typename C7 = void>
205 struct cat;
206 template<typename C0>
207 struct cat<C0>
208 {
209 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0)> type;
210 };
211 template<typename C0 , typename C1>
212 struct cat<C0 , C1>
213 {
214 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0 , C1)> type;
215 };
216 template<typename C0 , typename C1 , typename C2>
217 struct cat<C0 , C1 , C2>
218 {
219 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0 , C1 , C2)> type;
220 };
221 template<typename C0 , typename C1 , typename C2 , typename C3>
222 struct cat<C0 , C1 , C2 , C3>
223 {
224 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0 , C1 , C2 , C3)> type;
225 };
226 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
227 struct cat<C0 , C1 , C2 , C3 , C4>
228 {
229 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0 , C1 , C2 , C3 , C4)> type;
230 };
231 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5>
232 struct cat<C0 , C1 , C2 , C3 , C4 , C5>
233 {
234 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0 , C1 , C2 , C3 , C4 , C5)> type;
235 };
236 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5 , typename C6>
237 struct cat<C0 , C1 , C2 , C3 , C4 , C5 , C6>
238 {
239 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , C0 , C1 , C2 , C3 , C4 , C5 , C6)> type;
240 };
241 };
242 template<typename Fun, typename Cont>
243 struct expand_pattern<5, Fun, Cont>
244 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 4>, Fun>::type>
245 {
246 BOOST_MPL_ASSERT_MSG(
247 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
248 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
249 , (Fun)
250 );
251 };
252 template<typename Ret , typename A0 , typename A1 , typename A2 , typename A3>
253 struct expand_pattern_rest_4
254 {
255 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void , typename C5 = void , typename C6 = void>
256 struct cat;
257 template<typename C0>
258 struct cat<C0>
259 {
260 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , C0)> type;
261 };
262 template<typename C0 , typename C1>
263 struct cat<C0 , C1>
264 {
265 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , C0 , C1)> type;
266 };
267 template<typename C0 , typename C1 , typename C2>
268 struct cat<C0 , C1 , C2>
269 {
270 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , C0 , C1 , C2)> type;
271 };
272 template<typename C0 , typename C1 , typename C2 , typename C3>
273 struct cat<C0 , C1 , C2 , C3>
274 {
275 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , C0 , C1 , C2 , C3)> type;
276 };
277 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
278 struct cat<C0 , C1 , C2 , C3 , C4>
279 {
280 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , C0 , C1 , C2 , C3 , C4)> type;
281 };
282 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4 , typename C5>
283 struct cat<C0 , C1 , C2 , C3 , C4 , C5>
284 {
285 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , C0 , C1 , C2 , C3 , C4 , C5)> type;
286 };
287 };
288 template<typename Fun, typename Cont>
289 struct expand_pattern<6, Fun, Cont>
290 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 4>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 5>, Fun>::type>
291 {
292 BOOST_MPL_ASSERT_MSG(
293 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
294 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
295 , (Fun)
296 );
297 };
298 template<typename Ret , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
299 struct expand_pattern_rest_5
300 {
301 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void , typename C5 = void>
302 struct cat;
303 template<typename C0>
304 struct cat<C0>
305 {
306 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , C0)> type;
307 };
308 template<typename C0 , typename C1>
309 struct cat<C0 , C1>
310 {
311 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , C0 , C1)> type;
312 };
313 template<typename C0 , typename C1 , typename C2>
314 struct cat<C0 , C1 , C2>
315 {
316 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , C0 , C1 , C2)> type;
317 };
318 template<typename C0 , typename C1 , typename C2 , typename C3>
319 struct cat<C0 , C1 , C2 , C3>
320 {
321 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , C0 , C1 , C2 , C3)> type;
322 };
323 template<typename C0 , typename C1 , typename C2 , typename C3 , typename C4>
324 struct cat<C0 , C1 , C2 , C3 , C4>
325 {
326 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , C0 , C1 , C2 , C3 , C4)> type;
327 };
328 };
329 template<typename Fun, typename Cont>
330 struct expand_pattern<7, Fun, Cont>
331 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 4>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 5>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 6>, Fun>::type>
332 {
333 BOOST_MPL_ASSERT_MSG(
334 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
335 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
336 , (Fun)
337 );
338 };
339 template<typename Ret , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
340 struct expand_pattern_rest_6
341 {
342 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void , typename C4 = void>
343 struct cat;
344 template<typename C0>
345 struct cat<C0>
346 {
347 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , C0)> type;
348 };
349 template<typename C0 , typename C1>
350 struct cat<C0 , C1>
351 {
352 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , C0 , C1)> type;
353 };
354 template<typename C0 , typename C1 , typename C2>
355 struct cat<C0 , C1 , C2>
356 {
357 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , C0 , C1 , C2)> type;
358 };
359 template<typename C0 , typename C1 , typename C2 , typename C3>
360 struct cat<C0 , C1 , C2 , C3>
361 {
362 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , C0 , C1 , C2 , C3)> type;
363 };
364 };
365 template<typename Fun, typename Cont>
366 struct expand_pattern<8, Fun, Cont>
367 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 4>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 5>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 6>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 7>, Fun>::type>
368 {
369 BOOST_MPL_ASSERT_MSG(
370 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
371 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
372 , (Fun)
373 );
374 };
375 template<typename Ret , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
376 struct expand_pattern_rest_7
377 {
378 template<typename C0 = void , typename C1 = void , typename C2 = void , typename C3 = void>
379 struct cat;
380 template<typename C0>
381 struct cat<C0>
382 {
383 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , A6 , C0)> type;
384 };
385 template<typename C0 , typename C1>
386 struct cat<C0 , C1>
387 {
388 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , A6 , C0 , C1)> type;
389 };
390 template<typename C0 , typename C1 , typename C2>
391 struct cat<C0 , C1 , C2>
392 {
393 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , A6 , C0 , C1 , C2)> type;
394 };
395 };
396 template<typename Fun, typename Cont>
397 struct expand_pattern<9, Fun, Cont>
398 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 4>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 5>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 6>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 7>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 8>, Fun>::type>
399 {
400 BOOST_MPL_ASSERT_MSG(
401 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
402 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
403 , (Fun)
404 );
405 };
406 template<typename Ret , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
407 struct expand_pattern_rest_8
408 {
409 template<typename C0 = void , typename C1 = void , typename C2 = void>
410 struct cat;
411 template<typename C0>
412 struct cat<C0>
413 {
414 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , C0)> type;
415 };
416 template<typename C0 , typename C1>
417 struct cat<C0 , C1>
418 {
419 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , C0 , C1)> type;
420 };
421 };
422 template<typename Fun, typename Cont>
423 struct expand_pattern<10, Fun, Cont>
424 : Cont::template cat<typename expand_pattern_helper<proto::_child_c< 0>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 1>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 2>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 3>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 4>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 5>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 6>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 7>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 8>, Fun>::type , typename expand_pattern_helper<proto::_child_c< 9>, Fun>::type>
425 {
426 BOOST_MPL_ASSERT_MSG(
427 (expand_pattern_helper<proto::_child_c<0>, Fun>::applied::value)
428 , NO_PACK_EXPRESSION_FOUND_IN_UNPACKING_PATTERN
429 , (Fun)
430 );
431 };
432 template<typename Ret , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
433 struct expand_pattern_rest_9
434 {
435 template<typename C0 = void , typename C1 = void>
436 struct cat;
437 template<typename C0>
438 struct cat<C0>
439 {
440 typedef msvc_fun_workaround<Ret(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , C0)> type;
441 };
442 };