1 //
2 // MessagePack for C++ static resolution routine
3 //
4 // Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi
5 //
6 //    Licensed under the Apache License, Version 2.0 (the "License");
7 //    you may not use this file except in compliance with the License.
8 //    You may obtain a copy of the License at
9 //
10 //        http://www.apache.org/licenses/LICENSE-2.0
11 //
12 //    Unless required by applicable law or agreed to in writing, software
13 //    distributed under the License is distributed on an "AS IS" BASIS,
14 //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 //    See the License for the specific language governing permissions and
16 //    limitations under the License.
17 //
18 #ifndef MSGPACK_CPP03_MSGPACK_TUPLE_HPP
19 #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP
20 
21 #include "rpc/msgpack/versioning.hpp"
22 #include "rpc/msgpack/object.hpp"
23 #include "rpc/msgpack/adaptor/adaptor_base.hpp"
24 
25 namespace clmdep_msgpack {
26 
27 /// @cond
MSGPACK_API_VERSION_NAMESPACE(v1)28 MSGPACK_API_VERSION_NAMESPACE(v1) {
29 /// @endcond
30 
31 namespace type {
32 
33 // FIXME operator==
34 // FIXME operator!=
35 
36 
37 /// @cond
38 template <typename A0 = void, typename A1 = void, typename A2 = void, typename A3 = void, typename A4 = void, typename A5 = void, typename A6 = void, typename A7 = void, typename A8 = void, typename A9 = void, typename A10 = void, typename A11 = void, typename A12 = void, typename A13 = void, typename A14 = void, typename A15 = void, typename A16 = void, typename A17 = void, typename A18 = void, typename A19 = void, typename A20 = void, typename A21 = void, typename A22 = void, typename A23 = void, typename A24 = void, typename A25 = void, typename A26 = void, typename A27 = void, typename A28 = void, typename A29 = void, typename A30 = void, typename A31 = void, typename A32 = void>
39 struct tuple;
40 /// @endcond
41 
42 template <typename Tuple, int N>
43 struct tuple_element;
44 
45 template <typename Tuple, int N>
46 struct const_tuple_element;
47 
48 template <typename T>
49 struct tuple_type {
50     typedef T type;
51     typedef T value_type;
52     typedef T& reference;
53     typedef const T& const_reference;
54     typedef const T& transparent_reference;
55 };
56 
57 template <typename T>
58 struct tuple_type<T&> {
59     typedef T type;
60     typedef T& value_type;
61     typedef T& reference;
62     typedef const T& const_reference;
63     typedef T& transparent_reference;
64 };
65 
66 template <typename T>
67 struct tuple_type<const T&> {
68     typedef T type;
69     typedef T& value_type;
70     typedef T& reference;
71     typedef const T& const_reference;
72     typedef const T& transparent_reference;
73 };
74 
75 /// @cond
76 
77 
78 template <typename A0>
79 struct tuple_element<tuple<A0>, 0> : tuple_type<A0> {
80     tuple_element(tuple<A0>& x) : m_x(x.a0) {}
81     typename tuple_type<A0>::reference get() { return m_x; }
82     typename tuple_type<A0>::const_reference get() const { return m_x; }
83 private:
84     typename tuple_type<A0>::reference m_x;
85 };
86 
87 
88 
89 template <typename A0, typename A1>
90 struct tuple_element<tuple<A0, A1>, 0> : tuple_type<A0> {
91     tuple_element(tuple<A0, A1 >& x) : m_x(x.a0) {}
92     typename tuple_type<A0>::reference get() { return m_x; }
93     typename tuple_type<A0>::const_reference get() const { return m_x; }
94 private:
95     typename tuple_type<A0>::reference m_x;
96 };
97 
98 template <typename A0, typename A1>
99 struct tuple_element<tuple<A0, A1>, 1> : tuple_type<A1> {
100     tuple_element(tuple<A0, A1 >& x) : m_x(x.a1) {}
101     typename tuple_type<A1>::reference get() { return m_x; }
102     typename tuple_type<A1>::const_reference get() const { return m_x; }
103 private:
104     typename tuple_type<A1>::reference m_x;
105 };
106 
107 
108 
109 template <typename A0, typename A1, typename A2>
110 struct tuple_element<tuple<A0, A1, A2>, 0> : tuple_type<A0> {
111     tuple_element(tuple<A0, A1 , A2 >& x) : m_x(x.a0) {}
112     typename tuple_type<A0>::reference get() { return m_x; }
113     typename tuple_type<A0>::const_reference get() const { return m_x; }
114 private:
115     typename tuple_type<A0>::reference m_x;
116 };
117 
118 template <typename A0, typename A1, typename A2>
119 struct tuple_element<tuple<A0, A1, A2>, 1> : tuple_type<A1> {
120     tuple_element(tuple<A0, A1 , A2 >& x) : m_x(x.a1) {}
121     typename tuple_type<A1>::reference get() { return m_x; }
122     typename tuple_type<A1>::const_reference get() const { return m_x; }
123 private:
124     typename tuple_type<A1>::reference m_x;
125 };
126 
127 template <typename A0, typename A1, typename A2>
128 struct tuple_element<tuple<A0, A1, A2>, 2> : tuple_type<A2> {
129     tuple_element(tuple<A0, A1 , A2 >& x) : m_x(x.a2) {}
130     typename tuple_type<A2>::reference get() { return m_x; }
131     typename tuple_type<A2>::const_reference get() const { return m_x; }
132 private:
133     typename tuple_type<A2>::reference m_x;
134 };
135 
136 
137 
138 template <typename A0, typename A1, typename A2, typename A3>
139 struct tuple_element<tuple<A0, A1, A2, A3>, 0> : tuple_type<A0> {
140     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a0) {}
141     typename tuple_type<A0>::reference get() { return m_x; }
142     typename tuple_type<A0>::const_reference get() const { return m_x; }
143 private:
144     typename tuple_type<A0>::reference m_x;
145 };
146 
147 template <typename A0, typename A1, typename A2, typename A3>
148 struct tuple_element<tuple<A0, A1, A2, A3>, 1> : tuple_type<A1> {
149     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a1) {}
150     typename tuple_type<A1>::reference get() { return m_x; }
151     typename tuple_type<A1>::const_reference get() const { return m_x; }
152 private:
153     typename tuple_type<A1>::reference m_x;
154 };
155 
156 template <typename A0, typename A1, typename A2, typename A3>
157 struct tuple_element<tuple<A0, A1, A2, A3>, 2> : tuple_type<A2> {
158     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a2) {}
159     typename tuple_type<A2>::reference get() { return m_x; }
160     typename tuple_type<A2>::const_reference get() const { return m_x; }
161 private:
162     typename tuple_type<A2>::reference m_x;
163 };
164 
165 template <typename A0, typename A1, typename A2, typename A3>
166 struct tuple_element<tuple<A0, A1, A2, A3>, 3> : tuple_type<A3> {
167     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a3) {}
168     typename tuple_type<A3>::reference get() { return m_x; }
169     typename tuple_type<A3>::const_reference get() const { return m_x; }
170 private:
171     typename tuple_type<A3>::reference m_x;
172 };
173 
174 
175 
176 template <typename A0, typename A1, typename A2, typename A3, typename A4>
177 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 0> : tuple_type<A0> {
178     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a0) {}
179     typename tuple_type<A0>::reference get() { return m_x; }
180     typename tuple_type<A0>::const_reference get() const { return m_x; }
181 private:
182     typename tuple_type<A0>::reference m_x;
183 };
184 
185 template <typename A0, typename A1, typename A2, typename A3, typename A4>
186 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 1> : tuple_type<A1> {
187     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a1) {}
188     typename tuple_type<A1>::reference get() { return m_x; }
189     typename tuple_type<A1>::const_reference get() const { return m_x; }
190 private:
191     typename tuple_type<A1>::reference m_x;
192 };
193 
194 template <typename A0, typename A1, typename A2, typename A3, typename A4>
195 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 2> : tuple_type<A2> {
196     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a2) {}
197     typename tuple_type<A2>::reference get() { return m_x; }
198     typename tuple_type<A2>::const_reference get() const { return m_x; }
199 private:
200     typename tuple_type<A2>::reference m_x;
201 };
202 
203 template <typename A0, typename A1, typename A2, typename A3, typename A4>
204 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 3> : tuple_type<A3> {
205     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a3) {}
206     typename tuple_type<A3>::reference get() { return m_x; }
207     typename tuple_type<A3>::const_reference get() const { return m_x; }
208 private:
209     typename tuple_type<A3>::reference m_x;
210 };
211 
212 template <typename A0, typename A1, typename A2, typename A3, typename A4>
213 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 4> : tuple_type<A4> {
214     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a4) {}
215     typename tuple_type<A4>::reference get() { return m_x; }
216     typename tuple_type<A4>::const_reference get() const { return m_x; }
217 private:
218     typename tuple_type<A4>::reference m_x;
219 };
220 
221 
222 
223 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
224 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 0> : tuple_type<A0> {
225     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a0) {}
226     typename tuple_type<A0>::reference get() { return m_x; }
227     typename tuple_type<A0>::const_reference get() const { return m_x; }
228 private:
229     typename tuple_type<A0>::reference m_x;
230 };
231 
232 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
233 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 1> : tuple_type<A1> {
234     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a1) {}
235     typename tuple_type<A1>::reference get() { return m_x; }
236     typename tuple_type<A1>::const_reference get() const { return m_x; }
237 private:
238     typename tuple_type<A1>::reference m_x;
239 };
240 
241 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
242 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 2> : tuple_type<A2> {
243     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a2) {}
244     typename tuple_type<A2>::reference get() { return m_x; }
245     typename tuple_type<A2>::const_reference get() const { return m_x; }
246 private:
247     typename tuple_type<A2>::reference m_x;
248 };
249 
250 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
251 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 3> : tuple_type<A3> {
252     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a3) {}
253     typename tuple_type<A3>::reference get() { return m_x; }
254     typename tuple_type<A3>::const_reference get() const { return m_x; }
255 private:
256     typename tuple_type<A3>::reference m_x;
257 };
258 
259 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
260 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 4> : tuple_type<A4> {
261     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a4) {}
262     typename tuple_type<A4>::reference get() { return m_x; }
263     typename tuple_type<A4>::const_reference get() const { return m_x; }
264 private:
265     typename tuple_type<A4>::reference m_x;
266 };
267 
268 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
269 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 5> : tuple_type<A5> {
270     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a5) {}
271     typename tuple_type<A5>::reference get() { return m_x; }
272     typename tuple_type<A5>::const_reference get() const { return m_x; }
273 private:
274     typename tuple_type<A5>::reference m_x;
275 };
276 
277 
278 
279 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
280 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 0> : tuple_type<A0> {
281     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a0) {}
282     typename tuple_type<A0>::reference get() { return m_x; }
283     typename tuple_type<A0>::const_reference get() const { return m_x; }
284 private:
285     typename tuple_type<A0>::reference m_x;
286 };
287 
288 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
289 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 1> : tuple_type<A1> {
290     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a1) {}
291     typename tuple_type<A1>::reference get() { return m_x; }
292     typename tuple_type<A1>::const_reference get() const { return m_x; }
293 private:
294     typename tuple_type<A1>::reference m_x;
295 };
296 
297 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
298 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 2> : tuple_type<A2> {
299     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a2) {}
300     typename tuple_type<A2>::reference get() { return m_x; }
301     typename tuple_type<A2>::const_reference get() const { return m_x; }
302 private:
303     typename tuple_type<A2>::reference m_x;
304 };
305 
306 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
307 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 3> : tuple_type<A3> {
308     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a3) {}
309     typename tuple_type<A3>::reference get() { return m_x; }
310     typename tuple_type<A3>::const_reference get() const { return m_x; }
311 private:
312     typename tuple_type<A3>::reference m_x;
313 };
314 
315 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
316 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 4> : tuple_type<A4> {
317     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a4) {}
318     typename tuple_type<A4>::reference get() { return m_x; }
319     typename tuple_type<A4>::const_reference get() const { return m_x; }
320 private:
321     typename tuple_type<A4>::reference m_x;
322 };
323 
324 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
325 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 5> : tuple_type<A5> {
326     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a5) {}
327     typename tuple_type<A5>::reference get() { return m_x; }
328     typename tuple_type<A5>::const_reference get() const { return m_x; }
329 private:
330     typename tuple_type<A5>::reference m_x;
331 };
332 
333 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
334 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 6> : tuple_type<A6> {
335     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a6) {}
336     typename tuple_type<A6>::reference get() { return m_x; }
337     typename tuple_type<A6>::const_reference get() const { return m_x; }
338 private:
339     typename tuple_type<A6>::reference m_x;
340 };
341 
342 
343 
344 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
345 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 0> : tuple_type<A0> {
346     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a0) {}
347     typename tuple_type<A0>::reference get() { return m_x; }
348     typename tuple_type<A0>::const_reference get() const { return m_x; }
349 private:
350     typename tuple_type<A0>::reference m_x;
351 };
352 
353 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
354 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 1> : tuple_type<A1> {
355     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a1) {}
356     typename tuple_type<A1>::reference get() { return m_x; }
357     typename tuple_type<A1>::const_reference get() const { return m_x; }
358 private:
359     typename tuple_type<A1>::reference m_x;
360 };
361 
362 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
363 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 2> : tuple_type<A2> {
364     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a2) {}
365     typename tuple_type<A2>::reference get() { return m_x; }
366     typename tuple_type<A2>::const_reference get() const { return m_x; }
367 private:
368     typename tuple_type<A2>::reference m_x;
369 };
370 
371 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
372 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 3> : tuple_type<A3> {
373     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a3) {}
374     typename tuple_type<A3>::reference get() { return m_x; }
375     typename tuple_type<A3>::const_reference get() const { return m_x; }
376 private:
377     typename tuple_type<A3>::reference m_x;
378 };
379 
380 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
381 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 4> : tuple_type<A4> {
382     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a4) {}
383     typename tuple_type<A4>::reference get() { return m_x; }
384     typename tuple_type<A4>::const_reference get() const { return m_x; }
385 private:
386     typename tuple_type<A4>::reference m_x;
387 };
388 
389 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
390 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 5> : tuple_type<A5> {
391     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a5) {}
392     typename tuple_type<A5>::reference get() { return m_x; }
393     typename tuple_type<A5>::const_reference get() const { return m_x; }
394 private:
395     typename tuple_type<A5>::reference m_x;
396 };
397 
398 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
399 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 6> : tuple_type<A6> {
400     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a6) {}
401     typename tuple_type<A6>::reference get() { return m_x; }
402     typename tuple_type<A6>::const_reference get() const { return m_x; }
403 private:
404     typename tuple_type<A6>::reference m_x;
405 };
406 
407 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
408 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 7> : tuple_type<A7> {
409     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a7) {}
410     typename tuple_type<A7>::reference get() { return m_x; }
411     typename tuple_type<A7>::const_reference get() const { return m_x; }
412 private:
413     typename tuple_type<A7>::reference m_x;
414 };
415 
416 
417 
418 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
419 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 0> : tuple_type<A0> {
420     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a0) {}
421     typename tuple_type<A0>::reference get() { return m_x; }
422     typename tuple_type<A0>::const_reference get() const { return m_x; }
423 private:
424     typename tuple_type<A0>::reference m_x;
425 };
426 
427 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
428 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 1> : tuple_type<A1> {
429     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a1) {}
430     typename tuple_type<A1>::reference get() { return m_x; }
431     typename tuple_type<A1>::const_reference get() const { return m_x; }
432 private:
433     typename tuple_type<A1>::reference m_x;
434 };
435 
436 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
437 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 2> : tuple_type<A2> {
438     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a2) {}
439     typename tuple_type<A2>::reference get() { return m_x; }
440     typename tuple_type<A2>::const_reference get() const { return m_x; }
441 private:
442     typename tuple_type<A2>::reference m_x;
443 };
444 
445 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
446 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 3> : tuple_type<A3> {
447     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a3) {}
448     typename tuple_type<A3>::reference get() { return m_x; }
449     typename tuple_type<A3>::const_reference get() const { return m_x; }
450 private:
451     typename tuple_type<A3>::reference m_x;
452 };
453 
454 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
455 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 4> : tuple_type<A4> {
456     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a4) {}
457     typename tuple_type<A4>::reference get() { return m_x; }
458     typename tuple_type<A4>::const_reference get() const { return m_x; }
459 private:
460     typename tuple_type<A4>::reference m_x;
461 };
462 
463 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
464 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 5> : tuple_type<A5> {
465     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a5) {}
466     typename tuple_type<A5>::reference get() { return m_x; }
467     typename tuple_type<A5>::const_reference get() const { return m_x; }
468 private:
469     typename tuple_type<A5>::reference m_x;
470 };
471 
472 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
473 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 6> : tuple_type<A6> {
474     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a6) {}
475     typename tuple_type<A6>::reference get() { return m_x; }
476     typename tuple_type<A6>::const_reference get() const { return m_x; }
477 private:
478     typename tuple_type<A6>::reference m_x;
479 };
480 
481 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
482 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 7> : tuple_type<A7> {
483     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a7) {}
484     typename tuple_type<A7>::reference get() { return m_x; }
485     typename tuple_type<A7>::const_reference get() const { return m_x; }
486 private:
487     typename tuple_type<A7>::reference m_x;
488 };
489 
490 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
491 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 8> : tuple_type<A8> {
492     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a8) {}
493     typename tuple_type<A8>::reference get() { return m_x; }
494     typename tuple_type<A8>::const_reference get() const { return m_x; }
495 private:
496     typename tuple_type<A8>::reference m_x;
497 };
498 
499 
500 
501 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
502 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 0> : tuple_type<A0> {
503     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a0) {}
504     typename tuple_type<A0>::reference get() { return m_x; }
505     typename tuple_type<A0>::const_reference get() const { return m_x; }
506 private:
507     typename tuple_type<A0>::reference m_x;
508 };
509 
510 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
511 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 1> : tuple_type<A1> {
512     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a1) {}
513     typename tuple_type<A1>::reference get() { return m_x; }
514     typename tuple_type<A1>::const_reference get() const { return m_x; }
515 private:
516     typename tuple_type<A1>::reference m_x;
517 };
518 
519 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
520 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 2> : tuple_type<A2> {
521     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a2) {}
522     typename tuple_type<A2>::reference get() { return m_x; }
523     typename tuple_type<A2>::const_reference get() const { return m_x; }
524 private:
525     typename tuple_type<A2>::reference m_x;
526 };
527 
528 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
529 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 3> : tuple_type<A3> {
530     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a3) {}
531     typename tuple_type<A3>::reference get() { return m_x; }
532     typename tuple_type<A3>::const_reference get() const { return m_x; }
533 private:
534     typename tuple_type<A3>::reference m_x;
535 };
536 
537 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
538 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 4> : tuple_type<A4> {
539     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a4) {}
540     typename tuple_type<A4>::reference get() { return m_x; }
541     typename tuple_type<A4>::const_reference get() const { return m_x; }
542 private:
543     typename tuple_type<A4>::reference m_x;
544 };
545 
546 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
547 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 5> : tuple_type<A5> {
548     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a5) {}
549     typename tuple_type<A5>::reference get() { return m_x; }
550     typename tuple_type<A5>::const_reference get() const { return m_x; }
551 private:
552     typename tuple_type<A5>::reference m_x;
553 };
554 
555 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
556 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 6> : tuple_type<A6> {
557     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a6) {}
558     typename tuple_type<A6>::reference get() { return m_x; }
559     typename tuple_type<A6>::const_reference get() const { return m_x; }
560 private:
561     typename tuple_type<A6>::reference m_x;
562 };
563 
564 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
565 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 7> : tuple_type<A7> {
566     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a7) {}
567     typename tuple_type<A7>::reference get() { return m_x; }
568     typename tuple_type<A7>::const_reference get() const { return m_x; }
569 private:
570     typename tuple_type<A7>::reference m_x;
571 };
572 
573 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
574 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 8> : tuple_type<A8> {
575     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a8) {}
576     typename tuple_type<A8>::reference get() { return m_x; }
577     typename tuple_type<A8>::const_reference get() const { return m_x; }
578 private:
579     typename tuple_type<A8>::reference m_x;
580 };
581 
582 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
583 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 9> : tuple_type<A9> {
584     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a9) {}
585     typename tuple_type<A9>::reference get() { return m_x; }
586     typename tuple_type<A9>::const_reference get() const { return m_x; }
587 private:
588     typename tuple_type<A9>::reference m_x;
589 };
590 
591 
592 
593 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
594 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 0> : tuple_type<A0> {
595     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a0) {}
596     typename tuple_type<A0>::reference get() { return m_x; }
597     typename tuple_type<A0>::const_reference get() const { return m_x; }
598 private:
599     typename tuple_type<A0>::reference m_x;
600 };
601 
602 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
603 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 1> : tuple_type<A1> {
604     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a1) {}
605     typename tuple_type<A1>::reference get() { return m_x; }
606     typename tuple_type<A1>::const_reference get() const { return m_x; }
607 private:
608     typename tuple_type<A1>::reference m_x;
609 };
610 
611 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
612 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 2> : tuple_type<A2> {
613     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a2) {}
614     typename tuple_type<A2>::reference get() { return m_x; }
615     typename tuple_type<A2>::const_reference get() const { return m_x; }
616 private:
617     typename tuple_type<A2>::reference m_x;
618 };
619 
620 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
621 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 3> : tuple_type<A3> {
622     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a3) {}
623     typename tuple_type<A3>::reference get() { return m_x; }
624     typename tuple_type<A3>::const_reference get() const { return m_x; }
625 private:
626     typename tuple_type<A3>::reference m_x;
627 };
628 
629 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
630 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 4> : tuple_type<A4> {
631     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a4) {}
632     typename tuple_type<A4>::reference get() { return m_x; }
633     typename tuple_type<A4>::const_reference get() const { return m_x; }
634 private:
635     typename tuple_type<A4>::reference m_x;
636 };
637 
638 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
639 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 5> : tuple_type<A5> {
640     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a5) {}
641     typename tuple_type<A5>::reference get() { return m_x; }
642     typename tuple_type<A5>::const_reference get() const { return m_x; }
643 private:
644     typename tuple_type<A5>::reference m_x;
645 };
646 
647 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
648 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 6> : tuple_type<A6> {
649     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a6) {}
650     typename tuple_type<A6>::reference get() { return m_x; }
651     typename tuple_type<A6>::const_reference get() const { return m_x; }
652 private:
653     typename tuple_type<A6>::reference m_x;
654 };
655 
656 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
657 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 7> : tuple_type<A7> {
658     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a7) {}
659     typename tuple_type<A7>::reference get() { return m_x; }
660     typename tuple_type<A7>::const_reference get() const { return m_x; }
661 private:
662     typename tuple_type<A7>::reference m_x;
663 };
664 
665 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
666 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 8> : tuple_type<A8> {
667     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a8) {}
668     typename tuple_type<A8>::reference get() { return m_x; }
669     typename tuple_type<A8>::const_reference get() const { return m_x; }
670 private:
671     typename tuple_type<A8>::reference m_x;
672 };
673 
674 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
675 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 9> : tuple_type<A9> {
676     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a9) {}
677     typename tuple_type<A9>::reference get() { return m_x; }
678     typename tuple_type<A9>::const_reference get() const { return m_x; }
679 private:
680     typename tuple_type<A9>::reference m_x;
681 };
682 
683 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
684 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 10> : tuple_type<A10> {
685     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a10) {}
686     typename tuple_type<A10>::reference get() { return m_x; }
687     typename tuple_type<A10>::const_reference get() const { return m_x; }
688 private:
689     typename tuple_type<A10>::reference m_x;
690 };
691 
692 
693 
694 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
695 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 0> : tuple_type<A0> {
696     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a0) {}
697     typename tuple_type<A0>::reference get() { return m_x; }
698     typename tuple_type<A0>::const_reference get() const { return m_x; }
699 private:
700     typename tuple_type<A0>::reference m_x;
701 };
702 
703 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
704 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 1> : tuple_type<A1> {
705     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a1) {}
706     typename tuple_type<A1>::reference get() { return m_x; }
707     typename tuple_type<A1>::const_reference get() const { return m_x; }
708 private:
709     typename tuple_type<A1>::reference m_x;
710 };
711 
712 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
713 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 2> : tuple_type<A2> {
714     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a2) {}
715     typename tuple_type<A2>::reference get() { return m_x; }
716     typename tuple_type<A2>::const_reference get() const { return m_x; }
717 private:
718     typename tuple_type<A2>::reference m_x;
719 };
720 
721 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
722 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 3> : tuple_type<A3> {
723     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a3) {}
724     typename tuple_type<A3>::reference get() { return m_x; }
725     typename tuple_type<A3>::const_reference get() const { return m_x; }
726 private:
727     typename tuple_type<A3>::reference m_x;
728 };
729 
730 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
731 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 4> : tuple_type<A4> {
732     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a4) {}
733     typename tuple_type<A4>::reference get() { return m_x; }
734     typename tuple_type<A4>::const_reference get() const { return m_x; }
735 private:
736     typename tuple_type<A4>::reference m_x;
737 };
738 
739 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
740 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 5> : tuple_type<A5> {
741     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a5) {}
742     typename tuple_type<A5>::reference get() { return m_x; }
743     typename tuple_type<A5>::const_reference get() const { return m_x; }
744 private:
745     typename tuple_type<A5>::reference m_x;
746 };
747 
748 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
749 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 6> : tuple_type<A6> {
750     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a6) {}
751     typename tuple_type<A6>::reference get() { return m_x; }
752     typename tuple_type<A6>::const_reference get() const { return m_x; }
753 private:
754     typename tuple_type<A6>::reference m_x;
755 };
756 
757 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
758 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 7> : tuple_type<A7> {
759     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a7) {}
760     typename tuple_type<A7>::reference get() { return m_x; }
761     typename tuple_type<A7>::const_reference get() const { return m_x; }
762 private:
763     typename tuple_type<A7>::reference m_x;
764 };
765 
766 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
767 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 8> : tuple_type<A8> {
768     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a8) {}
769     typename tuple_type<A8>::reference get() { return m_x; }
770     typename tuple_type<A8>::const_reference get() const { return m_x; }
771 private:
772     typename tuple_type<A8>::reference m_x;
773 };
774 
775 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
776 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 9> : tuple_type<A9> {
777     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a9) {}
778     typename tuple_type<A9>::reference get() { return m_x; }
779     typename tuple_type<A9>::const_reference get() const { return m_x; }
780 private:
781     typename tuple_type<A9>::reference m_x;
782 };
783 
784 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
785 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 10> : tuple_type<A10> {
786     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a10) {}
787     typename tuple_type<A10>::reference get() { return m_x; }
788     typename tuple_type<A10>::const_reference get() const { return m_x; }
789 private:
790     typename tuple_type<A10>::reference m_x;
791 };
792 
793 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
794 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 11> : tuple_type<A11> {
795     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a11) {}
796     typename tuple_type<A11>::reference get() { return m_x; }
797     typename tuple_type<A11>::const_reference get() const { return m_x; }
798 private:
799     typename tuple_type<A11>::reference m_x;
800 };
801 
802 
803 
804 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
805 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 0> : tuple_type<A0> {
806     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a0) {}
807     typename tuple_type<A0>::reference get() { return m_x; }
808     typename tuple_type<A0>::const_reference get() const { return m_x; }
809 private:
810     typename tuple_type<A0>::reference m_x;
811 };
812 
813 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
814 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 1> : tuple_type<A1> {
815     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a1) {}
816     typename tuple_type<A1>::reference get() { return m_x; }
817     typename tuple_type<A1>::const_reference get() const { return m_x; }
818 private:
819     typename tuple_type<A1>::reference m_x;
820 };
821 
822 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
823 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 2> : tuple_type<A2> {
824     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a2) {}
825     typename tuple_type<A2>::reference get() { return m_x; }
826     typename tuple_type<A2>::const_reference get() const { return m_x; }
827 private:
828     typename tuple_type<A2>::reference m_x;
829 };
830 
831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
832 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 3> : tuple_type<A3> {
833     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a3) {}
834     typename tuple_type<A3>::reference get() { return m_x; }
835     typename tuple_type<A3>::const_reference get() const { return m_x; }
836 private:
837     typename tuple_type<A3>::reference m_x;
838 };
839 
840 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
841 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 4> : tuple_type<A4> {
842     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a4) {}
843     typename tuple_type<A4>::reference get() { return m_x; }
844     typename tuple_type<A4>::const_reference get() const { return m_x; }
845 private:
846     typename tuple_type<A4>::reference m_x;
847 };
848 
849 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
850 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 5> : tuple_type<A5> {
851     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a5) {}
852     typename tuple_type<A5>::reference get() { return m_x; }
853     typename tuple_type<A5>::const_reference get() const { return m_x; }
854 private:
855     typename tuple_type<A5>::reference m_x;
856 };
857 
858 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
859 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 6> : tuple_type<A6> {
860     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a6) {}
861     typename tuple_type<A6>::reference get() { return m_x; }
862     typename tuple_type<A6>::const_reference get() const { return m_x; }
863 private:
864     typename tuple_type<A6>::reference m_x;
865 };
866 
867 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
868 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 7> : tuple_type<A7> {
869     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a7) {}
870     typename tuple_type<A7>::reference get() { return m_x; }
871     typename tuple_type<A7>::const_reference get() const { return m_x; }
872 private:
873     typename tuple_type<A7>::reference m_x;
874 };
875 
876 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
877 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 8> : tuple_type<A8> {
878     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a8) {}
879     typename tuple_type<A8>::reference get() { return m_x; }
880     typename tuple_type<A8>::const_reference get() const { return m_x; }
881 private:
882     typename tuple_type<A8>::reference m_x;
883 };
884 
885 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
886 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 9> : tuple_type<A9> {
887     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a9) {}
888     typename tuple_type<A9>::reference get() { return m_x; }
889     typename tuple_type<A9>::const_reference get() const { return m_x; }
890 private:
891     typename tuple_type<A9>::reference m_x;
892 };
893 
894 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
895 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 10> : tuple_type<A10> {
896     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a10) {}
897     typename tuple_type<A10>::reference get() { return m_x; }
898     typename tuple_type<A10>::const_reference get() const { return m_x; }
899 private:
900     typename tuple_type<A10>::reference m_x;
901 };
902 
903 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
904 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 11> : tuple_type<A11> {
905     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a11) {}
906     typename tuple_type<A11>::reference get() { return m_x; }
907     typename tuple_type<A11>::const_reference get() const { return m_x; }
908 private:
909     typename tuple_type<A11>::reference m_x;
910 };
911 
912 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
913 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 12> : tuple_type<A12> {
914     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a12) {}
915     typename tuple_type<A12>::reference get() { return m_x; }
916     typename tuple_type<A12>::const_reference get() const { return m_x; }
917 private:
918     typename tuple_type<A12>::reference m_x;
919 };
920 
921 
922 
923 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
924 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 0> : tuple_type<A0> {
925     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a0) {}
926     typename tuple_type<A0>::reference get() { return m_x; }
927     typename tuple_type<A0>::const_reference get() const { return m_x; }
928 private:
929     typename tuple_type<A0>::reference m_x;
930 };
931 
932 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
933 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 1> : tuple_type<A1> {
934     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a1) {}
935     typename tuple_type<A1>::reference get() { return m_x; }
936     typename tuple_type<A1>::const_reference get() const { return m_x; }
937 private:
938     typename tuple_type<A1>::reference m_x;
939 };
940 
941 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
942 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 2> : tuple_type<A2> {
943     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a2) {}
944     typename tuple_type<A2>::reference get() { return m_x; }
945     typename tuple_type<A2>::const_reference get() const { return m_x; }
946 private:
947     typename tuple_type<A2>::reference m_x;
948 };
949 
950 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
951 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 3> : tuple_type<A3> {
952     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a3) {}
953     typename tuple_type<A3>::reference get() { return m_x; }
954     typename tuple_type<A3>::const_reference get() const { return m_x; }
955 private:
956     typename tuple_type<A3>::reference m_x;
957 };
958 
959 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
960 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 4> : tuple_type<A4> {
961     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a4) {}
962     typename tuple_type<A4>::reference get() { return m_x; }
963     typename tuple_type<A4>::const_reference get() const { return m_x; }
964 private:
965     typename tuple_type<A4>::reference m_x;
966 };
967 
968 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
969 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 5> : tuple_type<A5> {
970     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a5) {}
971     typename tuple_type<A5>::reference get() { return m_x; }
972     typename tuple_type<A5>::const_reference get() const { return m_x; }
973 private:
974     typename tuple_type<A5>::reference m_x;
975 };
976 
977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
978 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 6> : tuple_type<A6> {
979     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a6) {}
980     typename tuple_type<A6>::reference get() { return m_x; }
981     typename tuple_type<A6>::const_reference get() const { return m_x; }
982 private:
983     typename tuple_type<A6>::reference m_x;
984 };
985 
986 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
987 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 7> : tuple_type<A7> {
988     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a7) {}
989     typename tuple_type<A7>::reference get() { return m_x; }
990     typename tuple_type<A7>::const_reference get() const { return m_x; }
991 private:
992     typename tuple_type<A7>::reference m_x;
993 };
994 
995 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
996 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 8> : tuple_type<A8> {
997     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a8) {}
998     typename tuple_type<A8>::reference get() { return m_x; }
999     typename tuple_type<A8>::const_reference get() const { return m_x; }
1000 private:
1001     typename tuple_type<A8>::reference m_x;
1002 };
1003 
1004 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1005 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 9> : tuple_type<A9> {
1006     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a9) {}
1007     typename tuple_type<A9>::reference get() { return m_x; }
1008     typename tuple_type<A9>::const_reference get() const { return m_x; }
1009 private:
1010     typename tuple_type<A9>::reference m_x;
1011 };
1012 
1013 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1014 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 10> : tuple_type<A10> {
1015     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a10) {}
1016     typename tuple_type<A10>::reference get() { return m_x; }
1017     typename tuple_type<A10>::const_reference get() const { return m_x; }
1018 private:
1019     typename tuple_type<A10>::reference m_x;
1020 };
1021 
1022 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1023 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 11> : tuple_type<A11> {
1024     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a11) {}
1025     typename tuple_type<A11>::reference get() { return m_x; }
1026     typename tuple_type<A11>::const_reference get() const { return m_x; }
1027 private:
1028     typename tuple_type<A11>::reference m_x;
1029 };
1030 
1031 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1032 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 12> : tuple_type<A12> {
1033     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a12) {}
1034     typename tuple_type<A12>::reference get() { return m_x; }
1035     typename tuple_type<A12>::const_reference get() const { return m_x; }
1036 private:
1037     typename tuple_type<A12>::reference m_x;
1038 };
1039 
1040 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1041 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 13> : tuple_type<A13> {
1042     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a13) {}
1043     typename tuple_type<A13>::reference get() { return m_x; }
1044     typename tuple_type<A13>::const_reference get() const { return m_x; }
1045 private:
1046     typename tuple_type<A13>::reference m_x;
1047 };
1048 
1049 
1050 
1051 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1052 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 0> : tuple_type<A0> {
1053     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a0) {}
1054     typename tuple_type<A0>::reference get() { return m_x; }
1055     typename tuple_type<A0>::const_reference get() const { return m_x; }
1056 private:
1057     typename tuple_type<A0>::reference m_x;
1058 };
1059 
1060 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1061 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 1> : tuple_type<A1> {
1062     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a1) {}
1063     typename tuple_type<A1>::reference get() { return m_x; }
1064     typename tuple_type<A1>::const_reference get() const { return m_x; }
1065 private:
1066     typename tuple_type<A1>::reference m_x;
1067 };
1068 
1069 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1070 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 2> : tuple_type<A2> {
1071     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a2) {}
1072     typename tuple_type<A2>::reference get() { return m_x; }
1073     typename tuple_type<A2>::const_reference get() const { return m_x; }
1074 private:
1075     typename tuple_type<A2>::reference m_x;
1076 };
1077 
1078 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1079 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 3> : tuple_type<A3> {
1080     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a3) {}
1081     typename tuple_type<A3>::reference get() { return m_x; }
1082     typename tuple_type<A3>::const_reference get() const { return m_x; }
1083 private:
1084     typename tuple_type<A3>::reference m_x;
1085 };
1086 
1087 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1088 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 4> : tuple_type<A4> {
1089     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a4) {}
1090     typename tuple_type<A4>::reference get() { return m_x; }
1091     typename tuple_type<A4>::const_reference get() const { return m_x; }
1092 private:
1093     typename tuple_type<A4>::reference m_x;
1094 };
1095 
1096 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1097 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 5> : tuple_type<A5> {
1098     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a5) {}
1099     typename tuple_type<A5>::reference get() { return m_x; }
1100     typename tuple_type<A5>::const_reference get() const { return m_x; }
1101 private:
1102     typename tuple_type<A5>::reference m_x;
1103 };
1104 
1105 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1106 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 6> : tuple_type<A6> {
1107     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a6) {}
1108     typename tuple_type<A6>::reference get() { return m_x; }
1109     typename tuple_type<A6>::const_reference get() const { return m_x; }
1110 private:
1111     typename tuple_type<A6>::reference m_x;
1112 };
1113 
1114 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1115 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 7> : tuple_type<A7> {
1116     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a7) {}
1117     typename tuple_type<A7>::reference get() { return m_x; }
1118     typename tuple_type<A7>::const_reference get() const { return m_x; }
1119 private:
1120     typename tuple_type<A7>::reference m_x;
1121 };
1122 
1123 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1124 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 8> : tuple_type<A8> {
1125     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a8) {}
1126     typename tuple_type<A8>::reference get() { return m_x; }
1127     typename tuple_type<A8>::const_reference get() const { return m_x; }
1128 private:
1129     typename tuple_type<A8>::reference m_x;
1130 };
1131 
1132 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1133 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 9> : tuple_type<A9> {
1134     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a9) {}
1135     typename tuple_type<A9>::reference get() { return m_x; }
1136     typename tuple_type<A9>::const_reference get() const { return m_x; }
1137 private:
1138     typename tuple_type<A9>::reference m_x;
1139 };
1140 
1141 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1142 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 10> : tuple_type<A10> {
1143     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a10) {}
1144     typename tuple_type<A10>::reference get() { return m_x; }
1145     typename tuple_type<A10>::const_reference get() const { return m_x; }
1146 private:
1147     typename tuple_type<A10>::reference m_x;
1148 };
1149 
1150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1151 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 11> : tuple_type<A11> {
1152     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a11) {}
1153     typename tuple_type<A11>::reference get() { return m_x; }
1154     typename tuple_type<A11>::const_reference get() const { return m_x; }
1155 private:
1156     typename tuple_type<A11>::reference m_x;
1157 };
1158 
1159 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1160 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 12> : tuple_type<A12> {
1161     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a12) {}
1162     typename tuple_type<A12>::reference get() { return m_x; }
1163     typename tuple_type<A12>::const_reference get() const { return m_x; }
1164 private:
1165     typename tuple_type<A12>::reference m_x;
1166 };
1167 
1168 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1169 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 13> : tuple_type<A13> {
1170     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a13) {}
1171     typename tuple_type<A13>::reference get() { return m_x; }
1172     typename tuple_type<A13>::const_reference get() const { return m_x; }
1173 private:
1174     typename tuple_type<A13>::reference m_x;
1175 };
1176 
1177 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1178 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 14> : tuple_type<A14> {
1179     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a14) {}
1180     typename tuple_type<A14>::reference get() { return m_x; }
1181     typename tuple_type<A14>::const_reference get() const { return m_x; }
1182 private:
1183     typename tuple_type<A14>::reference m_x;
1184 };
1185 
1186 
1187 
1188 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1189 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 0> : tuple_type<A0> {
1190     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a0) {}
1191     typename tuple_type<A0>::reference get() { return m_x; }
1192     typename tuple_type<A0>::const_reference get() const { return m_x; }
1193 private:
1194     typename tuple_type<A0>::reference m_x;
1195 };
1196 
1197 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1198 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 1> : tuple_type<A1> {
1199     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a1) {}
1200     typename tuple_type<A1>::reference get() { return m_x; }
1201     typename tuple_type<A1>::const_reference get() const { return m_x; }
1202 private:
1203     typename tuple_type<A1>::reference m_x;
1204 };
1205 
1206 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1207 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 2> : tuple_type<A2> {
1208     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a2) {}
1209     typename tuple_type<A2>::reference get() { return m_x; }
1210     typename tuple_type<A2>::const_reference get() const { return m_x; }
1211 private:
1212     typename tuple_type<A2>::reference m_x;
1213 };
1214 
1215 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1216 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 3> : tuple_type<A3> {
1217     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a3) {}
1218     typename tuple_type<A3>::reference get() { return m_x; }
1219     typename tuple_type<A3>::const_reference get() const { return m_x; }
1220 private:
1221     typename tuple_type<A3>::reference m_x;
1222 };
1223 
1224 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1225 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 4> : tuple_type<A4> {
1226     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a4) {}
1227     typename tuple_type<A4>::reference get() { return m_x; }
1228     typename tuple_type<A4>::const_reference get() const { return m_x; }
1229 private:
1230     typename tuple_type<A4>::reference m_x;
1231 };
1232 
1233 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1234 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 5> : tuple_type<A5> {
1235     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a5) {}
1236     typename tuple_type<A5>::reference get() { return m_x; }
1237     typename tuple_type<A5>::const_reference get() const { return m_x; }
1238 private:
1239     typename tuple_type<A5>::reference m_x;
1240 };
1241 
1242 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1243 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 6> : tuple_type<A6> {
1244     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a6) {}
1245     typename tuple_type<A6>::reference get() { return m_x; }
1246     typename tuple_type<A6>::const_reference get() const { return m_x; }
1247 private:
1248     typename tuple_type<A6>::reference m_x;
1249 };
1250 
1251 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1252 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 7> : tuple_type<A7> {
1253     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a7) {}
1254     typename tuple_type<A7>::reference get() { return m_x; }
1255     typename tuple_type<A7>::const_reference get() const { return m_x; }
1256 private:
1257     typename tuple_type<A7>::reference m_x;
1258 };
1259 
1260 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1261 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 8> : tuple_type<A8> {
1262     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a8) {}
1263     typename tuple_type<A8>::reference get() { return m_x; }
1264     typename tuple_type<A8>::const_reference get() const { return m_x; }
1265 private:
1266     typename tuple_type<A8>::reference m_x;
1267 };
1268 
1269 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1270 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 9> : tuple_type<A9> {
1271     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a9) {}
1272     typename tuple_type<A9>::reference get() { return m_x; }
1273     typename tuple_type<A9>::const_reference get() const { return m_x; }
1274 private:
1275     typename tuple_type<A9>::reference m_x;
1276 };
1277 
1278 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1279 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 10> : tuple_type<A10> {
1280     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a10) {}
1281     typename tuple_type<A10>::reference get() { return m_x; }
1282     typename tuple_type<A10>::const_reference get() const { return m_x; }
1283 private:
1284     typename tuple_type<A10>::reference m_x;
1285 };
1286 
1287 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1288 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 11> : tuple_type<A11> {
1289     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a11) {}
1290     typename tuple_type<A11>::reference get() { return m_x; }
1291     typename tuple_type<A11>::const_reference get() const { return m_x; }
1292 private:
1293     typename tuple_type<A11>::reference m_x;
1294 };
1295 
1296 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1297 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 12> : tuple_type<A12> {
1298     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a12) {}
1299     typename tuple_type<A12>::reference get() { return m_x; }
1300     typename tuple_type<A12>::const_reference get() const { return m_x; }
1301 private:
1302     typename tuple_type<A12>::reference m_x;
1303 };
1304 
1305 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1306 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 13> : tuple_type<A13> {
1307     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a13) {}
1308     typename tuple_type<A13>::reference get() { return m_x; }
1309     typename tuple_type<A13>::const_reference get() const { return m_x; }
1310 private:
1311     typename tuple_type<A13>::reference m_x;
1312 };
1313 
1314 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1315 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 14> : tuple_type<A14> {
1316     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a14) {}
1317     typename tuple_type<A14>::reference get() { return m_x; }
1318     typename tuple_type<A14>::const_reference get() const { return m_x; }
1319 private:
1320     typename tuple_type<A14>::reference m_x;
1321 };
1322 
1323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1324 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 15> : tuple_type<A15> {
1325     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a15) {}
1326     typename tuple_type<A15>::reference get() { return m_x; }
1327     typename tuple_type<A15>::const_reference get() const { return m_x; }
1328 private:
1329     typename tuple_type<A15>::reference m_x;
1330 };
1331 
1332 
1333 
1334 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1335 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 0> : tuple_type<A0> {
1336     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a0) {}
1337     typename tuple_type<A0>::reference get() { return m_x; }
1338     typename tuple_type<A0>::const_reference get() const { return m_x; }
1339 private:
1340     typename tuple_type<A0>::reference m_x;
1341 };
1342 
1343 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1344 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 1> : tuple_type<A1> {
1345     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a1) {}
1346     typename tuple_type<A1>::reference get() { return m_x; }
1347     typename tuple_type<A1>::const_reference get() const { return m_x; }
1348 private:
1349     typename tuple_type<A1>::reference m_x;
1350 };
1351 
1352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1353 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 2> : tuple_type<A2> {
1354     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a2) {}
1355     typename tuple_type<A2>::reference get() { return m_x; }
1356     typename tuple_type<A2>::const_reference get() const { return m_x; }
1357 private:
1358     typename tuple_type<A2>::reference m_x;
1359 };
1360 
1361 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1362 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 3> : tuple_type<A3> {
1363     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a3) {}
1364     typename tuple_type<A3>::reference get() { return m_x; }
1365     typename tuple_type<A3>::const_reference get() const { return m_x; }
1366 private:
1367     typename tuple_type<A3>::reference m_x;
1368 };
1369 
1370 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1371 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 4> : tuple_type<A4> {
1372     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a4) {}
1373     typename tuple_type<A4>::reference get() { return m_x; }
1374     typename tuple_type<A4>::const_reference get() const { return m_x; }
1375 private:
1376     typename tuple_type<A4>::reference m_x;
1377 };
1378 
1379 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1380 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 5> : tuple_type<A5> {
1381     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a5) {}
1382     typename tuple_type<A5>::reference get() { return m_x; }
1383     typename tuple_type<A5>::const_reference get() const { return m_x; }
1384 private:
1385     typename tuple_type<A5>::reference m_x;
1386 };
1387 
1388 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1389 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 6> : tuple_type<A6> {
1390     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a6) {}
1391     typename tuple_type<A6>::reference get() { return m_x; }
1392     typename tuple_type<A6>::const_reference get() const { return m_x; }
1393 private:
1394     typename tuple_type<A6>::reference m_x;
1395 };
1396 
1397 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1398 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 7> : tuple_type<A7> {
1399     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a7) {}
1400     typename tuple_type<A7>::reference get() { return m_x; }
1401     typename tuple_type<A7>::const_reference get() const { return m_x; }
1402 private:
1403     typename tuple_type<A7>::reference m_x;
1404 };
1405 
1406 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1407 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 8> : tuple_type<A8> {
1408     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a8) {}
1409     typename tuple_type<A8>::reference get() { return m_x; }
1410     typename tuple_type<A8>::const_reference get() const { return m_x; }
1411 private:
1412     typename tuple_type<A8>::reference m_x;
1413 };
1414 
1415 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1416 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 9> : tuple_type<A9> {
1417     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a9) {}
1418     typename tuple_type<A9>::reference get() { return m_x; }
1419     typename tuple_type<A9>::const_reference get() const { return m_x; }
1420 private:
1421     typename tuple_type<A9>::reference m_x;
1422 };
1423 
1424 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1425 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 10> : tuple_type<A10> {
1426     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a10) {}
1427     typename tuple_type<A10>::reference get() { return m_x; }
1428     typename tuple_type<A10>::const_reference get() const { return m_x; }
1429 private:
1430     typename tuple_type<A10>::reference m_x;
1431 };
1432 
1433 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1434 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 11> : tuple_type<A11> {
1435     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a11) {}
1436     typename tuple_type<A11>::reference get() { return m_x; }
1437     typename tuple_type<A11>::const_reference get() const { return m_x; }
1438 private:
1439     typename tuple_type<A11>::reference m_x;
1440 };
1441 
1442 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1443 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 12> : tuple_type<A12> {
1444     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a12) {}
1445     typename tuple_type<A12>::reference get() { return m_x; }
1446     typename tuple_type<A12>::const_reference get() const { return m_x; }
1447 private:
1448     typename tuple_type<A12>::reference m_x;
1449 };
1450 
1451 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1452 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 13> : tuple_type<A13> {
1453     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a13) {}
1454     typename tuple_type<A13>::reference get() { return m_x; }
1455     typename tuple_type<A13>::const_reference get() const { return m_x; }
1456 private:
1457     typename tuple_type<A13>::reference m_x;
1458 };
1459 
1460 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1461 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 14> : tuple_type<A14> {
1462     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a14) {}
1463     typename tuple_type<A14>::reference get() { return m_x; }
1464     typename tuple_type<A14>::const_reference get() const { return m_x; }
1465 private:
1466     typename tuple_type<A14>::reference m_x;
1467 };
1468 
1469 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1470 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 15> : tuple_type<A15> {
1471     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a15) {}
1472     typename tuple_type<A15>::reference get() { return m_x; }
1473     typename tuple_type<A15>::const_reference get() const { return m_x; }
1474 private:
1475     typename tuple_type<A15>::reference m_x;
1476 };
1477 
1478 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1479 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 16> : tuple_type<A16> {
1480     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 >& x) : m_x(x.a16) {}
1481     typename tuple_type<A16>::reference get() { return m_x; }
1482     typename tuple_type<A16>::const_reference get() const { return m_x; }
1483 private:
1484     typename tuple_type<A16>::reference m_x;
1485 };
1486 
1487 
1488 
1489 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1490 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 0> : tuple_type<A0> {
1491     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a0) {}
1492     typename tuple_type<A0>::reference get() { return m_x; }
1493     typename tuple_type<A0>::const_reference get() const { return m_x; }
1494 private:
1495     typename tuple_type<A0>::reference m_x;
1496 };
1497 
1498 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1499 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 1> : tuple_type<A1> {
1500     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a1) {}
1501     typename tuple_type<A1>::reference get() { return m_x; }
1502     typename tuple_type<A1>::const_reference get() const { return m_x; }
1503 private:
1504     typename tuple_type<A1>::reference m_x;
1505 };
1506 
1507 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1508 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 2> : tuple_type<A2> {
1509     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a2) {}
1510     typename tuple_type<A2>::reference get() { return m_x; }
1511     typename tuple_type<A2>::const_reference get() const { return m_x; }
1512 private:
1513     typename tuple_type<A2>::reference m_x;
1514 };
1515 
1516 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1517 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 3> : tuple_type<A3> {
1518     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a3) {}
1519     typename tuple_type<A3>::reference get() { return m_x; }
1520     typename tuple_type<A3>::const_reference get() const { return m_x; }
1521 private:
1522     typename tuple_type<A3>::reference m_x;
1523 };
1524 
1525 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1526 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 4> : tuple_type<A4> {
1527     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a4) {}
1528     typename tuple_type<A4>::reference get() { return m_x; }
1529     typename tuple_type<A4>::const_reference get() const { return m_x; }
1530 private:
1531     typename tuple_type<A4>::reference m_x;
1532 };
1533 
1534 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1535 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 5> : tuple_type<A5> {
1536     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a5) {}
1537     typename tuple_type<A5>::reference get() { return m_x; }
1538     typename tuple_type<A5>::const_reference get() const { return m_x; }
1539 private:
1540     typename tuple_type<A5>::reference m_x;
1541 };
1542 
1543 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1544 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 6> : tuple_type<A6> {
1545     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a6) {}
1546     typename tuple_type<A6>::reference get() { return m_x; }
1547     typename tuple_type<A6>::const_reference get() const { return m_x; }
1548 private:
1549     typename tuple_type<A6>::reference m_x;
1550 };
1551 
1552 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1553 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 7> : tuple_type<A7> {
1554     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a7) {}
1555     typename tuple_type<A7>::reference get() { return m_x; }
1556     typename tuple_type<A7>::const_reference get() const { return m_x; }
1557 private:
1558     typename tuple_type<A7>::reference m_x;
1559 };
1560 
1561 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1562 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 8> : tuple_type<A8> {
1563     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a8) {}
1564     typename tuple_type<A8>::reference get() { return m_x; }
1565     typename tuple_type<A8>::const_reference get() const { return m_x; }
1566 private:
1567     typename tuple_type<A8>::reference m_x;
1568 };
1569 
1570 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1571 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 9> : tuple_type<A9> {
1572     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a9) {}
1573     typename tuple_type<A9>::reference get() { return m_x; }
1574     typename tuple_type<A9>::const_reference get() const { return m_x; }
1575 private:
1576     typename tuple_type<A9>::reference m_x;
1577 };
1578 
1579 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1580 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 10> : tuple_type<A10> {
1581     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a10) {}
1582     typename tuple_type<A10>::reference get() { return m_x; }
1583     typename tuple_type<A10>::const_reference get() const { return m_x; }
1584 private:
1585     typename tuple_type<A10>::reference m_x;
1586 };
1587 
1588 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1589 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 11> : tuple_type<A11> {
1590     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a11) {}
1591     typename tuple_type<A11>::reference get() { return m_x; }
1592     typename tuple_type<A11>::const_reference get() const { return m_x; }
1593 private:
1594     typename tuple_type<A11>::reference m_x;
1595 };
1596 
1597 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1598 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 12> : tuple_type<A12> {
1599     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a12) {}
1600     typename tuple_type<A12>::reference get() { return m_x; }
1601     typename tuple_type<A12>::const_reference get() const { return m_x; }
1602 private:
1603     typename tuple_type<A12>::reference m_x;
1604 };
1605 
1606 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1607 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 13> : tuple_type<A13> {
1608     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a13) {}
1609     typename tuple_type<A13>::reference get() { return m_x; }
1610     typename tuple_type<A13>::const_reference get() const { return m_x; }
1611 private:
1612     typename tuple_type<A13>::reference m_x;
1613 };
1614 
1615 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1616 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 14> : tuple_type<A14> {
1617     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a14) {}
1618     typename tuple_type<A14>::reference get() { return m_x; }
1619     typename tuple_type<A14>::const_reference get() const { return m_x; }
1620 private:
1621     typename tuple_type<A14>::reference m_x;
1622 };
1623 
1624 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1625 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 15> : tuple_type<A15> {
1626     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a15) {}
1627     typename tuple_type<A15>::reference get() { return m_x; }
1628     typename tuple_type<A15>::const_reference get() const { return m_x; }
1629 private:
1630     typename tuple_type<A15>::reference m_x;
1631 };
1632 
1633 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1634 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 16> : tuple_type<A16> {
1635     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a16) {}
1636     typename tuple_type<A16>::reference get() { return m_x; }
1637     typename tuple_type<A16>::const_reference get() const { return m_x; }
1638 private:
1639     typename tuple_type<A16>::reference m_x;
1640 };
1641 
1642 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1643 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 17> : tuple_type<A17> {
1644     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 >& x) : m_x(x.a17) {}
1645     typename tuple_type<A17>::reference get() { return m_x; }
1646     typename tuple_type<A17>::const_reference get() const { return m_x; }
1647 private:
1648     typename tuple_type<A17>::reference m_x;
1649 };
1650 
1651 
1652 
1653 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1654 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 0> : tuple_type<A0> {
1655     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a0) {}
1656     typename tuple_type<A0>::reference get() { return m_x; }
1657     typename tuple_type<A0>::const_reference get() const { return m_x; }
1658 private:
1659     typename tuple_type<A0>::reference m_x;
1660 };
1661 
1662 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1663 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 1> : tuple_type<A1> {
1664     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a1) {}
1665     typename tuple_type<A1>::reference get() { return m_x; }
1666     typename tuple_type<A1>::const_reference get() const { return m_x; }
1667 private:
1668     typename tuple_type<A1>::reference m_x;
1669 };
1670 
1671 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1672 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 2> : tuple_type<A2> {
1673     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a2) {}
1674     typename tuple_type<A2>::reference get() { return m_x; }
1675     typename tuple_type<A2>::const_reference get() const { return m_x; }
1676 private:
1677     typename tuple_type<A2>::reference m_x;
1678 };
1679 
1680 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1681 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 3> : tuple_type<A3> {
1682     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a3) {}
1683     typename tuple_type<A3>::reference get() { return m_x; }
1684     typename tuple_type<A3>::const_reference get() const { return m_x; }
1685 private:
1686     typename tuple_type<A3>::reference m_x;
1687 };
1688 
1689 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1690 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 4> : tuple_type<A4> {
1691     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a4) {}
1692     typename tuple_type<A4>::reference get() { return m_x; }
1693     typename tuple_type<A4>::const_reference get() const { return m_x; }
1694 private:
1695     typename tuple_type<A4>::reference m_x;
1696 };
1697 
1698 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1699 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 5> : tuple_type<A5> {
1700     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a5) {}
1701     typename tuple_type<A5>::reference get() { return m_x; }
1702     typename tuple_type<A5>::const_reference get() const { return m_x; }
1703 private:
1704     typename tuple_type<A5>::reference m_x;
1705 };
1706 
1707 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1708 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 6> : tuple_type<A6> {
1709     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a6) {}
1710     typename tuple_type<A6>::reference get() { return m_x; }
1711     typename tuple_type<A6>::const_reference get() const { return m_x; }
1712 private:
1713     typename tuple_type<A6>::reference m_x;
1714 };
1715 
1716 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1717 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 7> : tuple_type<A7> {
1718     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a7) {}
1719     typename tuple_type<A7>::reference get() { return m_x; }
1720     typename tuple_type<A7>::const_reference get() const { return m_x; }
1721 private:
1722     typename tuple_type<A7>::reference m_x;
1723 };
1724 
1725 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1726 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 8> : tuple_type<A8> {
1727     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a8) {}
1728     typename tuple_type<A8>::reference get() { return m_x; }
1729     typename tuple_type<A8>::const_reference get() const { return m_x; }
1730 private:
1731     typename tuple_type<A8>::reference m_x;
1732 };
1733 
1734 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1735 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 9> : tuple_type<A9> {
1736     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a9) {}
1737     typename tuple_type<A9>::reference get() { return m_x; }
1738     typename tuple_type<A9>::const_reference get() const { return m_x; }
1739 private:
1740     typename tuple_type<A9>::reference m_x;
1741 };
1742 
1743 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1744 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 10> : tuple_type<A10> {
1745     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a10) {}
1746     typename tuple_type<A10>::reference get() { return m_x; }
1747     typename tuple_type<A10>::const_reference get() const { return m_x; }
1748 private:
1749     typename tuple_type<A10>::reference m_x;
1750 };
1751 
1752 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1753 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 11> : tuple_type<A11> {
1754     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a11) {}
1755     typename tuple_type<A11>::reference get() { return m_x; }
1756     typename tuple_type<A11>::const_reference get() const { return m_x; }
1757 private:
1758     typename tuple_type<A11>::reference m_x;
1759 };
1760 
1761 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1762 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 12> : tuple_type<A12> {
1763     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a12) {}
1764     typename tuple_type<A12>::reference get() { return m_x; }
1765     typename tuple_type<A12>::const_reference get() const { return m_x; }
1766 private:
1767     typename tuple_type<A12>::reference m_x;
1768 };
1769 
1770 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1771 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 13> : tuple_type<A13> {
1772     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a13) {}
1773     typename tuple_type<A13>::reference get() { return m_x; }
1774     typename tuple_type<A13>::const_reference get() const { return m_x; }
1775 private:
1776     typename tuple_type<A13>::reference m_x;
1777 };
1778 
1779 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1780 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 14> : tuple_type<A14> {
1781     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a14) {}
1782     typename tuple_type<A14>::reference get() { return m_x; }
1783     typename tuple_type<A14>::const_reference get() const { return m_x; }
1784 private:
1785     typename tuple_type<A14>::reference m_x;
1786 };
1787 
1788 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1789 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 15> : tuple_type<A15> {
1790     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a15) {}
1791     typename tuple_type<A15>::reference get() { return m_x; }
1792     typename tuple_type<A15>::const_reference get() const { return m_x; }
1793 private:
1794     typename tuple_type<A15>::reference m_x;
1795 };
1796 
1797 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1798 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 16> : tuple_type<A16> {
1799     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a16) {}
1800     typename tuple_type<A16>::reference get() { return m_x; }
1801     typename tuple_type<A16>::const_reference get() const { return m_x; }
1802 private:
1803     typename tuple_type<A16>::reference m_x;
1804 };
1805 
1806 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1807 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 17> : tuple_type<A17> {
1808     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a17) {}
1809     typename tuple_type<A17>::reference get() { return m_x; }
1810     typename tuple_type<A17>::const_reference get() const { return m_x; }
1811 private:
1812     typename tuple_type<A17>::reference m_x;
1813 };
1814 
1815 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1816 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 18> : tuple_type<A18> {
1817     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 >& x) : m_x(x.a18) {}
1818     typename tuple_type<A18>::reference get() { return m_x; }
1819     typename tuple_type<A18>::const_reference get() const { return m_x; }
1820 private:
1821     typename tuple_type<A18>::reference m_x;
1822 };
1823 
1824 
1825 
1826 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1827 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 0> : tuple_type<A0> {
1828     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a0) {}
1829     typename tuple_type<A0>::reference get() { return m_x; }
1830     typename tuple_type<A0>::const_reference get() const { return m_x; }
1831 private:
1832     typename tuple_type<A0>::reference m_x;
1833 };
1834 
1835 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1836 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 1> : tuple_type<A1> {
1837     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a1) {}
1838     typename tuple_type<A1>::reference get() { return m_x; }
1839     typename tuple_type<A1>::const_reference get() const { return m_x; }
1840 private:
1841     typename tuple_type<A1>::reference m_x;
1842 };
1843 
1844 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1845 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 2> : tuple_type<A2> {
1846     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a2) {}
1847     typename tuple_type<A2>::reference get() { return m_x; }
1848     typename tuple_type<A2>::const_reference get() const { return m_x; }
1849 private:
1850     typename tuple_type<A2>::reference m_x;
1851 };
1852 
1853 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1854 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 3> : tuple_type<A3> {
1855     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a3) {}
1856     typename tuple_type<A3>::reference get() { return m_x; }
1857     typename tuple_type<A3>::const_reference get() const { return m_x; }
1858 private:
1859     typename tuple_type<A3>::reference m_x;
1860 };
1861 
1862 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1863 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 4> : tuple_type<A4> {
1864     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a4) {}
1865     typename tuple_type<A4>::reference get() { return m_x; }
1866     typename tuple_type<A4>::const_reference get() const { return m_x; }
1867 private:
1868     typename tuple_type<A4>::reference m_x;
1869 };
1870 
1871 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1872 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 5> : tuple_type<A5> {
1873     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a5) {}
1874     typename tuple_type<A5>::reference get() { return m_x; }
1875     typename tuple_type<A5>::const_reference get() const { return m_x; }
1876 private:
1877     typename tuple_type<A5>::reference m_x;
1878 };
1879 
1880 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1881 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 6> : tuple_type<A6> {
1882     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a6) {}
1883     typename tuple_type<A6>::reference get() { return m_x; }
1884     typename tuple_type<A6>::const_reference get() const { return m_x; }
1885 private:
1886     typename tuple_type<A6>::reference m_x;
1887 };
1888 
1889 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1890 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 7> : tuple_type<A7> {
1891     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a7) {}
1892     typename tuple_type<A7>::reference get() { return m_x; }
1893     typename tuple_type<A7>::const_reference get() const { return m_x; }
1894 private:
1895     typename tuple_type<A7>::reference m_x;
1896 };
1897 
1898 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1899 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 8> : tuple_type<A8> {
1900     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a8) {}
1901     typename tuple_type<A8>::reference get() { return m_x; }
1902     typename tuple_type<A8>::const_reference get() const { return m_x; }
1903 private:
1904     typename tuple_type<A8>::reference m_x;
1905 };
1906 
1907 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1908 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 9> : tuple_type<A9> {
1909     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a9) {}
1910     typename tuple_type<A9>::reference get() { return m_x; }
1911     typename tuple_type<A9>::const_reference get() const { return m_x; }
1912 private:
1913     typename tuple_type<A9>::reference m_x;
1914 };
1915 
1916 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1917 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 10> : tuple_type<A10> {
1918     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a10) {}
1919     typename tuple_type<A10>::reference get() { return m_x; }
1920     typename tuple_type<A10>::const_reference get() const { return m_x; }
1921 private:
1922     typename tuple_type<A10>::reference m_x;
1923 };
1924 
1925 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1926 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 11> : tuple_type<A11> {
1927     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a11) {}
1928     typename tuple_type<A11>::reference get() { return m_x; }
1929     typename tuple_type<A11>::const_reference get() const { return m_x; }
1930 private:
1931     typename tuple_type<A11>::reference m_x;
1932 };
1933 
1934 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1935 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 12> : tuple_type<A12> {
1936     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a12) {}
1937     typename tuple_type<A12>::reference get() { return m_x; }
1938     typename tuple_type<A12>::const_reference get() const { return m_x; }
1939 private:
1940     typename tuple_type<A12>::reference m_x;
1941 };
1942 
1943 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1944 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 13> : tuple_type<A13> {
1945     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a13) {}
1946     typename tuple_type<A13>::reference get() { return m_x; }
1947     typename tuple_type<A13>::const_reference get() const { return m_x; }
1948 private:
1949     typename tuple_type<A13>::reference m_x;
1950 };
1951 
1952 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1953 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 14> : tuple_type<A14> {
1954     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a14) {}
1955     typename tuple_type<A14>::reference get() { return m_x; }
1956     typename tuple_type<A14>::const_reference get() const { return m_x; }
1957 private:
1958     typename tuple_type<A14>::reference m_x;
1959 };
1960 
1961 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1962 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 15> : tuple_type<A15> {
1963     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a15) {}
1964     typename tuple_type<A15>::reference get() { return m_x; }
1965     typename tuple_type<A15>::const_reference get() const { return m_x; }
1966 private:
1967     typename tuple_type<A15>::reference m_x;
1968 };
1969 
1970 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1971 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 16> : tuple_type<A16> {
1972     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a16) {}
1973     typename tuple_type<A16>::reference get() { return m_x; }
1974     typename tuple_type<A16>::const_reference get() const { return m_x; }
1975 private:
1976     typename tuple_type<A16>::reference m_x;
1977 };
1978 
1979 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1980 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 17> : tuple_type<A17> {
1981     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a17) {}
1982     typename tuple_type<A17>::reference get() { return m_x; }
1983     typename tuple_type<A17>::const_reference get() const { return m_x; }
1984 private:
1985     typename tuple_type<A17>::reference m_x;
1986 };
1987 
1988 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1989 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 18> : tuple_type<A18> {
1990     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a18) {}
1991     typename tuple_type<A18>::reference get() { return m_x; }
1992     typename tuple_type<A18>::const_reference get() const { return m_x; }
1993 private:
1994     typename tuple_type<A18>::reference m_x;
1995 };
1996 
1997 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1998 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 19> : tuple_type<A19> {
1999     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 >& x) : m_x(x.a19) {}
2000     typename tuple_type<A19>::reference get() { return m_x; }
2001     typename tuple_type<A19>::const_reference get() const { return m_x; }
2002 private:
2003     typename tuple_type<A19>::reference m_x;
2004 };
2005 
2006 
2007 
2008 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2009 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 0> : tuple_type<A0> {
2010     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a0) {}
2011     typename tuple_type<A0>::reference get() { return m_x; }
2012     typename tuple_type<A0>::const_reference get() const { return m_x; }
2013 private:
2014     typename tuple_type<A0>::reference m_x;
2015 };
2016 
2017 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2018 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 1> : tuple_type<A1> {
2019     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a1) {}
2020     typename tuple_type<A1>::reference get() { return m_x; }
2021     typename tuple_type<A1>::const_reference get() const { return m_x; }
2022 private:
2023     typename tuple_type<A1>::reference m_x;
2024 };
2025 
2026 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2027 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 2> : tuple_type<A2> {
2028     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a2) {}
2029     typename tuple_type<A2>::reference get() { return m_x; }
2030     typename tuple_type<A2>::const_reference get() const { return m_x; }
2031 private:
2032     typename tuple_type<A2>::reference m_x;
2033 };
2034 
2035 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2036 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 3> : tuple_type<A3> {
2037     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a3) {}
2038     typename tuple_type<A3>::reference get() { return m_x; }
2039     typename tuple_type<A3>::const_reference get() const { return m_x; }
2040 private:
2041     typename tuple_type<A3>::reference m_x;
2042 };
2043 
2044 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2045 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 4> : tuple_type<A4> {
2046     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a4) {}
2047     typename tuple_type<A4>::reference get() { return m_x; }
2048     typename tuple_type<A4>::const_reference get() const { return m_x; }
2049 private:
2050     typename tuple_type<A4>::reference m_x;
2051 };
2052 
2053 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2054 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 5> : tuple_type<A5> {
2055     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a5) {}
2056     typename tuple_type<A5>::reference get() { return m_x; }
2057     typename tuple_type<A5>::const_reference get() const { return m_x; }
2058 private:
2059     typename tuple_type<A5>::reference m_x;
2060 };
2061 
2062 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2063 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 6> : tuple_type<A6> {
2064     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a6) {}
2065     typename tuple_type<A6>::reference get() { return m_x; }
2066     typename tuple_type<A6>::const_reference get() const { return m_x; }
2067 private:
2068     typename tuple_type<A6>::reference m_x;
2069 };
2070 
2071 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2072 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 7> : tuple_type<A7> {
2073     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a7) {}
2074     typename tuple_type<A7>::reference get() { return m_x; }
2075     typename tuple_type<A7>::const_reference get() const { return m_x; }
2076 private:
2077     typename tuple_type<A7>::reference m_x;
2078 };
2079 
2080 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2081 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 8> : tuple_type<A8> {
2082     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a8) {}
2083     typename tuple_type<A8>::reference get() { return m_x; }
2084     typename tuple_type<A8>::const_reference get() const { return m_x; }
2085 private:
2086     typename tuple_type<A8>::reference m_x;
2087 };
2088 
2089 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2090 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 9> : tuple_type<A9> {
2091     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a9) {}
2092     typename tuple_type<A9>::reference get() { return m_x; }
2093     typename tuple_type<A9>::const_reference get() const { return m_x; }
2094 private:
2095     typename tuple_type<A9>::reference m_x;
2096 };
2097 
2098 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2099 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 10> : tuple_type<A10> {
2100     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a10) {}
2101     typename tuple_type<A10>::reference get() { return m_x; }
2102     typename tuple_type<A10>::const_reference get() const { return m_x; }
2103 private:
2104     typename tuple_type<A10>::reference m_x;
2105 };
2106 
2107 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2108 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 11> : tuple_type<A11> {
2109     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a11) {}
2110     typename tuple_type<A11>::reference get() { return m_x; }
2111     typename tuple_type<A11>::const_reference get() const { return m_x; }
2112 private:
2113     typename tuple_type<A11>::reference m_x;
2114 };
2115 
2116 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2117 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 12> : tuple_type<A12> {
2118     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a12) {}
2119     typename tuple_type<A12>::reference get() { return m_x; }
2120     typename tuple_type<A12>::const_reference get() const { return m_x; }
2121 private:
2122     typename tuple_type<A12>::reference m_x;
2123 };
2124 
2125 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2126 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 13> : tuple_type<A13> {
2127     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a13) {}
2128     typename tuple_type<A13>::reference get() { return m_x; }
2129     typename tuple_type<A13>::const_reference get() const { return m_x; }
2130 private:
2131     typename tuple_type<A13>::reference m_x;
2132 };
2133 
2134 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2135 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 14> : tuple_type<A14> {
2136     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a14) {}
2137     typename tuple_type<A14>::reference get() { return m_x; }
2138     typename tuple_type<A14>::const_reference get() const { return m_x; }
2139 private:
2140     typename tuple_type<A14>::reference m_x;
2141 };
2142 
2143 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2144 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 15> : tuple_type<A15> {
2145     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a15) {}
2146     typename tuple_type<A15>::reference get() { return m_x; }
2147     typename tuple_type<A15>::const_reference get() const { return m_x; }
2148 private:
2149     typename tuple_type<A15>::reference m_x;
2150 };
2151 
2152 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2153 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 16> : tuple_type<A16> {
2154     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a16) {}
2155     typename tuple_type<A16>::reference get() { return m_x; }
2156     typename tuple_type<A16>::const_reference get() const { return m_x; }
2157 private:
2158     typename tuple_type<A16>::reference m_x;
2159 };
2160 
2161 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2162 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 17> : tuple_type<A17> {
2163     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a17) {}
2164     typename tuple_type<A17>::reference get() { return m_x; }
2165     typename tuple_type<A17>::const_reference get() const { return m_x; }
2166 private:
2167     typename tuple_type<A17>::reference m_x;
2168 };
2169 
2170 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2171 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 18> : tuple_type<A18> {
2172     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a18) {}
2173     typename tuple_type<A18>::reference get() { return m_x; }
2174     typename tuple_type<A18>::const_reference get() const { return m_x; }
2175 private:
2176     typename tuple_type<A18>::reference m_x;
2177 };
2178 
2179 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2180 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 19> : tuple_type<A19> {
2181     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a19) {}
2182     typename tuple_type<A19>::reference get() { return m_x; }
2183     typename tuple_type<A19>::const_reference get() const { return m_x; }
2184 private:
2185     typename tuple_type<A19>::reference m_x;
2186 };
2187 
2188 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2189 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 20> : tuple_type<A20> {
2190     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 >& x) : m_x(x.a20) {}
2191     typename tuple_type<A20>::reference get() { return m_x; }
2192     typename tuple_type<A20>::const_reference get() const { return m_x; }
2193 private:
2194     typename tuple_type<A20>::reference m_x;
2195 };
2196 
2197 
2198 
2199 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2200 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 0> : tuple_type<A0> {
2201     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a0) {}
2202     typename tuple_type<A0>::reference get() { return m_x; }
2203     typename tuple_type<A0>::const_reference get() const { return m_x; }
2204 private:
2205     typename tuple_type<A0>::reference m_x;
2206 };
2207 
2208 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2209 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 1> : tuple_type<A1> {
2210     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a1) {}
2211     typename tuple_type<A1>::reference get() { return m_x; }
2212     typename tuple_type<A1>::const_reference get() const { return m_x; }
2213 private:
2214     typename tuple_type<A1>::reference m_x;
2215 };
2216 
2217 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2218 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 2> : tuple_type<A2> {
2219     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a2) {}
2220     typename tuple_type<A2>::reference get() { return m_x; }
2221     typename tuple_type<A2>::const_reference get() const { return m_x; }
2222 private:
2223     typename tuple_type<A2>::reference m_x;
2224 };
2225 
2226 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2227 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 3> : tuple_type<A3> {
2228     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a3) {}
2229     typename tuple_type<A3>::reference get() { return m_x; }
2230     typename tuple_type<A3>::const_reference get() const { return m_x; }
2231 private:
2232     typename tuple_type<A3>::reference m_x;
2233 };
2234 
2235 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2236 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 4> : tuple_type<A4> {
2237     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a4) {}
2238     typename tuple_type<A4>::reference get() { return m_x; }
2239     typename tuple_type<A4>::const_reference get() const { return m_x; }
2240 private:
2241     typename tuple_type<A4>::reference m_x;
2242 };
2243 
2244 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2245 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 5> : tuple_type<A5> {
2246     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a5) {}
2247     typename tuple_type<A5>::reference get() { return m_x; }
2248     typename tuple_type<A5>::const_reference get() const { return m_x; }
2249 private:
2250     typename tuple_type<A5>::reference m_x;
2251 };
2252 
2253 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2254 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 6> : tuple_type<A6> {
2255     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a6) {}
2256     typename tuple_type<A6>::reference get() { return m_x; }
2257     typename tuple_type<A6>::const_reference get() const { return m_x; }
2258 private:
2259     typename tuple_type<A6>::reference m_x;
2260 };
2261 
2262 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2263 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 7> : tuple_type<A7> {
2264     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a7) {}
2265     typename tuple_type<A7>::reference get() { return m_x; }
2266     typename tuple_type<A7>::const_reference get() const { return m_x; }
2267 private:
2268     typename tuple_type<A7>::reference m_x;
2269 };
2270 
2271 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2272 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 8> : tuple_type<A8> {
2273     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a8) {}
2274     typename tuple_type<A8>::reference get() { return m_x; }
2275     typename tuple_type<A8>::const_reference get() const { return m_x; }
2276 private:
2277     typename tuple_type<A8>::reference m_x;
2278 };
2279 
2280 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2281 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 9> : tuple_type<A9> {
2282     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a9) {}
2283     typename tuple_type<A9>::reference get() { return m_x; }
2284     typename tuple_type<A9>::const_reference get() const { return m_x; }
2285 private:
2286     typename tuple_type<A9>::reference m_x;
2287 };
2288 
2289 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2290 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 10> : tuple_type<A10> {
2291     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a10) {}
2292     typename tuple_type<A10>::reference get() { return m_x; }
2293     typename tuple_type<A10>::const_reference get() const { return m_x; }
2294 private:
2295     typename tuple_type<A10>::reference m_x;
2296 };
2297 
2298 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2299 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 11> : tuple_type<A11> {
2300     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a11) {}
2301     typename tuple_type<A11>::reference get() { return m_x; }
2302     typename tuple_type<A11>::const_reference get() const { return m_x; }
2303 private:
2304     typename tuple_type<A11>::reference m_x;
2305 };
2306 
2307 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2308 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 12> : tuple_type<A12> {
2309     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a12) {}
2310     typename tuple_type<A12>::reference get() { return m_x; }
2311     typename tuple_type<A12>::const_reference get() const { return m_x; }
2312 private:
2313     typename tuple_type<A12>::reference m_x;
2314 };
2315 
2316 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2317 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 13> : tuple_type<A13> {
2318     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a13) {}
2319     typename tuple_type<A13>::reference get() { return m_x; }
2320     typename tuple_type<A13>::const_reference get() const { return m_x; }
2321 private:
2322     typename tuple_type<A13>::reference m_x;
2323 };
2324 
2325 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2326 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 14> : tuple_type<A14> {
2327     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a14) {}
2328     typename tuple_type<A14>::reference get() { return m_x; }
2329     typename tuple_type<A14>::const_reference get() const { return m_x; }
2330 private:
2331     typename tuple_type<A14>::reference m_x;
2332 };
2333 
2334 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2335 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 15> : tuple_type<A15> {
2336     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a15) {}
2337     typename tuple_type<A15>::reference get() { return m_x; }
2338     typename tuple_type<A15>::const_reference get() const { return m_x; }
2339 private:
2340     typename tuple_type<A15>::reference m_x;
2341 };
2342 
2343 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2344 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 16> : tuple_type<A16> {
2345     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a16) {}
2346     typename tuple_type<A16>::reference get() { return m_x; }
2347     typename tuple_type<A16>::const_reference get() const { return m_x; }
2348 private:
2349     typename tuple_type<A16>::reference m_x;
2350 };
2351 
2352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2353 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 17> : tuple_type<A17> {
2354     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a17) {}
2355     typename tuple_type<A17>::reference get() { return m_x; }
2356     typename tuple_type<A17>::const_reference get() const { return m_x; }
2357 private:
2358     typename tuple_type<A17>::reference m_x;
2359 };
2360 
2361 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2362 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 18> : tuple_type<A18> {
2363     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a18) {}
2364     typename tuple_type<A18>::reference get() { return m_x; }
2365     typename tuple_type<A18>::const_reference get() const { return m_x; }
2366 private:
2367     typename tuple_type<A18>::reference m_x;
2368 };
2369 
2370 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2371 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 19> : tuple_type<A19> {
2372     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a19) {}
2373     typename tuple_type<A19>::reference get() { return m_x; }
2374     typename tuple_type<A19>::const_reference get() const { return m_x; }
2375 private:
2376     typename tuple_type<A19>::reference m_x;
2377 };
2378 
2379 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2380 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 20> : tuple_type<A20> {
2381     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a20) {}
2382     typename tuple_type<A20>::reference get() { return m_x; }
2383     typename tuple_type<A20>::const_reference get() const { return m_x; }
2384 private:
2385     typename tuple_type<A20>::reference m_x;
2386 };
2387 
2388 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2389 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 21> : tuple_type<A21> {
2390     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 >& x) : m_x(x.a21) {}
2391     typename tuple_type<A21>::reference get() { return m_x; }
2392     typename tuple_type<A21>::const_reference get() const { return m_x; }
2393 private:
2394     typename tuple_type<A21>::reference m_x;
2395 };
2396 
2397 
2398 
2399 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2400 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 0> : tuple_type<A0> {
2401     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a0) {}
2402     typename tuple_type<A0>::reference get() { return m_x; }
2403     typename tuple_type<A0>::const_reference get() const { return m_x; }
2404 private:
2405     typename tuple_type<A0>::reference m_x;
2406 };
2407 
2408 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2409 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 1> : tuple_type<A1> {
2410     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a1) {}
2411     typename tuple_type<A1>::reference get() { return m_x; }
2412     typename tuple_type<A1>::const_reference get() const { return m_x; }
2413 private:
2414     typename tuple_type<A1>::reference m_x;
2415 };
2416 
2417 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2418 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 2> : tuple_type<A2> {
2419     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a2) {}
2420     typename tuple_type<A2>::reference get() { return m_x; }
2421     typename tuple_type<A2>::const_reference get() const { return m_x; }
2422 private:
2423     typename tuple_type<A2>::reference m_x;
2424 };
2425 
2426 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2427 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 3> : tuple_type<A3> {
2428     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a3) {}
2429     typename tuple_type<A3>::reference get() { return m_x; }
2430     typename tuple_type<A3>::const_reference get() const { return m_x; }
2431 private:
2432     typename tuple_type<A3>::reference m_x;
2433 };
2434 
2435 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2436 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 4> : tuple_type<A4> {
2437     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a4) {}
2438     typename tuple_type<A4>::reference get() { return m_x; }
2439     typename tuple_type<A4>::const_reference get() const { return m_x; }
2440 private:
2441     typename tuple_type<A4>::reference m_x;
2442 };
2443 
2444 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2445 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 5> : tuple_type<A5> {
2446     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a5) {}
2447     typename tuple_type<A5>::reference get() { return m_x; }
2448     typename tuple_type<A5>::const_reference get() const { return m_x; }
2449 private:
2450     typename tuple_type<A5>::reference m_x;
2451 };
2452 
2453 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2454 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 6> : tuple_type<A6> {
2455     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a6) {}
2456     typename tuple_type<A6>::reference get() { return m_x; }
2457     typename tuple_type<A6>::const_reference get() const { return m_x; }
2458 private:
2459     typename tuple_type<A6>::reference m_x;
2460 };
2461 
2462 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2463 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 7> : tuple_type<A7> {
2464     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a7) {}
2465     typename tuple_type<A7>::reference get() { return m_x; }
2466     typename tuple_type<A7>::const_reference get() const { return m_x; }
2467 private:
2468     typename tuple_type<A7>::reference m_x;
2469 };
2470 
2471 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2472 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 8> : tuple_type<A8> {
2473     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a8) {}
2474     typename tuple_type<A8>::reference get() { return m_x; }
2475     typename tuple_type<A8>::const_reference get() const { return m_x; }
2476 private:
2477     typename tuple_type<A8>::reference m_x;
2478 };
2479 
2480 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2481 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 9> : tuple_type<A9> {
2482     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a9) {}
2483     typename tuple_type<A9>::reference get() { return m_x; }
2484     typename tuple_type<A9>::const_reference get() const { return m_x; }
2485 private:
2486     typename tuple_type<A9>::reference m_x;
2487 };
2488 
2489 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2490 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 10> : tuple_type<A10> {
2491     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a10) {}
2492     typename tuple_type<A10>::reference get() { return m_x; }
2493     typename tuple_type<A10>::const_reference get() const { return m_x; }
2494 private:
2495     typename tuple_type<A10>::reference m_x;
2496 };
2497 
2498 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2499 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 11> : tuple_type<A11> {
2500     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a11) {}
2501     typename tuple_type<A11>::reference get() { return m_x; }
2502     typename tuple_type<A11>::const_reference get() const { return m_x; }
2503 private:
2504     typename tuple_type<A11>::reference m_x;
2505 };
2506 
2507 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2508 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 12> : tuple_type<A12> {
2509     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a12) {}
2510     typename tuple_type<A12>::reference get() { return m_x; }
2511     typename tuple_type<A12>::const_reference get() const { return m_x; }
2512 private:
2513     typename tuple_type<A12>::reference m_x;
2514 };
2515 
2516 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2517 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 13> : tuple_type<A13> {
2518     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a13) {}
2519     typename tuple_type<A13>::reference get() { return m_x; }
2520     typename tuple_type<A13>::const_reference get() const { return m_x; }
2521 private:
2522     typename tuple_type<A13>::reference m_x;
2523 };
2524 
2525 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2526 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 14> : tuple_type<A14> {
2527     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a14) {}
2528     typename tuple_type<A14>::reference get() { return m_x; }
2529     typename tuple_type<A14>::const_reference get() const { return m_x; }
2530 private:
2531     typename tuple_type<A14>::reference m_x;
2532 };
2533 
2534 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2535 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 15> : tuple_type<A15> {
2536     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a15) {}
2537     typename tuple_type<A15>::reference get() { return m_x; }
2538     typename tuple_type<A15>::const_reference get() const { return m_x; }
2539 private:
2540     typename tuple_type<A15>::reference m_x;
2541 };
2542 
2543 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2544 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 16> : tuple_type<A16> {
2545     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a16) {}
2546     typename tuple_type<A16>::reference get() { return m_x; }
2547     typename tuple_type<A16>::const_reference get() const { return m_x; }
2548 private:
2549     typename tuple_type<A16>::reference m_x;
2550 };
2551 
2552 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2553 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 17> : tuple_type<A17> {
2554     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a17) {}
2555     typename tuple_type<A17>::reference get() { return m_x; }
2556     typename tuple_type<A17>::const_reference get() const { return m_x; }
2557 private:
2558     typename tuple_type<A17>::reference m_x;
2559 };
2560 
2561 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2562 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 18> : tuple_type<A18> {
2563     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a18) {}
2564     typename tuple_type<A18>::reference get() { return m_x; }
2565     typename tuple_type<A18>::const_reference get() const { return m_x; }
2566 private:
2567     typename tuple_type<A18>::reference m_x;
2568 };
2569 
2570 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2571 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 19> : tuple_type<A19> {
2572     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a19) {}
2573     typename tuple_type<A19>::reference get() { return m_x; }
2574     typename tuple_type<A19>::const_reference get() const { return m_x; }
2575 private:
2576     typename tuple_type<A19>::reference m_x;
2577 };
2578 
2579 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2580 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 20> : tuple_type<A20> {
2581     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a20) {}
2582     typename tuple_type<A20>::reference get() { return m_x; }
2583     typename tuple_type<A20>::const_reference get() const { return m_x; }
2584 private:
2585     typename tuple_type<A20>::reference m_x;
2586 };
2587 
2588 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2589 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 21> : tuple_type<A21> {
2590     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a21) {}
2591     typename tuple_type<A21>::reference get() { return m_x; }
2592     typename tuple_type<A21>::const_reference get() const { return m_x; }
2593 private:
2594     typename tuple_type<A21>::reference m_x;
2595 };
2596 
2597 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2598 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 22> : tuple_type<A22> {
2599     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 >& x) : m_x(x.a22) {}
2600     typename tuple_type<A22>::reference get() { return m_x; }
2601     typename tuple_type<A22>::const_reference get() const { return m_x; }
2602 private:
2603     typename tuple_type<A22>::reference m_x;
2604 };
2605 
2606 
2607 
2608 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2609 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 0> : tuple_type<A0> {
2610     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a0) {}
2611     typename tuple_type<A0>::reference get() { return m_x; }
2612     typename tuple_type<A0>::const_reference get() const { return m_x; }
2613 private:
2614     typename tuple_type<A0>::reference m_x;
2615 };
2616 
2617 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2618 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 1> : tuple_type<A1> {
2619     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a1) {}
2620     typename tuple_type<A1>::reference get() { return m_x; }
2621     typename tuple_type<A1>::const_reference get() const { return m_x; }
2622 private:
2623     typename tuple_type<A1>::reference m_x;
2624 };
2625 
2626 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2627 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 2> : tuple_type<A2> {
2628     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a2) {}
2629     typename tuple_type<A2>::reference get() { return m_x; }
2630     typename tuple_type<A2>::const_reference get() const { return m_x; }
2631 private:
2632     typename tuple_type<A2>::reference m_x;
2633 };
2634 
2635 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2636 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 3> : tuple_type<A3> {
2637     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a3) {}
2638     typename tuple_type<A3>::reference get() { return m_x; }
2639     typename tuple_type<A3>::const_reference get() const { return m_x; }
2640 private:
2641     typename tuple_type<A3>::reference m_x;
2642 };
2643 
2644 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2645 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 4> : tuple_type<A4> {
2646     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a4) {}
2647     typename tuple_type<A4>::reference get() { return m_x; }
2648     typename tuple_type<A4>::const_reference get() const { return m_x; }
2649 private:
2650     typename tuple_type<A4>::reference m_x;
2651 };
2652 
2653 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2654 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 5> : tuple_type<A5> {
2655     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a5) {}
2656     typename tuple_type<A5>::reference get() { return m_x; }
2657     typename tuple_type<A5>::const_reference get() const { return m_x; }
2658 private:
2659     typename tuple_type<A5>::reference m_x;
2660 };
2661 
2662 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2663 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 6> : tuple_type<A6> {
2664     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a6) {}
2665     typename tuple_type<A6>::reference get() { return m_x; }
2666     typename tuple_type<A6>::const_reference get() const { return m_x; }
2667 private:
2668     typename tuple_type<A6>::reference m_x;
2669 };
2670 
2671 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2672 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 7> : tuple_type<A7> {
2673     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a7) {}
2674     typename tuple_type<A7>::reference get() { return m_x; }
2675     typename tuple_type<A7>::const_reference get() const { return m_x; }
2676 private:
2677     typename tuple_type<A7>::reference m_x;
2678 };
2679 
2680 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2681 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 8> : tuple_type<A8> {
2682     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a8) {}
2683     typename tuple_type<A8>::reference get() { return m_x; }
2684     typename tuple_type<A8>::const_reference get() const { return m_x; }
2685 private:
2686     typename tuple_type<A8>::reference m_x;
2687 };
2688 
2689 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2690 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 9> : tuple_type<A9> {
2691     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a9) {}
2692     typename tuple_type<A9>::reference get() { return m_x; }
2693     typename tuple_type<A9>::const_reference get() const { return m_x; }
2694 private:
2695     typename tuple_type<A9>::reference m_x;
2696 };
2697 
2698 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2699 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 10> : tuple_type<A10> {
2700     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a10) {}
2701     typename tuple_type<A10>::reference get() { return m_x; }
2702     typename tuple_type<A10>::const_reference get() const { return m_x; }
2703 private:
2704     typename tuple_type<A10>::reference m_x;
2705 };
2706 
2707 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2708 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 11> : tuple_type<A11> {
2709     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a11) {}
2710     typename tuple_type<A11>::reference get() { return m_x; }
2711     typename tuple_type<A11>::const_reference get() const { return m_x; }
2712 private:
2713     typename tuple_type<A11>::reference m_x;
2714 };
2715 
2716 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2717 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 12> : tuple_type<A12> {
2718     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a12) {}
2719     typename tuple_type<A12>::reference get() { return m_x; }
2720     typename tuple_type<A12>::const_reference get() const { return m_x; }
2721 private:
2722     typename tuple_type<A12>::reference m_x;
2723 };
2724 
2725 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2726 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 13> : tuple_type<A13> {
2727     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a13) {}
2728     typename tuple_type<A13>::reference get() { return m_x; }
2729     typename tuple_type<A13>::const_reference get() const { return m_x; }
2730 private:
2731     typename tuple_type<A13>::reference m_x;
2732 };
2733 
2734 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2735 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 14> : tuple_type<A14> {
2736     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a14) {}
2737     typename tuple_type<A14>::reference get() { return m_x; }
2738     typename tuple_type<A14>::const_reference get() const { return m_x; }
2739 private:
2740     typename tuple_type<A14>::reference m_x;
2741 };
2742 
2743 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2744 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 15> : tuple_type<A15> {
2745     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a15) {}
2746     typename tuple_type<A15>::reference get() { return m_x; }
2747     typename tuple_type<A15>::const_reference get() const { return m_x; }
2748 private:
2749     typename tuple_type<A15>::reference m_x;
2750 };
2751 
2752 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2753 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 16> : tuple_type<A16> {
2754     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a16) {}
2755     typename tuple_type<A16>::reference get() { return m_x; }
2756     typename tuple_type<A16>::const_reference get() const { return m_x; }
2757 private:
2758     typename tuple_type<A16>::reference m_x;
2759 };
2760 
2761 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2762 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 17> : tuple_type<A17> {
2763     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a17) {}
2764     typename tuple_type<A17>::reference get() { return m_x; }
2765     typename tuple_type<A17>::const_reference get() const { return m_x; }
2766 private:
2767     typename tuple_type<A17>::reference m_x;
2768 };
2769 
2770 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2771 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 18> : tuple_type<A18> {
2772     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a18) {}
2773     typename tuple_type<A18>::reference get() { return m_x; }
2774     typename tuple_type<A18>::const_reference get() const { return m_x; }
2775 private:
2776     typename tuple_type<A18>::reference m_x;
2777 };
2778 
2779 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2780 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 19> : tuple_type<A19> {
2781     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a19) {}
2782     typename tuple_type<A19>::reference get() { return m_x; }
2783     typename tuple_type<A19>::const_reference get() const { return m_x; }
2784 private:
2785     typename tuple_type<A19>::reference m_x;
2786 };
2787 
2788 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2789 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 20> : tuple_type<A20> {
2790     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a20) {}
2791     typename tuple_type<A20>::reference get() { return m_x; }
2792     typename tuple_type<A20>::const_reference get() const { return m_x; }
2793 private:
2794     typename tuple_type<A20>::reference m_x;
2795 };
2796 
2797 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2798 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 21> : tuple_type<A21> {
2799     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a21) {}
2800     typename tuple_type<A21>::reference get() { return m_x; }
2801     typename tuple_type<A21>::const_reference get() const { return m_x; }
2802 private:
2803     typename tuple_type<A21>::reference m_x;
2804 };
2805 
2806 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2807 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 22> : tuple_type<A22> {
2808     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a22) {}
2809     typename tuple_type<A22>::reference get() { return m_x; }
2810     typename tuple_type<A22>::const_reference get() const { return m_x; }
2811 private:
2812     typename tuple_type<A22>::reference m_x;
2813 };
2814 
2815 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2816 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 23> : tuple_type<A23> {
2817     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 >& x) : m_x(x.a23) {}
2818     typename tuple_type<A23>::reference get() { return m_x; }
2819     typename tuple_type<A23>::const_reference get() const { return m_x; }
2820 private:
2821     typename tuple_type<A23>::reference m_x;
2822 };
2823 
2824 
2825 
2826 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2827 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 0> : tuple_type<A0> {
2828     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a0) {}
2829     typename tuple_type<A0>::reference get() { return m_x; }
2830     typename tuple_type<A0>::const_reference get() const { return m_x; }
2831 private:
2832     typename tuple_type<A0>::reference m_x;
2833 };
2834 
2835 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2836 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 1> : tuple_type<A1> {
2837     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a1) {}
2838     typename tuple_type<A1>::reference get() { return m_x; }
2839     typename tuple_type<A1>::const_reference get() const { return m_x; }
2840 private:
2841     typename tuple_type<A1>::reference m_x;
2842 };
2843 
2844 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2845 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 2> : tuple_type<A2> {
2846     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a2) {}
2847     typename tuple_type<A2>::reference get() { return m_x; }
2848     typename tuple_type<A2>::const_reference get() const { return m_x; }
2849 private:
2850     typename tuple_type<A2>::reference m_x;
2851 };
2852 
2853 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2854 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 3> : tuple_type<A3> {
2855     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a3) {}
2856     typename tuple_type<A3>::reference get() { return m_x; }
2857     typename tuple_type<A3>::const_reference get() const { return m_x; }
2858 private:
2859     typename tuple_type<A3>::reference m_x;
2860 };
2861 
2862 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2863 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 4> : tuple_type<A4> {
2864     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a4) {}
2865     typename tuple_type<A4>::reference get() { return m_x; }
2866     typename tuple_type<A4>::const_reference get() const { return m_x; }
2867 private:
2868     typename tuple_type<A4>::reference m_x;
2869 };
2870 
2871 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2872 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 5> : tuple_type<A5> {
2873     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a5) {}
2874     typename tuple_type<A5>::reference get() { return m_x; }
2875     typename tuple_type<A5>::const_reference get() const { return m_x; }
2876 private:
2877     typename tuple_type<A5>::reference m_x;
2878 };
2879 
2880 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2881 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 6> : tuple_type<A6> {
2882     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a6) {}
2883     typename tuple_type<A6>::reference get() { return m_x; }
2884     typename tuple_type<A6>::const_reference get() const { return m_x; }
2885 private:
2886     typename tuple_type<A6>::reference m_x;
2887 };
2888 
2889 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2890 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 7> : tuple_type<A7> {
2891     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a7) {}
2892     typename tuple_type<A7>::reference get() { return m_x; }
2893     typename tuple_type<A7>::const_reference get() const { return m_x; }
2894 private:
2895     typename tuple_type<A7>::reference m_x;
2896 };
2897 
2898 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2899 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 8> : tuple_type<A8> {
2900     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a8) {}
2901     typename tuple_type<A8>::reference get() { return m_x; }
2902     typename tuple_type<A8>::const_reference get() const { return m_x; }
2903 private:
2904     typename tuple_type<A8>::reference m_x;
2905 };
2906 
2907 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2908 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 9> : tuple_type<A9> {
2909     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a9) {}
2910     typename tuple_type<A9>::reference get() { return m_x; }
2911     typename tuple_type<A9>::const_reference get() const { return m_x; }
2912 private:
2913     typename tuple_type<A9>::reference m_x;
2914 };
2915 
2916 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2917 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 10> : tuple_type<A10> {
2918     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a10) {}
2919     typename tuple_type<A10>::reference get() { return m_x; }
2920     typename tuple_type<A10>::const_reference get() const { return m_x; }
2921 private:
2922     typename tuple_type<A10>::reference m_x;
2923 };
2924 
2925 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2926 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 11> : tuple_type<A11> {
2927     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a11) {}
2928     typename tuple_type<A11>::reference get() { return m_x; }
2929     typename tuple_type<A11>::const_reference get() const { return m_x; }
2930 private:
2931     typename tuple_type<A11>::reference m_x;
2932 };
2933 
2934 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2935 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 12> : tuple_type<A12> {
2936     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a12) {}
2937     typename tuple_type<A12>::reference get() { return m_x; }
2938     typename tuple_type<A12>::const_reference get() const { return m_x; }
2939 private:
2940     typename tuple_type<A12>::reference m_x;
2941 };
2942 
2943 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2944 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 13> : tuple_type<A13> {
2945     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a13) {}
2946     typename tuple_type<A13>::reference get() { return m_x; }
2947     typename tuple_type<A13>::const_reference get() const { return m_x; }
2948 private:
2949     typename tuple_type<A13>::reference m_x;
2950 };
2951 
2952 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2953 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 14> : tuple_type<A14> {
2954     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a14) {}
2955     typename tuple_type<A14>::reference get() { return m_x; }
2956     typename tuple_type<A14>::const_reference get() const { return m_x; }
2957 private:
2958     typename tuple_type<A14>::reference m_x;
2959 };
2960 
2961 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2962 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 15> : tuple_type<A15> {
2963     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a15) {}
2964     typename tuple_type<A15>::reference get() { return m_x; }
2965     typename tuple_type<A15>::const_reference get() const { return m_x; }
2966 private:
2967     typename tuple_type<A15>::reference m_x;
2968 };
2969 
2970 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2971 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 16> : tuple_type<A16> {
2972     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a16) {}
2973     typename tuple_type<A16>::reference get() { return m_x; }
2974     typename tuple_type<A16>::const_reference get() const { return m_x; }
2975 private:
2976     typename tuple_type<A16>::reference m_x;
2977 };
2978 
2979 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2980 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 17> : tuple_type<A17> {
2981     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a17) {}
2982     typename tuple_type<A17>::reference get() { return m_x; }
2983     typename tuple_type<A17>::const_reference get() const { return m_x; }
2984 private:
2985     typename tuple_type<A17>::reference m_x;
2986 };
2987 
2988 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2989 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 18> : tuple_type<A18> {
2990     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a18) {}
2991     typename tuple_type<A18>::reference get() { return m_x; }
2992     typename tuple_type<A18>::const_reference get() const { return m_x; }
2993 private:
2994     typename tuple_type<A18>::reference m_x;
2995 };
2996 
2997 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2998 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 19> : tuple_type<A19> {
2999     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a19) {}
3000     typename tuple_type<A19>::reference get() { return m_x; }
3001     typename tuple_type<A19>::const_reference get() const { return m_x; }
3002 private:
3003     typename tuple_type<A19>::reference m_x;
3004 };
3005 
3006 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3007 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 20> : tuple_type<A20> {
3008     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a20) {}
3009     typename tuple_type<A20>::reference get() { return m_x; }
3010     typename tuple_type<A20>::const_reference get() const { return m_x; }
3011 private:
3012     typename tuple_type<A20>::reference m_x;
3013 };
3014 
3015 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3016 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 21> : tuple_type<A21> {
3017     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a21) {}
3018     typename tuple_type<A21>::reference get() { return m_x; }
3019     typename tuple_type<A21>::const_reference get() const { return m_x; }
3020 private:
3021     typename tuple_type<A21>::reference m_x;
3022 };
3023 
3024 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3025 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 22> : tuple_type<A22> {
3026     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a22) {}
3027     typename tuple_type<A22>::reference get() { return m_x; }
3028     typename tuple_type<A22>::const_reference get() const { return m_x; }
3029 private:
3030     typename tuple_type<A22>::reference m_x;
3031 };
3032 
3033 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3034 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 23> : tuple_type<A23> {
3035     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a23) {}
3036     typename tuple_type<A23>::reference get() { return m_x; }
3037     typename tuple_type<A23>::const_reference get() const { return m_x; }
3038 private:
3039     typename tuple_type<A23>::reference m_x;
3040 };
3041 
3042 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3043 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 24> : tuple_type<A24> {
3044     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 >& x) : m_x(x.a24) {}
3045     typename tuple_type<A24>::reference get() { return m_x; }
3046     typename tuple_type<A24>::const_reference get() const { return m_x; }
3047 private:
3048     typename tuple_type<A24>::reference m_x;
3049 };
3050 
3051 
3052 
3053 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3054 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 0> : tuple_type<A0> {
3055     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a0) {}
3056     typename tuple_type<A0>::reference get() { return m_x; }
3057     typename tuple_type<A0>::const_reference get() const { return m_x; }
3058 private:
3059     typename tuple_type<A0>::reference m_x;
3060 };
3061 
3062 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3063 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 1> : tuple_type<A1> {
3064     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a1) {}
3065     typename tuple_type<A1>::reference get() { return m_x; }
3066     typename tuple_type<A1>::const_reference get() const { return m_x; }
3067 private:
3068     typename tuple_type<A1>::reference m_x;
3069 };
3070 
3071 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3072 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 2> : tuple_type<A2> {
3073     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a2) {}
3074     typename tuple_type<A2>::reference get() { return m_x; }
3075     typename tuple_type<A2>::const_reference get() const { return m_x; }
3076 private:
3077     typename tuple_type<A2>::reference m_x;
3078 };
3079 
3080 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3081 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 3> : tuple_type<A3> {
3082     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a3) {}
3083     typename tuple_type<A3>::reference get() { return m_x; }
3084     typename tuple_type<A3>::const_reference get() const { return m_x; }
3085 private:
3086     typename tuple_type<A3>::reference m_x;
3087 };
3088 
3089 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3090 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 4> : tuple_type<A4> {
3091     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a4) {}
3092     typename tuple_type<A4>::reference get() { return m_x; }
3093     typename tuple_type<A4>::const_reference get() const { return m_x; }
3094 private:
3095     typename tuple_type<A4>::reference m_x;
3096 };
3097 
3098 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3099 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 5> : tuple_type<A5> {
3100     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a5) {}
3101     typename tuple_type<A5>::reference get() { return m_x; }
3102     typename tuple_type<A5>::const_reference get() const { return m_x; }
3103 private:
3104     typename tuple_type<A5>::reference m_x;
3105 };
3106 
3107 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3108 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 6> : tuple_type<A6> {
3109     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a6) {}
3110     typename tuple_type<A6>::reference get() { return m_x; }
3111     typename tuple_type<A6>::const_reference get() const { return m_x; }
3112 private:
3113     typename tuple_type<A6>::reference m_x;
3114 };
3115 
3116 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3117 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 7> : tuple_type<A7> {
3118     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a7) {}
3119     typename tuple_type<A7>::reference get() { return m_x; }
3120     typename tuple_type<A7>::const_reference get() const { return m_x; }
3121 private:
3122     typename tuple_type<A7>::reference m_x;
3123 };
3124 
3125 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3126 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 8> : tuple_type<A8> {
3127     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a8) {}
3128     typename tuple_type<A8>::reference get() { return m_x; }
3129     typename tuple_type<A8>::const_reference get() const { return m_x; }
3130 private:
3131     typename tuple_type<A8>::reference m_x;
3132 };
3133 
3134 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3135 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 9> : tuple_type<A9> {
3136     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a9) {}
3137     typename tuple_type<A9>::reference get() { return m_x; }
3138     typename tuple_type<A9>::const_reference get() const { return m_x; }
3139 private:
3140     typename tuple_type<A9>::reference m_x;
3141 };
3142 
3143 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3144 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 10> : tuple_type<A10> {
3145     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a10) {}
3146     typename tuple_type<A10>::reference get() { return m_x; }
3147     typename tuple_type<A10>::const_reference get() const { return m_x; }
3148 private:
3149     typename tuple_type<A10>::reference m_x;
3150 };
3151 
3152 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3153 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 11> : tuple_type<A11> {
3154     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a11) {}
3155     typename tuple_type<A11>::reference get() { return m_x; }
3156     typename tuple_type<A11>::const_reference get() const { return m_x; }
3157 private:
3158     typename tuple_type<A11>::reference m_x;
3159 };
3160 
3161 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3162 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 12> : tuple_type<A12> {
3163     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a12) {}
3164     typename tuple_type<A12>::reference get() { return m_x; }
3165     typename tuple_type<A12>::const_reference get() const { return m_x; }
3166 private:
3167     typename tuple_type<A12>::reference m_x;
3168 };
3169 
3170 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3171 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 13> : tuple_type<A13> {
3172     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a13) {}
3173     typename tuple_type<A13>::reference get() { return m_x; }
3174     typename tuple_type<A13>::const_reference get() const { return m_x; }
3175 private:
3176     typename tuple_type<A13>::reference m_x;
3177 };
3178 
3179 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3180 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 14> : tuple_type<A14> {
3181     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a14) {}
3182     typename tuple_type<A14>::reference get() { return m_x; }
3183     typename tuple_type<A14>::const_reference get() const { return m_x; }
3184 private:
3185     typename tuple_type<A14>::reference m_x;
3186 };
3187 
3188 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3189 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 15> : tuple_type<A15> {
3190     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a15) {}
3191     typename tuple_type<A15>::reference get() { return m_x; }
3192     typename tuple_type<A15>::const_reference get() const { return m_x; }
3193 private:
3194     typename tuple_type<A15>::reference m_x;
3195 };
3196 
3197 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3198 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 16> : tuple_type<A16> {
3199     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a16) {}
3200     typename tuple_type<A16>::reference get() { return m_x; }
3201     typename tuple_type<A16>::const_reference get() const { return m_x; }
3202 private:
3203     typename tuple_type<A16>::reference m_x;
3204 };
3205 
3206 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3207 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 17> : tuple_type<A17> {
3208     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a17) {}
3209     typename tuple_type<A17>::reference get() { return m_x; }
3210     typename tuple_type<A17>::const_reference get() const { return m_x; }
3211 private:
3212     typename tuple_type<A17>::reference m_x;
3213 };
3214 
3215 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3216 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 18> : tuple_type<A18> {
3217     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a18) {}
3218     typename tuple_type<A18>::reference get() { return m_x; }
3219     typename tuple_type<A18>::const_reference get() const { return m_x; }
3220 private:
3221     typename tuple_type<A18>::reference m_x;
3222 };
3223 
3224 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3225 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 19> : tuple_type<A19> {
3226     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a19) {}
3227     typename tuple_type<A19>::reference get() { return m_x; }
3228     typename tuple_type<A19>::const_reference get() const { return m_x; }
3229 private:
3230     typename tuple_type<A19>::reference m_x;
3231 };
3232 
3233 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3234 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 20> : tuple_type<A20> {
3235     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a20) {}
3236     typename tuple_type<A20>::reference get() { return m_x; }
3237     typename tuple_type<A20>::const_reference get() const { return m_x; }
3238 private:
3239     typename tuple_type<A20>::reference m_x;
3240 };
3241 
3242 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3243 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 21> : tuple_type<A21> {
3244     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a21) {}
3245     typename tuple_type<A21>::reference get() { return m_x; }
3246     typename tuple_type<A21>::const_reference get() const { return m_x; }
3247 private:
3248     typename tuple_type<A21>::reference m_x;
3249 };
3250 
3251 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3252 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 22> : tuple_type<A22> {
3253     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a22) {}
3254     typename tuple_type<A22>::reference get() { return m_x; }
3255     typename tuple_type<A22>::const_reference get() const { return m_x; }
3256 private:
3257     typename tuple_type<A22>::reference m_x;
3258 };
3259 
3260 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3261 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 23> : tuple_type<A23> {
3262     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a23) {}
3263     typename tuple_type<A23>::reference get() { return m_x; }
3264     typename tuple_type<A23>::const_reference get() const { return m_x; }
3265 private:
3266     typename tuple_type<A23>::reference m_x;
3267 };
3268 
3269 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3270 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 24> : tuple_type<A24> {
3271     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a24) {}
3272     typename tuple_type<A24>::reference get() { return m_x; }
3273     typename tuple_type<A24>::const_reference get() const { return m_x; }
3274 private:
3275     typename tuple_type<A24>::reference m_x;
3276 };
3277 
3278 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3279 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 25> : tuple_type<A25> {
3280     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 >& x) : m_x(x.a25) {}
3281     typename tuple_type<A25>::reference get() { return m_x; }
3282     typename tuple_type<A25>::const_reference get() const { return m_x; }
3283 private:
3284     typename tuple_type<A25>::reference m_x;
3285 };
3286 
3287 
3288 
3289 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3290 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 0> : tuple_type<A0> {
3291     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a0) {}
3292     typename tuple_type<A0>::reference get() { return m_x; }
3293     typename tuple_type<A0>::const_reference get() const { return m_x; }
3294 private:
3295     typename tuple_type<A0>::reference m_x;
3296 };
3297 
3298 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3299 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 1> : tuple_type<A1> {
3300     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a1) {}
3301     typename tuple_type<A1>::reference get() { return m_x; }
3302     typename tuple_type<A1>::const_reference get() const { return m_x; }
3303 private:
3304     typename tuple_type<A1>::reference m_x;
3305 };
3306 
3307 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3308 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 2> : tuple_type<A2> {
3309     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a2) {}
3310     typename tuple_type<A2>::reference get() { return m_x; }
3311     typename tuple_type<A2>::const_reference get() const { return m_x; }
3312 private:
3313     typename tuple_type<A2>::reference m_x;
3314 };
3315 
3316 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3317 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 3> : tuple_type<A3> {
3318     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a3) {}
3319     typename tuple_type<A3>::reference get() { return m_x; }
3320     typename tuple_type<A3>::const_reference get() const { return m_x; }
3321 private:
3322     typename tuple_type<A3>::reference m_x;
3323 };
3324 
3325 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3326 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 4> : tuple_type<A4> {
3327     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a4) {}
3328     typename tuple_type<A4>::reference get() { return m_x; }
3329     typename tuple_type<A4>::const_reference get() const { return m_x; }
3330 private:
3331     typename tuple_type<A4>::reference m_x;
3332 };
3333 
3334 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3335 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 5> : tuple_type<A5> {
3336     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a5) {}
3337     typename tuple_type<A5>::reference get() { return m_x; }
3338     typename tuple_type<A5>::const_reference get() const { return m_x; }
3339 private:
3340     typename tuple_type<A5>::reference m_x;
3341 };
3342 
3343 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3344 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 6> : tuple_type<A6> {
3345     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a6) {}
3346     typename tuple_type<A6>::reference get() { return m_x; }
3347     typename tuple_type<A6>::const_reference get() const { return m_x; }
3348 private:
3349     typename tuple_type<A6>::reference m_x;
3350 };
3351 
3352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3353 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 7> : tuple_type<A7> {
3354     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a7) {}
3355     typename tuple_type<A7>::reference get() { return m_x; }
3356     typename tuple_type<A7>::const_reference get() const { return m_x; }
3357 private:
3358     typename tuple_type<A7>::reference m_x;
3359 };
3360 
3361 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3362 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 8> : tuple_type<A8> {
3363     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a8) {}
3364     typename tuple_type<A8>::reference get() { return m_x; }
3365     typename tuple_type<A8>::const_reference get() const { return m_x; }
3366 private:
3367     typename tuple_type<A8>::reference m_x;
3368 };
3369 
3370 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3371 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 9> : tuple_type<A9> {
3372     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a9) {}
3373     typename tuple_type<A9>::reference get() { return m_x; }
3374     typename tuple_type<A9>::const_reference get() const { return m_x; }
3375 private:
3376     typename tuple_type<A9>::reference m_x;
3377 };
3378 
3379 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3380 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 10> : tuple_type<A10> {
3381     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a10) {}
3382     typename tuple_type<A10>::reference get() { return m_x; }
3383     typename tuple_type<A10>::const_reference get() const { return m_x; }
3384 private:
3385     typename tuple_type<A10>::reference m_x;
3386 };
3387 
3388 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3389 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 11> : tuple_type<A11> {
3390     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a11) {}
3391     typename tuple_type<A11>::reference get() { return m_x; }
3392     typename tuple_type<A11>::const_reference get() const { return m_x; }
3393 private:
3394     typename tuple_type<A11>::reference m_x;
3395 };
3396 
3397 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3398 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 12> : tuple_type<A12> {
3399     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a12) {}
3400     typename tuple_type<A12>::reference get() { return m_x; }
3401     typename tuple_type<A12>::const_reference get() const { return m_x; }
3402 private:
3403     typename tuple_type<A12>::reference m_x;
3404 };
3405 
3406 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3407 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 13> : tuple_type<A13> {
3408     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a13) {}
3409     typename tuple_type<A13>::reference get() { return m_x; }
3410     typename tuple_type<A13>::const_reference get() const { return m_x; }
3411 private:
3412     typename tuple_type<A13>::reference m_x;
3413 };
3414 
3415 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3416 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 14> : tuple_type<A14> {
3417     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a14) {}
3418     typename tuple_type<A14>::reference get() { return m_x; }
3419     typename tuple_type<A14>::const_reference get() const { return m_x; }
3420 private:
3421     typename tuple_type<A14>::reference m_x;
3422 };
3423 
3424 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3425 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 15> : tuple_type<A15> {
3426     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a15) {}
3427     typename tuple_type<A15>::reference get() { return m_x; }
3428     typename tuple_type<A15>::const_reference get() const { return m_x; }
3429 private:
3430     typename tuple_type<A15>::reference m_x;
3431 };
3432 
3433 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3434 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 16> : tuple_type<A16> {
3435     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a16) {}
3436     typename tuple_type<A16>::reference get() { return m_x; }
3437     typename tuple_type<A16>::const_reference get() const { return m_x; }
3438 private:
3439     typename tuple_type<A16>::reference m_x;
3440 };
3441 
3442 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3443 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 17> : tuple_type<A17> {
3444     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a17) {}
3445     typename tuple_type<A17>::reference get() { return m_x; }
3446     typename tuple_type<A17>::const_reference get() const { return m_x; }
3447 private:
3448     typename tuple_type<A17>::reference m_x;
3449 };
3450 
3451 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3452 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 18> : tuple_type<A18> {
3453     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a18) {}
3454     typename tuple_type<A18>::reference get() { return m_x; }
3455     typename tuple_type<A18>::const_reference get() const { return m_x; }
3456 private:
3457     typename tuple_type<A18>::reference m_x;
3458 };
3459 
3460 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3461 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 19> : tuple_type<A19> {
3462     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a19) {}
3463     typename tuple_type<A19>::reference get() { return m_x; }
3464     typename tuple_type<A19>::const_reference get() const { return m_x; }
3465 private:
3466     typename tuple_type<A19>::reference m_x;
3467 };
3468 
3469 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3470 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 20> : tuple_type<A20> {
3471     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a20) {}
3472     typename tuple_type<A20>::reference get() { return m_x; }
3473     typename tuple_type<A20>::const_reference get() const { return m_x; }
3474 private:
3475     typename tuple_type<A20>::reference m_x;
3476 };
3477 
3478 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3479 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 21> : tuple_type<A21> {
3480     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a21) {}
3481     typename tuple_type<A21>::reference get() { return m_x; }
3482     typename tuple_type<A21>::const_reference get() const { return m_x; }
3483 private:
3484     typename tuple_type<A21>::reference m_x;
3485 };
3486 
3487 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3488 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 22> : tuple_type<A22> {
3489     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a22) {}
3490     typename tuple_type<A22>::reference get() { return m_x; }
3491     typename tuple_type<A22>::const_reference get() const { return m_x; }
3492 private:
3493     typename tuple_type<A22>::reference m_x;
3494 };
3495 
3496 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3497 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 23> : tuple_type<A23> {
3498     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a23) {}
3499     typename tuple_type<A23>::reference get() { return m_x; }
3500     typename tuple_type<A23>::const_reference get() const { return m_x; }
3501 private:
3502     typename tuple_type<A23>::reference m_x;
3503 };
3504 
3505 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3506 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 24> : tuple_type<A24> {
3507     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a24) {}
3508     typename tuple_type<A24>::reference get() { return m_x; }
3509     typename tuple_type<A24>::const_reference get() const { return m_x; }
3510 private:
3511     typename tuple_type<A24>::reference m_x;
3512 };
3513 
3514 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3515 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 25> : tuple_type<A25> {
3516     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a25) {}
3517     typename tuple_type<A25>::reference get() { return m_x; }
3518     typename tuple_type<A25>::const_reference get() const { return m_x; }
3519 private:
3520     typename tuple_type<A25>::reference m_x;
3521 };
3522 
3523 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3524 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 26> : tuple_type<A26> {
3525     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 >& x) : m_x(x.a26) {}
3526     typename tuple_type<A26>::reference get() { return m_x; }
3527     typename tuple_type<A26>::const_reference get() const { return m_x; }
3528 private:
3529     typename tuple_type<A26>::reference m_x;
3530 };
3531 
3532 
3533 
3534 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3535 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 0> : tuple_type<A0> {
3536     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a0) {}
3537     typename tuple_type<A0>::reference get() { return m_x; }
3538     typename tuple_type<A0>::const_reference get() const { return m_x; }
3539 private:
3540     typename tuple_type<A0>::reference m_x;
3541 };
3542 
3543 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3544 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 1> : tuple_type<A1> {
3545     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a1) {}
3546     typename tuple_type<A1>::reference get() { return m_x; }
3547     typename tuple_type<A1>::const_reference get() const { return m_x; }
3548 private:
3549     typename tuple_type<A1>::reference m_x;
3550 };
3551 
3552 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3553 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 2> : tuple_type<A2> {
3554     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a2) {}
3555     typename tuple_type<A2>::reference get() { return m_x; }
3556     typename tuple_type<A2>::const_reference get() const { return m_x; }
3557 private:
3558     typename tuple_type<A2>::reference m_x;
3559 };
3560 
3561 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3562 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 3> : tuple_type<A3> {
3563     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a3) {}
3564     typename tuple_type<A3>::reference get() { return m_x; }
3565     typename tuple_type<A3>::const_reference get() const { return m_x; }
3566 private:
3567     typename tuple_type<A3>::reference m_x;
3568 };
3569 
3570 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3571 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 4> : tuple_type<A4> {
3572     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a4) {}
3573     typename tuple_type<A4>::reference get() { return m_x; }
3574     typename tuple_type<A4>::const_reference get() const { return m_x; }
3575 private:
3576     typename tuple_type<A4>::reference m_x;
3577 };
3578 
3579 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3580 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 5> : tuple_type<A5> {
3581     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a5) {}
3582     typename tuple_type<A5>::reference get() { return m_x; }
3583     typename tuple_type<A5>::const_reference get() const { return m_x; }
3584 private:
3585     typename tuple_type<A5>::reference m_x;
3586 };
3587 
3588 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3589 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 6> : tuple_type<A6> {
3590     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a6) {}
3591     typename tuple_type<A6>::reference get() { return m_x; }
3592     typename tuple_type<A6>::const_reference get() const { return m_x; }
3593 private:
3594     typename tuple_type<A6>::reference m_x;
3595 };
3596 
3597 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3598 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 7> : tuple_type<A7> {
3599     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a7) {}
3600     typename tuple_type<A7>::reference get() { return m_x; }
3601     typename tuple_type<A7>::const_reference get() const { return m_x; }
3602 private:
3603     typename tuple_type<A7>::reference m_x;
3604 };
3605 
3606 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3607 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 8> : tuple_type<A8> {
3608     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a8) {}
3609     typename tuple_type<A8>::reference get() { return m_x; }
3610     typename tuple_type<A8>::const_reference get() const { return m_x; }
3611 private:
3612     typename tuple_type<A8>::reference m_x;
3613 };
3614 
3615 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3616 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 9> : tuple_type<A9> {
3617     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a9) {}
3618     typename tuple_type<A9>::reference get() { return m_x; }
3619     typename tuple_type<A9>::const_reference get() const { return m_x; }
3620 private:
3621     typename tuple_type<A9>::reference m_x;
3622 };
3623 
3624 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3625 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 10> : tuple_type<A10> {
3626     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a10) {}
3627     typename tuple_type<A10>::reference get() { return m_x; }
3628     typename tuple_type<A10>::const_reference get() const { return m_x; }
3629 private:
3630     typename tuple_type<A10>::reference m_x;
3631 };
3632 
3633 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3634 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 11> : tuple_type<A11> {
3635     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a11) {}
3636     typename tuple_type<A11>::reference get() { return m_x; }
3637     typename tuple_type<A11>::const_reference get() const { return m_x; }
3638 private:
3639     typename tuple_type<A11>::reference m_x;
3640 };
3641 
3642 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3643 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 12> : tuple_type<A12> {
3644     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a12) {}
3645     typename tuple_type<A12>::reference get() { return m_x; }
3646     typename tuple_type<A12>::const_reference get() const { return m_x; }
3647 private:
3648     typename tuple_type<A12>::reference m_x;
3649 };
3650 
3651 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3652 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 13> : tuple_type<A13> {
3653     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a13) {}
3654     typename tuple_type<A13>::reference get() { return m_x; }
3655     typename tuple_type<A13>::const_reference get() const { return m_x; }
3656 private:
3657     typename tuple_type<A13>::reference m_x;
3658 };
3659 
3660 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3661 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 14> : tuple_type<A14> {
3662     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a14) {}
3663     typename tuple_type<A14>::reference get() { return m_x; }
3664     typename tuple_type<A14>::const_reference get() const { return m_x; }
3665 private:
3666     typename tuple_type<A14>::reference m_x;
3667 };
3668 
3669 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3670 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 15> : tuple_type<A15> {
3671     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a15) {}
3672     typename tuple_type<A15>::reference get() { return m_x; }
3673     typename tuple_type<A15>::const_reference get() const { return m_x; }
3674 private:
3675     typename tuple_type<A15>::reference m_x;
3676 };
3677 
3678 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3679 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 16> : tuple_type<A16> {
3680     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a16) {}
3681     typename tuple_type<A16>::reference get() { return m_x; }
3682     typename tuple_type<A16>::const_reference get() const { return m_x; }
3683 private:
3684     typename tuple_type<A16>::reference m_x;
3685 };
3686 
3687 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3688 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 17> : tuple_type<A17> {
3689     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a17) {}
3690     typename tuple_type<A17>::reference get() { return m_x; }
3691     typename tuple_type<A17>::const_reference get() const { return m_x; }
3692 private:
3693     typename tuple_type<A17>::reference m_x;
3694 };
3695 
3696 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3697 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 18> : tuple_type<A18> {
3698     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a18) {}
3699     typename tuple_type<A18>::reference get() { return m_x; }
3700     typename tuple_type<A18>::const_reference get() const { return m_x; }
3701 private:
3702     typename tuple_type<A18>::reference m_x;
3703 };
3704 
3705 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3706 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 19> : tuple_type<A19> {
3707     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a19) {}
3708     typename tuple_type<A19>::reference get() { return m_x; }
3709     typename tuple_type<A19>::const_reference get() const { return m_x; }
3710 private:
3711     typename tuple_type<A19>::reference m_x;
3712 };
3713 
3714 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3715 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 20> : tuple_type<A20> {
3716     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a20) {}
3717     typename tuple_type<A20>::reference get() { return m_x; }
3718     typename tuple_type<A20>::const_reference get() const { return m_x; }
3719 private:
3720     typename tuple_type<A20>::reference m_x;
3721 };
3722 
3723 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3724 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 21> : tuple_type<A21> {
3725     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a21) {}
3726     typename tuple_type<A21>::reference get() { return m_x; }
3727     typename tuple_type<A21>::const_reference get() const { return m_x; }
3728 private:
3729     typename tuple_type<A21>::reference m_x;
3730 };
3731 
3732 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3733 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 22> : tuple_type<A22> {
3734     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a22) {}
3735     typename tuple_type<A22>::reference get() { return m_x; }
3736     typename tuple_type<A22>::const_reference get() const { return m_x; }
3737 private:
3738     typename tuple_type<A22>::reference m_x;
3739 };
3740 
3741 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3742 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 23> : tuple_type<A23> {
3743     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a23) {}
3744     typename tuple_type<A23>::reference get() { return m_x; }
3745     typename tuple_type<A23>::const_reference get() const { return m_x; }
3746 private:
3747     typename tuple_type<A23>::reference m_x;
3748 };
3749 
3750 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3751 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 24> : tuple_type<A24> {
3752     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a24) {}
3753     typename tuple_type<A24>::reference get() { return m_x; }
3754     typename tuple_type<A24>::const_reference get() const { return m_x; }
3755 private:
3756     typename tuple_type<A24>::reference m_x;
3757 };
3758 
3759 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3760 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 25> : tuple_type<A25> {
3761     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a25) {}
3762     typename tuple_type<A25>::reference get() { return m_x; }
3763     typename tuple_type<A25>::const_reference get() const { return m_x; }
3764 private:
3765     typename tuple_type<A25>::reference m_x;
3766 };
3767 
3768 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3769 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 26> : tuple_type<A26> {
3770     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a26) {}
3771     typename tuple_type<A26>::reference get() { return m_x; }
3772     typename tuple_type<A26>::const_reference get() const { return m_x; }
3773 private:
3774     typename tuple_type<A26>::reference m_x;
3775 };
3776 
3777 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3778 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 27> : tuple_type<A27> {
3779     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 >& x) : m_x(x.a27) {}
3780     typename tuple_type<A27>::reference get() { return m_x; }
3781     typename tuple_type<A27>::const_reference get() const { return m_x; }
3782 private:
3783     typename tuple_type<A27>::reference m_x;
3784 };
3785 
3786 
3787 
3788 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3789 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 0> : tuple_type<A0> {
3790     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a0) {}
3791     typename tuple_type<A0>::reference get() { return m_x; }
3792     typename tuple_type<A0>::const_reference get() const { return m_x; }
3793 private:
3794     typename tuple_type<A0>::reference m_x;
3795 };
3796 
3797 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3798 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 1> : tuple_type<A1> {
3799     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a1) {}
3800     typename tuple_type<A1>::reference get() { return m_x; }
3801     typename tuple_type<A1>::const_reference get() const { return m_x; }
3802 private:
3803     typename tuple_type<A1>::reference m_x;
3804 };
3805 
3806 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3807 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 2> : tuple_type<A2> {
3808     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a2) {}
3809     typename tuple_type<A2>::reference get() { return m_x; }
3810     typename tuple_type<A2>::const_reference get() const { return m_x; }
3811 private:
3812     typename tuple_type<A2>::reference m_x;
3813 };
3814 
3815 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3816 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 3> : tuple_type<A3> {
3817     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a3) {}
3818     typename tuple_type<A3>::reference get() { return m_x; }
3819     typename tuple_type<A3>::const_reference get() const { return m_x; }
3820 private:
3821     typename tuple_type<A3>::reference m_x;
3822 };
3823 
3824 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3825 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 4> : tuple_type<A4> {
3826     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a4) {}
3827     typename tuple_type<A4>::reference get() { return m_x; }
3828     typename tuple_type<A4>::const_reference get() const { return m_x; }
3829 private:
3830     typename tuple_type<A4>::reference m_x;
3831 };
3832 
3833 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3834 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 5> : tuple_type<A5> {
3835     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a5) {}
3836     typename tuple_type<A5>::reference get() { return m_x; }
3837     typename tuple_type<A5>::const_reference get() const { return m_x; }
3838 private:
3839     typename tuple_type<A5>::reference m_x;
3840 };
3841 
3842 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3843 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 6> : tuple_type<A6> {
3844     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a6) {}
3845     typename tuple_type<A6>::reference get() { return m_x; }
3846     typename tuple_type<A6>::const_reference get() const { return m_x; }
3847 private:
3848     typename tuple_type<A6>::reference m_x;
3849 };
3850 
3851 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3852 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 7> : tuple_type<A7> {
3853     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a7) {}
3854     typename tuple_type<A7>::reference get() { return m_x; }
3855     typename tuple_type<A7>::const_reference get() const { return m_x; }
3856 private:
3857     typename tuple_type<A7>::reference m_x;
3858 };
3859 
3860 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3861 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 8> : tuple_type<A8> {
3862     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a8) {}
3863     typename tuple_type<A8>::reference get() { return m_x; }
3864     typename tuple_type<A8>::const_reference get() const { return m_x; }
3865 private:
3866     typename tuple_type<A8>::reference m_x;
3867 };
3868 
3869 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3870 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 9> : tuple_type<A9> {
3871     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a9) {}
3872     typename tuple_type<A9>::reference get() { return m_x; }
3873     typename tuple_type<A9>::const_reference get() const { return m_x; }
3874 private:
3875     typename tuple_type<A9>::reference m_x;
3876 };
3877 
3878 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3879 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 10> : tuple_type<A10> {
3880     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a10) {}
3881     typename tuple_type<A10>::reference get() { return m_x; }
3882     typename tuple_type<A10>::const_reference get() const { return m_x; }
3883 private:
3884     typename tuple_type<A10>::reference m_x;
3885 };
3886 
3887 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3888 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 11> : tuple_type<A11> {
3889     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a11) {}
3890     typename tuple_type<A11>::reference get() { return m_x; }
3891     typename tuple_type<A11>::const_reference get() const { return m_x; }
3892 private:
3893     typename tuple_type<A11>::reference m_x;
3894 };
3895 
3896 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3897 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 12> : tuple_type<A12> {
3898     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a12) {}
3899     typename tuple_type<A12>::reference get() { return m_x; }
3900     typename tuple_type<A12>::const_reference get() const { return m_x; }
3901 private:
3902     typename tuple_type<A12>::reference m_x;
3903 };
3904 
3905 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3906 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 13> : tuple_type<A13> {
3907     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a13) {}
3908     typename tuple_type<A13>::reference get() { return m_x; }
3909     typename tuple_type<A13>::const_reference get() const { return m_x; }
3910 private:
3911     typename tuple_type<A13>::reference m_x;
3912 };
3913 
3914 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3915 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 14> : tuple_type<A14> {
3916     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a14) {}
3917     typename tuple_type<A14>::reference get() { return m_x; }
3918     typename tuple_type<A14>::const_reference get() const { return m_x; }
3919 private:
3920     typename tuple_type<A14>::reference m_x;
3921 };
3922 
3923 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3924 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 15> : tuple_type<A15> {
3925     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a15) {}
3926     typename tuple_type<A15>::reference get() { return m_x; }
3927     typename tuple_type<A15>::const_reference get() const { return m_x; }
3928 private:
3929     typename tuple_type<A15>::reference m_x;
3930 };
3931 
3932 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3933 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 16> : tuple_type<A16> {
3934     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a16) {}
3935     typename tuple_type<A16>::reference get() { return m_x; }
3936     typename tuple_type<A16>::const_reference get() const { return m_x; }
3937 private:
3938     typename tuple_type<A16>::reference m_x;
3939 };
3940 
3941 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3942 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 17> : tuple_type<A17> {
3943     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a17) {}
3944     typename tuple_type<A17>::reference get() { return m_x; }
3945     typename tuple_type<A17>::const_reference get() const { return m_x; }
3946 private:
3947     typename tuple_type<A17>::reference m_x;
3948 };
3949 
3950 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3951 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 18> : tuple_type<A18> {
3952     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a18) {}
3953     typename tuple_type<A18>::reference get() { return m_x; }
3954     typename tuple_type<A18>::const_reference get() const { return m_x; }
3955 private:
3956     typename tuple_type<A18>::reference m_x;
3957 };
3958 
3959 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3960 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 19> : tuple_type<A19> {
3961     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a19) {}
3962     typename tuple_type<A19>::reference get() { return m_x; }
3963     typename tuple_type<A19>::const_reference get() const { return m_x; }
3964 private:
3965     typename tuple_type<A19>::reference m_x;
3966 };
3967 
3968 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3969 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 20> : tuple_type<A20> {
3970     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a20) {}
3971     typename tuple_type<A20>::reference get() { return m_x; }
3972     typename tuple_type<A20>::const_reference get() const { return m_x; }
3973 private:
3974     typename tuple_type<A20>::reference m_x;
3975 };
3976 
3977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3978 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 21> : tuple_type<A21> {
3979     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a21) {}
3980     typename tuple_type<A21>::reference get() { return m_x; }
3981     typename tuple_type<A21>::const_reference get() const { return m_x; }
3982 private:
3983     typename tuple_type<A21>::reference m_x;
3984 };
3985 
3986 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3987 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 22> : tuple_type<A22> {
3988     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a22) {}
3989     typename tuple_type<A22>::reference get() { return m_x; }
3990     typename tuple_type<A22>::const_reference get() const { return m_x; }
3991 private:
3992     typename tuple_type<A22>::reference m_x;
3993 };
3994 
3995 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3996 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 23> : tuple_type<A23> {
3997     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a23) {}
3998     typename tuple_type<A23>::reference get() { return m_x; }
3999     typename tuple_type<A23>::const_reference get() const { return m_x; }
4000 private:
4001     typename tuple_type<A23>::reference m_x;
4002 };
4003 
4004 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4005 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 24> : tuple_type<A24> {
4006     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a24) {}
4007     typename tuple_type<A24>::reference get() { return m_x; }
4008     typename tuple_type<A24>::const_reference get() const { return m_x; }
4009 private:
4010     typename tuple_type<A24>::reference m_x;
4011 };
4012 
4013 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4014 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 25> : tuple_type<A25> {
4015     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a25) {}
4016     typename tuple_type<A25>::reference get() { return m_x; }
4017     typename tuple_type<A25>::const_reference get() const { return m_x; }
4018 private:
4019     typename tuple_type<A25>::reference m_x;
4020 };
4021 
4022 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4023 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 26> : tuple_type<A26> {
4024     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a26) {}
4025     typename tuple_type<A26>::reference get() { return m_x; }
4026     typename tuple_type<A26>::const_reference get() const { return m_x; }
4027 private:
4028     typename tuple_type<A26>::reference m_x;
4029 };
4030 
4031 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4032 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 27> : tuple_type<A27> {
4033     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a27) {}
4034     typename tuple_type<A27>::reference get() { return m_x; }
4035     typename tuple_type<A27>::const_reference get() const { return m_x; }
4036 private:
4037     typename tuple_type<A27>::reference m_x;
4038 };
4039 
4040 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4041 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 28> : tuple_type<A28> {
4042     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 >& x) : m_x(x.a28) {}
4043     typename tuple_type<A28>::reference get() { return m_x; }
4044     typename tuple_type<A28>::const_reference get() const { return m_x; }
4045 private:
4046     typename tuple_type<A28>::reference m_x;
4047 };
4048 
4049 
4050 
4051 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4052 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 0> : tuple_type<A0> {
4053     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a0) {}
4054     typename tuple_type<A0>::reference get() { return m_x; }
4055     typename tuple_type<A0>::const_reference get() const { return m_x; }
4056 private:
4057     typename tuple_type<A0>::reference m_x;
4058 };
4059 
4060 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4061 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 1> : tuple_type<A1> {
4062     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a1) {}
4063     typename tuple_type<A1>::reference get() { return m_x; }
4064     typename tuple_type<A1>::const_reference get() const { return m_x; }
4065 private:
4066     typename tuple_type<A1>::reference m_x;
4067 };
4068 
4069 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4070 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 2> : tuple_type<A2> {
4071     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a2) {}
4072     typename tuple_type<A2>::reference get() { return m_x; }
4073     typename tuple_type<A2>::const_reference get() const { return m_x; }
4074 private:
4075     typename tuple_type<A2>::reference m_x;
4076 };
4077 
4078 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4079 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 3> : tuple_type<A3> {
4080     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a3) {}
4081     typename tuple_type<A3>::reference get() { return m_x; }
4082     typename tuple_type<A3>::const_reference get() const { return m_x; }
4083 private:
4084     typename tuple_type<A3>::reference m_x;
4085 };
4086 
4087 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4088 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 4> : tuple_type<A4> {
4089     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a4) {}
4090     typename tuple_type<A4>::reference get() { return m_x; }
4091     typename tuple_type<A4>::const_reference get() const { return m_x; }
4092 private:
4093     typename tuple_type<A4>::reference m_x;
4094 };
4095 
4096 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4097 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 5> : tuple_type<A5> {
4098     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a5) {}
4099     typename tuple_type<A5>::reference get() { return m_x; }
4100     typename tuple_type<A5>::const_reference get() const { return m_x; }
4101 private:
4102     typename tuple_type<A5>::reference m_x;
4103 };
4104 
4105 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4106 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 6> : tuple_type<A6> {
4107     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a6) {}
4108     typename tuple_type<A6>::reference get() { return m_x; }
4109     typename tuple_type<A6>::const_reference get() const { return m_x; }
4110 private:
4111     typename tuple_type<A6>::reference m_x;
4112 };
4113 
4114 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4115 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 7> : tuple_type<A7> {
4116     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a7) {}
4117     typename tuple_type<A7>::reference get() { return m_x; }
4118     typename tuple_type<A7>::const_reference get() const { return m_x; }
4119 private:
4120     typename tuple_type<A7>::reference m_x;
4121 };
4122 
4123 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4124 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 8> : tuple_type<A8> {
4125     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a8) {}
4126     typename tuple_type<A8>::reference get() { return m_x; }
4127     typename tuple_type<A8>::const_reference get() const { return m_x; }
4128 private:
4129     typename tuple_type<A8>::reference m_x;
4130 };
4131 
4132 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4133 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 9> : tuple_type<A9> {
4134     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a9) {}
4135     typename tuple_type<A9>::reference get() { return m_x; }
4136     typename tuple_type<A9>::const_reference get() const { return m_x; }
4137 private:
4138     typename tuple_type<A9>::reference m_x;
4139 };
4140 
4141 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4142 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 10> : tuple_type<A10> {
4143     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a10) {}
4144     typename tuple_type<A10>::reference get() { return m_x; }
4145     typename tuple_type<A10>::const_reference get() const { return m_x; }
4146 private:
4147     typename tuple_type<A10>::reference m_x;
4148 };
4149 
4150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4151 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 11> : tuple_type<A11> {
4152     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a11) {}
4153     typename tuple_type<A11>::reference get() { return m_x; }
4154     typename tuple_type<A11>::const_reference get() const { return m_x; }
4155 private:
4156     typename tuple_type<A11>::reference m_x;
4157 };
4158 
4159 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4160 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 12> : tuple_type<A12> {
4161     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a12) {}
4162     typename tuple_type<A12>::reference get() { return m_x; }
4163     typename tuple_type<A12>::const_reference get() const { return m_x; }
4164 private:
4165     typename tuple_type<A12>::reference m_x;
4166 };
4167 
4168 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4169 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 13> : tuple_type<A13> {
4170     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a13) {}
4171     typename tuple_type<A13>::reference get() { return m_x; }
4172     typename tuple_type<A13>::const_reference get() const { return m_x; }
4173 private:
4174     typename tuple_type<A13>::reference m_x;
4175 };
4176 
4177 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4178 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 14> : tuple_type<A14> {
4179     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a14) {}
4180     typename tuple_type<A14>::reference get() { return m_x; }
4181     typename tuple_type<A14>::const_reference get() const { return m_x; }
4182 private:
4183     typename tuple_type<A14>::reference m_x;
4184 };
4185 
4186 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4187 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 15> : tuple_type<A15> {
4188     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a15) {}
4189     typename tuple_type<A15>::reference get() { return m_x; }
4190     typename tuple_type<A15>::const_reference get() const { return m_x; }
4191 private:
4192     typename tuple_type<A15>::reference m_x;
4193 };
4194 
4195 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4196 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 16> : tuple_type<A16> {
4197     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a16) {}
4198     typename tuple_type<A16>::reference get() { return m_x; }
4199     typename tuple_type<A16>::const_reference get() const { return m_x; }
4200 private:
4201     typename tuple_type<A16>::reference m_x;
4202 };
4203 
4204 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4205 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 17> : tuple_type<A17> {
4206     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a17) {}
4207     typename tuple_type<A17>::reference get() { return m_x; }
4208     typename tuple_type<A17>::const_reference get() const { return m_x; }
4209 private:
4210     typename tuple_type<A17>::reference m_x;
4211 };
4212 
4213 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4214 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 18> : tuple_type<A18> {
4215     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a18) {}
4216     typename tuple_type<A18>::reference get() { return m_x; }
4217     typename tuple_type<A18>::const_reference get() const { return m_x; }
4218 private:
4219     typename tuple_type<A18>::reference m_x;
4220 };
4221 
4222 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4223 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 19> : tuple_type<A19> {
4224     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a19) {}
4225     typename tuple_type<A19>::reference get() { return m_x; }
4226     typename tuple_type<A19>::const_reference get() const { return m_x; }
4227 private:
4228     typename tuple_type<A19>::reference m_x;
4229 };
4230 
4231 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4232 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 20> : tuple_type<A20> {
4233     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a20) {}
4234     typename tuple_type<A20>::reference get() { return m_x; }
4235     typename tuple_type<A20>::const_reference get() const { return m_x; }
4236 private:
4237     typename tuple_type<A20>::reference m_x;
4238 };
4239 
4240 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4241 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 21> : tuple_type<A21> {
4242     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a21) {}
4243     typename tuple_type<A21>::reference get() { return m_x; }
4244     typename tuple_type<A21>::const_reference get() const { return m_x; }
4245 private:
4246     typename tuple_type<A21>::reference m_x;
4247 };
4248 
4249 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4250 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 22> : tuple_type<A22> {
4251     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a22) {}
4252     typename tuple_type<A22>::reference get() { return m_x; }
4253     typename tuple_type<A22>::const_reference get() const { return m_x; }
4254 private:
4255     typename tuple_type<A22>::reference m_x;
4256 };
4257 
4258 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4259 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 23> : tuple_type<A23> {
4260     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a23) {}
4261     typename tuple_type<A23>::reference get() { return m_x; }
4262     typename tuple_type<A23>::const_reference get() const { return m_x; }
4263 private:
4264     typename tuple_type<A23>::reference m_x;
4265 };
4266 
4267 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4268 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 24> : tuple_type<A24> {
4269     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a24) {}
4270     typename tuple_type<A24>::reference get() { return m_x; }
4271     typename tuple_type<A24>::const_reference get() const { return m_x; }
4272 private:
4273     typename tuple_type<A24>::reference m_x;
4274 };
4275 
4276 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4277 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 25> : tuple_type<A25> {
4278     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a25) {}
4279     typename tuple_type<A25>::reference get() { return m_x; }
4280     typename tuple_type<A25>::const_reference get() const { return m_x; }
4281 private:
4282     typename tuple_type<A25>::reference m_x;
4283 };
4284 
4285 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4286 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 26> : tuple_type<A26> {
4287     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a26) {}
4288     typename tuple_type<A26>::reference get() { return m_x; }
4289     typename tuple_type<A26>::const_reference get() const { return m_x; }
4290 private:
4291     typename tuple_type<A26>::reference m_x;
4292 };
4293 
4294 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4295 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 27> : tuple_type<A27> {
4296     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a27) {}
4297     typename tuple_type<A27>::reference get() { return m_x; }
4298     typename tuple_type<A27>::const_reference get() const { return m_x; }
4299 private:
4300     typename tuple_type<A27>::reference m_x;
4301 };
4302 
4303 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4304 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 28> : tuple_type<A28> {
4305     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a28) {}
4306     typename tuple_type<A28>::reference get() { return m_x; }
4307     typename tuple_type<A28>::const_reference get() const { return m_x; }
4308 private:
4309     typename tuple_type<A28>::reference m_x;
4310 };
4311 
4312 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
4313 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 29> : tuple_type<A29> {
4314     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 >& x) : m_x(x.a29) {}
4315     typename tuple_type<A29>::reference get() { return m_x; }
4316     typename tuple_type<A29>::const_reference get() const { return m_x; }
4317 private:
4318     typename tuple_type<A29>::reference m_x;
4319 };
4320 
4321 
4322 
4323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4324 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 0> : tuple_type<A0> {
4325     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a0) {}
4326     typename tuple_type<A0>::reference get() { return m_x; }
4327     typename tuple_type<A0>::const_reference get() const { return m_x; }
4328 private:
4329     typename tuple_type<A0>::reference m_x;
4330 };
4331 
4332 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4333 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 1> : tuple_type<A1> {
4334     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a1) {}
4335     typename tuple_type<A1>::reference get() { return m_x; }
4336     typename tuple_type<A1>::const_reference get() const { return m_x; }
4337 private:
4338     typename tuple_type<A1>::reference m_x;
4339 };
4340 
4341 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4342 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 2> : tuple_type<A2> {
4343     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a2) {}
4344     typename tuple_type<A2>::reference get() { return m_x; }
4345     typename tuple_type<A2>::const_reference get() const { return m_x; }
4346 private:
4347     typename tuple_type<A2>::reference m_x;
4348 };
4349 
4350 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4351 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 3> : tuple_type<A3> {
4352     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a3) {}
4353     typename tuple_type<A3>::reference get() { return m_x; }
4354     typename tuple_type<A3>::const_reference get() const { return m_x; }
4355 private:
4356     typename tuple_type<A3>::reference m_x;
4357 };
4358 
4359 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4360 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 4> : tuple_type<A4> {
4361     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a4) {}
4362     typename tuple_type<A4>::reference get() { return m_x; }
4363     typename tuple_type<A4>::const_reference get() const { return m_x; }
4364 private:
4365     typename tuple_type<A4>::reference m_x;
4366 };
4367 
4368 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4369 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 5> : tuple_type<A5> {
4370     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a5) {}
4371     typename tuple_type<A5>::reference get() { return m_x; }
4372     typename tuple_type<A5>::const_reference get() const { return m_x; }
4373 private:
4374     typename tuple_type<A5>::reference m_x;
4375 };
4376 
4377 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4378 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 6> : tuple_type<A6> {
4379     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a6) {}
4380     typename tuple_type<A6>::reference get() { return m_x; }
4381     typename tuple_type<A6>::const_reference get() const { return m_x; }
4382 private:
4383     typename tuple_type<A6>::reference m_x;
4384 };
4385 
4386 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4387 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 7> : tuple_type<A7> {
4388     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a7) {}
4389     typename tuple_type<A7>::reference get() { return m_x; }
4390     typename tuple_type<A7>::const_reference get() const { return m_x; }
4391 private:
4392     typename tuple_type<A7>::reference m_x;
4393 };
4394 
4395 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4396 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 8> : tuple_type<A8> {
4397     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a8) {}
4398     typename tuple_type<A8>::reference get() { return m_x; }
4399     typename tuple_type<A8>::const_reference get() const { return m_x; }
4400 private:
4401     typename tuple_type<A8>::reference m_x;
4402 };
4403 
4404 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4405 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 9> : tuple_type<A9> {
4406     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a9) {}
4407     typename tuple_type<A9>::reference get() { return m_x; }
4408     typename tuple_type<A9>::const_reference get() const { return m_x; }
4409 private:
4410     typename tuple_type<A9>::reference m_x;
4411 };
4412 
4413 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4414 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 10> : tuple_type<A10> {
4415     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a10) {}
4416     typename tuple_type<A10>::reference get() { return m_x; }
4417     typename tuple_type<A10>::const_reference get() const { return m_x; }
4418 private:
4419     typename tuple_type<A10>::reference m_x;
4420 };
4421 
4422 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4423 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 11> : tuple_type<A11> {
4424     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a11) {}
4425     typename tuple_type<A11>::reference get() { return m_x; }
4426     typename tuple_type<A11>::const_reference get() const { return m_x; }
4427 private:
4428     typename tuple_type<A11>::reference m_x;
4429 };
4430 
4431 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4432 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 12> : tuple_type<A12> {
4433     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a12) {}
4434     typename tuple_type<A12>::reference get() { return m_x; }
4435     typename tuple_type<A12>::const_reference get() const { return m_x; }
4436 private:
4437     typename tuple_type<A12>::reference m_x;
4438 };
4439 
4440 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4441 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 13> : tuple_type<A13> {
4442     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a13) {}
4443     typename tuple_type<A13>::reference get() { return m_x; }
4444     typename tuple_type<A13>::const_reference get() const { return m_x; }
4445 private:
4446     typename tuple_type<A13>::reference m_x;
4447 };
4448 
4449 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4450 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 14> : tuple_type<A14> {
4451     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a14) {}
4452     typename tuple_type<A14>::reference get() { return m_x; }
4453     typename tuple_type<A14>::const_reference get() const { return m_x; }
4454 private:
4455     typename tuple_type<A14>::reference m_x;
4456 };
4457 
4458 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4459 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 15> : tuple_type<A15> {
4460     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a15) {}
4461     typename tuple_type<A15>::reference get() { return m_x; }
4462     typename tuple_type<A15>::const_reference get() const { return m_x; }
4463 private:
4464     typename tuple_type<A15>::reference m_x;
4465 };
4466 
4467 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4468 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 16> : tuple_type<A16> {
4469     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a16) {}
4470     typename tuple_type<A16>::reference get() { return m_x; }
4471     typename tuple_type<A16>::const_reference get() const { return m_x; }
4472 private:
4473     typename tuple_type<A16>::reference m_x;
4474 };
4475 
4476 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4477 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 17> : tuple_type<A17> {
4478     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a17) {}
4479     typename tuple_type<A17>::reference get() { return m_x; }
4480     typename tuple_type<A17>::const_reference get() const { return m_x; }
4481 private:
4482     typename tuple_type<A17>::reference m_x;
4483 };
4484 
4485 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4486 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 18> : tuple_type<A18> {
4487     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a18) {}
4488     typename tuple_type<A18>::reference get() { return m_x; }
4489     typename tuple_type<A18>::const_reference get() const { return m_x; }
4490 private:
4491     typename tuple_type<A18>::reference m_x;
4492 };
4493 
4494 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4495 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 19> : tuple_type<A19> {
4496     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a19) {}
4497     typename tuple_type<A19>::reference get() { return m_x; }
4498     typename tuple_type<A19>::const_reference get() const { return m_x; }
4499 private:
4500     typename tuple_type<A19>::reference m_x;
4501 };
4502 
4503 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4504 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 20> : tuple_type<A20> {
4505     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a20) {}
4506     typename tuple_type<A20>::reference get() { return m_x; }
4507     typename tuple_type<A20>::const_reference get() const { return m_x; }
4508 private:
4509     typename tuple_type<A20>::reference m_x;
4510 };
4511 
4512 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4513 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 21> : tuple_type<A21> {
4514     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a21) {}
4515     typename tuple_type<A21>::reference get() { return m_x; }
4516     typename tuple_type<A21>::const_reference get() const { return m_x; }
4517 private:
4518     typename tuple_type<A21>::reference m_x;
4519 };
4520 
4521 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4522 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 22> : tuple_type<A22> {
4523     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a22) {}
4524     typename tuple_type<A22>::reference get() { return m_x; }
4525     typename tuple_type<A22>::const_reference get() const { return m_x; }
4526 private:
4527     typename tuple_type<A22>::reference m_x;
4528 };
4529 
4530 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4531 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 23> : tuple_type<A23> {
4532     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a23) {}
4533     typename tuple_type<A23>::reference get() { return m_x; }
4534     typename tuple_type<A23>::const_reference get() const { return m_x; }
4535 private:
4536     typename tuple_type<A23>::reference m_x;
4537 };
4538 
4539 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4540 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 24> : tuple_type<A24> {
4541     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a24) {}
4542     typename tuple_type<A24>::reference get() { return m_x; }
4543     typename tuple_type<A24>::const_reference get() const { return m_x; }
4544 private:
4545     typename tuple_type<A24>::reference m_x;
4546 };
4547 
4548 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4549 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 25> : tuple_type<A25> {
4550     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a25) {}
4551     typename tuple_type<A25>::reference get() { return m_x; }
4552     typename tuple_type<A25>::const_reference get() const { return m_x; }
4553 private:
4554     typename tuple_type<A25>::reference m_x;
4555 };
4556 
4557 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4558 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 26> : tuple_type<A26> {
4559     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a26) {}
4560     typename tuple_type<A26>::reference get() { return m_x; }
4561     typename tuple_type<A26>::const_reference get() const { return m_x; }
4562 private:
4563     typename tuple_type<A26>::reference m_x;
4564 };
4565 
4566 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4567 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 27> : tuple_type<A27> {
4568     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a27) {}
4569     typename tuple_type<A27>::reference get() { return m_x; }
4570     typename tuple_type<A27>::const_reference get() const { return m_x; }
4571 private:
4572     typename tuple_type<A27>::reference m_x;
4573 };
4574 
4575 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4576 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 28> : tuple_type<A28> {
4577     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a28) {}
4578     typename tuple_type<A28>::reference get() { return m_x; }
4579     typename tuple_type<A28>::const_reference get() const { return m_x; }
4580 private:
4581     typename tuple_type<A28>::reference m_x;
4582 };
4583 
4584 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4585 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 29> : tuple_type<A29> {
4586     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a29) {}
4587     typename tuple_type<A29>::reference get() { return m_x; }
4588     typename tuple_type<A29>::const_reference get() const { return m_x; }
4589 private:
4590     typename tuple_type<A29>::reference m_x;
4591 };
4592 
4593 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
4594 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 30> : tuple_type<A30> {
4595     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 >& x) : m_x(x.a30) {}
4596     typename tuple_type<A30>::reference get() { return m_x; }
4597     typename tuple_type<A30>::const_reference get() const { return m_x; }
4598 private:
4599     typename tuple_type<A30>::reference m_x;
4600 };
4601 
4602 
4603 
4604 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4605 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 0> : tuple_type<A0> {
4606     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a0) {}
4607     typename tuple_type<A0>::reference get() { return m_x; }
4608     typename tuple_type<A0>::const_reference get() const { return m_x; }
4609 private:
4610     typename tuple_type<A0>::reference m_x;
4611 };
4612 
4613 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4614 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 1> : tuple_type<A1> {
4615     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a1) {}
4616     typename tuple_type<A1>::reference get() { return m_x; }
4617     typename tuple_type<A1>::const_reference get() const { return m_x; }
4618 private:
4619     typename tuple_type<A1>::reference m_x;
4620 };
4621 
4622 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4623 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 2> : tuple_type<A2> {
4624     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a2) {}
4625     typename tuple_type<A2>::reference get() { return m_x; }
4626     typename tuple_type<A2>::const_reference get() const { return m_x; }
4627 private:
4628     typename tuple_type<A2>::reference m_x;
4629 };
4630 
4631 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4632 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 3> : tuple_type<A3> {
4633     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a3) {}
4634     typename tuple_type<A3>::reference get() { return m_x; }
4635     typename tuple_type<A3>::const_reference get() const { return m_x; }
4636 private:
4637     typename tuple_type<A3>::reference m_x;
4638 };
4639 
4640 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4641 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 4> : tuple_type<A4> {
4642     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a4) {}
4643     typename tuple_type<A4>::reference get() { return m_x; }
4644     typename tuple_type<A4>::const_reference get() const { return m_x; }
4645 private:
4646     typename tuple_type<A4>::reference m_x;
4647 };
4648 
4649 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4650 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 5> : tuple_type<A5> {
4651     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a5) {}
4652     typename tuple_type<A5>::reference get() { return m_x; }
4653     typename tuple_type<A5>::const_reference get() const { return m_x; }
4654 private:
4655     typename tuple_type<A5>::reference m_x;
4656 };
4657 
4658 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4659 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 6> : tuple_type<A6> {
4660     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a6) {}
4661     typename tuple_type<A6>::reference get() { return m_x; }
4662     typename tuple_type<A6>::const_reference get() const { return m_x; }
4663 private:
4664     typename tuple_type<A6>::reference m_x;
4665 };
4666 
4667 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4668 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 7> : tuple_type<A7> {
4669     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a7) {}
4670     typename tuple_type<A7>::reference get() { return m_x; }
4671     typename tuple_type<A7>::const_reference get() const { return m_x; }
4672 private:
4673     typename tuple_type<A7>::reference m_x;
4674 };
4675 
4676 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4677 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 8> : tuple_type<A8> {
4678     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a8) {}
4679     typename tuple_type<A8>::reference get() { return m_x; }
4680     typename tuple_type<A8>::const_reference get() const { return m_x; }
4681 private:
4682     typename tuple_type<A8>::reference m_x;
4683 };
4684 
4685 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4686 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 9> : tuple_type<A9> {
4687     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a9) {}
4688     typename tuple_type<A9>::reference get() { return m_x; }
4689     typename tuple_type<A9>::const_reference get() const { return m_x; }
4690 private:
4691     typename tuple_type<A9>::reference m_x;
4692 };
4693 
4694 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4695 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 10> : tuple_type<A10> {
4696     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a10) {}
4697     typename tuple_type<A10>::reference get() { return m_x; }
4698     typename tuple_type<A10>::const_reference get() const { return m_x; }
4699 private:
4700     typename tuple_type<A10>::reference m_x;
4701 };
4702 
4703 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4704 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 11> : tuple_type<A11> {
4705     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a11) {}
4706     typename tuple_type<A11>::reference get() { return m_x; }
4707     typename tuple_type<A11>::const_reference get() const { return m_x; }
4708 private:
4709     typename tuple_type<A11>::reference m_x;
4710 };
4711 
4712 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4713 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 12> : tuple_type<A12> {
4714     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a12) {}
4715     typename tuple_type<A12>::reference get() { return m_x; }
4716     typename tuple_type<A12>::const_reference get() const { return m_x; }
4717 private:
4718     typename tuple_type<A12>::reference m_x;
4719 };
4720 
4721 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4722 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 13> : tuple_type<A13> {
4723     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a13) {}
4724     typename tuple_type<A13>::reference get() { return m_x; }
4725     typename tuple_type<A13>::const_reference get() const { return m_x; }
4726 private:
4727     typename tuple_type<A13>::reference m_x;
4728 };
4729 
4730 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4731 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 14> : tuple_type<A14> {
4732     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a14) {}
4733     typename tuple_type<A14>::reference get() { return m_x; }
4734     typename tuple_type<A14>::const_reference get() const { return m_x; }
4735 private:
4736     typename tuple_type<A14>::reference m_x;
4737 };
4738 
4739 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4740 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 15> : tuple_type<A15> {
4741     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a15) {}
4742     typename tuple_type<A15>::reference get() { return m_x; }
4743     typename tuple_type<A15>::const_reference get() const { return m_x; }
4744 private:
4745     typename tuple_type<A15>::reference m_x;
4746 };
4747 
4748 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4749 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 16> : tuple_type<A16> {
4750     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a16) {}
4751     typename tuple_type<A16>::reference get() { return m_x; }
4752     typename tuple_type<A16>::const_reference get() const { return m_x; }
4753 private:
4754     typename tuple_type<A16>::reference m_x;
4755 };
4756 
4757 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4758 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 17> : tuple_type<A17> {
4759     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a17) {}
4760     typename tuple_type<A17>::reference get() { return m_x; }
4761     typename tuple_type<A17>::const_reference get() const { return m_x; }
4762 private:
4763     typename tuple_type<A17>::reference m_x;
4764 };
4765 
4766 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4767 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 18> : tuple_type<A18> {
4768     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a18) {}
4769     typename tuple_type<A18>::reference get() { return m_x; }
4770     typename tuple_type<A18>::const_reference get() const { return m_x; }
4771 private:
4772     typename tuple_type<A18>::reference m_x;
4773 };
4774 
4775 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4776 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 19> : tuple_type<A19> {
4777     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a19) {}
4778     typename tuple_type<A19>::reference get() { return m_x; }
4779     typename tuple_type<A19>::const_reference get() const { return m_x; }
4780 private:
4781     typename tuple_type<A19>::reference m_x;
4782 };
4783 
4784 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4785 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 20> : tuple_type<A20> {
4786     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a20) {}
4787     typename tuple_type<A20>::reference get() { return m_x; }
4788     typename tuple_type<A20>::const_reference get() const { return m_x; }
4789 private:
4790     typename tuple_type<A20>::reference m_x;
4791 };
4792 
4793 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4794 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 21> : tuple_type<A21> {
4795     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a21) {}
4796     typename tuple_type<A21>::reference get() { return m_x; }
4797     typename tuple_type<A21>::const_reference get() const { return m_x; }
4798 private:
4799     typename tuple_type<A21>::reference m_x;
4800 };
4801 
4802 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4803 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 22> : tuple_type<A22> {
4804     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a22) {}
4805     typename tuple_type<A22>::reference get() { return m_x; }
4806     typename tuple_type<A22>::const_reference get() const { return m_x; }
4807 private:
4808     typename tuple_type<A22>::reference m_x;
4809 };
4810 
4811 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4812 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 23> : tuple_type<A23> {
4813     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a23) {}
4814     typename tuple_type<A23>::reference get() { return m_x; }
4815     typename tuple_type<A23>::const_reference get() const { return m_x; }
4816 private:
4817     typename tuple_type<A23>::reference m_x;
4818 };
4819 
4820 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4821 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 24> : tuple_type<A24> {
4822     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a24) {}
4823     typename tuple_type<A24>::reference get() { return m_x; }
4824     typename tuple_type<A24>::const_reference get() const { return m_x; }
4825 private:
4826     typename tuple_type<A24>::reference m_x;
4827 };
4828 
4829 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4830 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 25> : tuple_type<A25> {
4831     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a25) {}
4832     typename tuple_type<A25>::reference get() { return m_x; }
4833     typename tuple_type<A25>::const_reference get() const { return m_x; }
4834 private:
4835     typename tuple_type<A25>::reference m_x;
4836 };
4837 
4838 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4839 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 26> : tuple_type<A26> {
4840     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a26) {}
4841     typename tuple_type<A26>::reference get() { return m_x; }
4842     typename tuple_type<A26>::const_reference get() const { return m_x; }
4843 private:
4844     typename tuple_type<A26>::reference m_x;
4845 };
4846 
4847 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4848 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 27> : tuple_type<A27> {
4849     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a27) {}
4850     typename tuple_type<A27>::reference get() { return m_x; }
4851     typename tuple_type<A27>::const_reference get() const { return m_x; }
4852 private:
4853     typename tuple_type<A27>::reference m_x;
4854 };
4855 
4856 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4857 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 28> : tuple_type<A28> {
4858     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a28) {}
4859     typename tuple_type<A28>::reference get() { return m_x; }
4860     typename tuple_type<A28>::const_reference get() const { return m_x; }
4861 private:
4862     typename tuple_type<A28>::reference m_x;
4863 };
4864 
4865 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4866 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 29> : tuple_type<A29> {
4867     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a29) {}
4868     typename tuple_type<A29>::reference get() { return m_x; }
4869     typename tuple_type<A29>::const_reference get() const { return m_x; }
4870 private:
4871     typename tuple_type<A29>::reference m_x;
4872 };
4873 
4874 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4875 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 30> : tuple_type<A30> {
4876     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a30) {}
4877     typename tuple_type<A30>::reference get() { return m_x; }
4878     typename tuple_type<A30>::const_reference get() const { return m_x; }
4879 private:
4880     typename tuple_type<A30>::reference m_x;
4881 };
4882 
4883 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
4884 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 31> : tuple_type<A31> {
4885     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 >& x) : m_x(x.a31) {}
4886     typename tuple_type<A31>::reference get() { return m_x; }
4887     typename tuple_type<A31>::const_reference get() const { return m_x; }
4888 private:
4889     typename tuple_type<A31>::reference m_x;
4890 };
4891 
4892 
4893 
4894 
4895 
4896 template <typename A0>
4897 struct const_tuple_element<tuple<A0>, 0> : tuple_type<A0> {
4898     const_tuple_element(const tuple<A0>& x) : m_x(x.a0) {}
4899     typename tuple_type<A0>::const_reference get() const { return m_x; }
4900 private:
4901     typename tuple_type<A0>::const_reference m_x;
4902 };
4903 
4904 
4905 
4906 template <typename A0, typename A1>
4907 struct const_tuple_element<tuple<A0, A1>, 0> : tuple_type<A0> {
4908     const_tuple_element(const tuple<A0, A1>& x) : m_x(x.a0) {}
4909     typename tuple_type<A0>::const_reference get() const { return m_x; }
4910 private:
4911     typename tuple_type<A0>::const_reference m_x;
4912 };
4913 
4914 template <typename A0, typename A1>
4915 struct const_tuple_element<tuple<A0, A1>, 1> : tuple_type<A1> {
4916     const_tuple_element(const tuple<A0, A1>& x) : m_x(x.a1) {}
4917     typename tuple_type<A1>::const_reference get() const { return m_x; }
4918 private:
4919     typename tuple_type<A1>::const_reference m_x;
4920 };
4921 
4922 
4923 
4924 template <typename A0, typename A1, typename A2>
4925 struct const_tuple_element<tuple<A0, A1, A2>, 0> : tuple_type<A0> {
4926     const_tuple_element(const tuple<A0, A1, A2>& x) : m_x(x.a0) {}
4927     typename tuple_type<A0>::const_reference get() const { return m_x; }
4928 private:
4929     typename tuple_type<A0>::const_reference m_x;
4930 };
4931 
4932 template <typename A0, typename A1, typename A2>
4933 struct const_tuple_element<tuple<A0, A1, A2>, 1> : tuple_type<A1> {
4934     const_tuple_element(const tuple<A0, A1, A2>& x) : m_x(x.a1) {}
4935     typename tuple_type<A1>::const_reference get() const { return m_x; }
4936 private:
4937     typename tuple_type<A1>::const_reference m_x;
4938 };
4939 
4940 template <typename A0, typename A1, typename A2>
4941 struct const_tuple_element<tuple<A0, A1, A2>, 2> : tuple_type<A2> {
4942     const_tuple_element(const tuple<A0, A1, A2>& x) : m_x(x.a2) {}
4943     typename tuple_type<A2>::const_reference get() const { return m_x; }
4944 private:
4945     typename tuple_type<A2>::const_reference m_x;
4946 };
4947 
4948 
4949 
4950 template <typename A0, typename A1, typename A2, typename A3>
4951 struct const_tuple_element<tuple<A0, A1, A2, A3>, 0> : tuple_type<A0> {
4952     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a0) {}
4953     typename tuple_type<A0>::const_reference get() const { return m_x; }
4954 private:
4955     typename tuple_type<A0>::const_reference m_x;
4956 };
4957 
4958 template <typename A0, typename A1, typename A2, typename A3>
4959 struct const_tuple_element<tuple<A0, A1, A2, A3>, 1> : tuple_type<A1> {
4960     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a1) {}
4961     typename tuple_type<A1>::const_reference get() const { return m_x; }
4962 private:
4963     typename tuple_type<A1>::const_reference m_x;
4964 };
4965 
4966 template <typename A0, typename A1, typename A2, typename A3>
4967 struct const_tuple_element<tuple<A0, A1, A2, A3>, 2> : tuple_type<A2> {
4968     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a2) {}
4969     typename tuple_type<A2>::const_reference get() const { return m_x; }
4970 private:
4971     typename tuple_type<A2>::const_reference m_x;
4972 };
4973 
4974 template <typename A0, typename A1, typename A2, typename A3>
4975 struct const_tuple_element<tuple<A0, A1, A2, A3>, 3> : tuple_type<A3> {
4976     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a3) {}
4977     typename tuple_type<A3>::const_reference get() const { return m_x; }
4978 private:
4979     typename tuple_type<A3>::const_reference m_x;
4980 };
4981 
4982 
4983 
4984 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4985 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 0> : tuple_type<A0> {
4986     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a0) {}
4987     typename tuple_type<A0>::const_reference get() const { return m_x; }
4988 private:
4989     typename tuple_type<A0>::const_reference m_x;
4990 };
4991 
4992 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4993 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 1> : tuple_type<A1> {
4994     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a1) {}
4995     typename tuple_type<A1>::const_reference get() const { return m_x; }
4996 private:
4997     typename tuple_type<A1>::const_reference m_x;
4998 };
4999 
5000 template <typename A0, typename A1, typename A2, typename A3, typename A4>
5001 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 2> : tuple_type<A2> {
5002     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a2) {}
5003     typename tuple_type<A2>::const_reference get() const { return m_x; }
5004 private:
5005     typename tuple_type<A2>::const_reference m_x;
5006 };
5007 
5008 template <typename A0, typename A1, typename A2, typename A3, typename A4>
5009 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 3> : tuple_type<A3> {
5010     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a3) {}
5011     typename tuple_type<A3>::const_reference get() const { return m_x; }
5012 private:
5013     typename tuple_type<A3>::const_reference m_x;
5014 };
5015 
5016 template <typename A0, typename A1, typename A2, typename A3, typename A4>
5017 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 4> : tuple_type<A4> {
5018     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a4) {}
5019     typename tuple_type<A4>::const_reference get() const { return m_x; }
5020 private:
5021     typename tuple_type<A4>::const_reference m_x;
5022 };
5023 
5024 
5025 
5026 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5027 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 0> : tuple_type<A0> {
5028     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a0) {}
5029     typename tuple_type<A0>::const_reference get() const { return m_x; }
5030 private:
5031     typename tuple_type<A0>::const_reference m_x;
5032 };
5033 
5034 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5035 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 1> : tuple_type<A1> {
5036     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a1) {}
5037     typename tuple_type<A1>::const_reference get() const { return m_x; }
5038 private:
5039     typename tuple_type<A1>::const_reference m_x;
5040 };
5041 
5042 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5043 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 2> : tuple_type<A2> {
5044     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a2) {}
5045     typename tuple_type<A2>::const_reference get() const { return m_x; }
5046 private:
5047     typename tuple_type<A2>::const_reference m_x;
5048 };
5049 
5050 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5051 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 3> : tuple_type<A3> {
5052     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a3) {}
5053     typename tuple_type<A3>::const_reference get() const { return m_x; }
5054 private:
5055     typename tuple_type<A3>::const_reference m_x;
5056 };
5057 
5058 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5059 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 4> : tuple_type<A4> {
5060     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a4) {}
5061     typename tuple_type<A4>::const_reference get() const { return m_x; }
5062 private:
5063     typename tuple_type<A4>::const_reference m_x;
5064 };
5065 
5066 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5067 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 5> : tuple_type<A5> {
5068     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a5) {}
5069     typename tuple_type<A5>::const_reference get() const { return m_x; }
5070 private:
5071     typename tuple_type<A5>::const_reference m_x;
5072 };
5073 
5074 
5075 
5076 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5077 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 0> : tuple_type<A0> {
5078     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a0) {}
5079     typename tuple_type<A0>::const_reference get() const { return m_x; }
5080 private:
5081     typename tuple_type<A0>::const_reference m_x;
5082 };
5083 
5084 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5085 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 1> : tuple_type<A1> {
5086     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a1) {}
5087     typename tuple_type<A1>::const_reference get() const { return m_x; }
5088 private:
5089     typename tuple_type<A1>::const_reference m_x;
5090 };
5091 
5092 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5093 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 2> : tuple_type<A2> {
5094     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a2) {}
5095     typename tuple_type<A2>::const_reference get() const { return m_x; }
5096 private:
5097     typename tuple_type<A2>::const_reference m_x;
5098 };
5099 
5100 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5101 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 3> : tuple_type<A3> {
5102     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a3) {}
5103     typename tuple_type<A3>::const_reference get() const { return m_x; }
5104 private:
5105     typename tuple_type<A3>::const_reference m_x;
5106 };
5107 
5108 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5109 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 4> : tuple_type<A4> {
5110     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a4) {}
5111     typename tuple_type<A4>::const_reference get() const { return m_x; }
5112 private:
5113     typename tuple_type<A4>::const_reference m_x;
5114 };
5115 
5116 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5117 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 5> : tuple_type<A5> {
5118     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a5) {}
5119     typename tuple_type<A5>::const_reference get() const { return m_x; }
5120 private:
5121     typename tuple_type<A5>::const_reference m_x;
5122 };
5123 
5124 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5125 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 6> : tuple_type<A6> {
5126     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a6) {}
5127     typename tuple_type<A6>::const_reference get() const { return m_x; }
5128 private:
5129     typename tuple_type<A6>::const_reference m_x;
5130 };
5131 
5132 
5133 
5134 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5135 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 0> : tuple_type<A0> {
5136     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a0) {}
5137     typename tuple_type<A0>::const_reference get() const { return m_x; }
5138 private:
5139     typename tuple_type<A0>::const_reference m_x;
5140 };
5141 
5142 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5143 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 1> : tuple_type<A1> {
5144     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a1) {}
5145     typename tuple_type<A1>::const_reference get() const { return m_x; }
5146 private:
5147     typename tuple_type<A1>::const_reference m_x;
5148 };
5149 
5150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5151 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 2> : tuple_type<A2> {
5152     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a2) {}
5153     typename tuple_type<A2>::const_reference get() const { return m_x; }
5154 private:
5155     typename tuple_type<A2>::const_reference m_x;
5156 };
5157 
5158 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5159 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 3> : tuple_type<A3> {
5160     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a3) {}
5161     typename tuple_type<A3>::const_reference get() const { return m_x; }
5162 private:
5163     typename tuple_type<A3>::const_reference m_x;
5164 };
5165 
5166 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5167 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 4> : tuple_type<A4> {
5168     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a4) {}
5169     typename tuple_type<A4>::const_reference get() const { return m_x; }
5170 private:
5171     typename tuple_type<A4>::const_reference m_x;
5172 };
5173 
5174 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5175 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 5> : tuple_type<A5> {
5176     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a5) {}
5177     typename tuple_type<A5>::const_reference get() const { return m_x; }
5178 private:
5179     typename tuple_type<A5>::const_reference m_x;
5180 };
5181 
5182 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5183 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 6> : tuple_type<A6> {
5184     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a6) {}
5185     typename tuple_type<A6>::const_reference get() const { return m_x; }
5186 private:
5187     typename tuple_type<A6>::const_reference m_x;
5188 };
5189 
5190 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5191 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 7> : tuple_type<A7> {
5192     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a7) {}
5193     typename tuple_type<A7>::const_reference get() const { return m_x; }
5194 private:
5195     typename tuple_type<A7>::const_reference m_x;
5196 };
5197 
5198 
5199 
5200 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5201 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 0> : tuple_type<A0> {
5202     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a0) {}
5203     typename tuple_type<A0>::const_reference get() const { return m_x; }
5204 private:
5205     typename tuple_type<A0>::const_reference m_x;
5206 };
5207 
5208 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5209 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 1> : tuple_type<A1> {
5210     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a1) {}
5211     typename tuple_type<A1>::const_reference get() const { return m_x; }
5212 private:
5213     typename tuple_type<A1>::const_reference m_x;
5214 };
5215 
5216 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5217 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 2> : tuple_type<A2> {
5218     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a2) {}
5219     typename tuple_type<A2>::const_reference get() const { return m_x; }
5220 private:
5221     typename tuple_type<A2>::const_reference m_x;
5222 };
5223 
5224 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5225 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 3> : tuple_type<A3> {
5226     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a3) {}
5227     typename tuple_type<A3>::const_reference get() const { return m_x; }
5228 private:
5229     typename tuple_type<A3>::const_reference m_x;
5230 };
5231 
5232 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5233 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 4> : tuple_type<A4> {
5234     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a4) {}
5235     typename tuple_type<A4>::const_reference get() const { return m_x; }
5236 private:
5237     typename tuple_type<A4>::const_reference m_x;
5238 };
5239 
5240 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5241 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 5> : tuple_type<A5> {
5242     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a5) {}
5243     typename tuple_type<A5>::const_reference get() const { return m_x; }
5244 private:
5245     typename tuple_type<A5>::const_reference m_x;
5246 };
5247 
5248 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5249 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 6> : tuple_type<A6> {
5250     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a6) {}
5251     typename tuple_type<A6>::const_reference get() const { return m_x; }
5252 private:
5253     typename tuple_type<A6>::const_reference m_x;
5254 };
5255 
5256 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5257 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 7> : tuple_type<A7> {
5258     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a7) {}
5259     typename tuple_type<A7>::const_reference get() const { return m_x; }
5260 private:
5261     typename tuple_type<A7>::const_reference m_x;
5262 };
5263 
5264 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5265 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 8> : tuple_type<A8> {
5266     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a8) {}
5267     typename tuple_type<A8>::const_reference get() const { return m_x; }
5268 private:
5269     typename tuple_type<A8>::const_reference m_x;
5270 };
5271 
5272 
5273 
5274 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5275 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 0> : tuple_type<A0> {
5276     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a0) {}
5277     typename tuple_type<A0>::const_reference get() const { return m_x; }
5278 private:
5279     typename tuple_type<A0>::const_reference m_x;
5280 };
5281 
5282 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5283 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 1> : tuple_type<A1> {
5284     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a1) {}
5285     typename tuple_type<A1>::const_reference get() const { return m_x; }
5286 private:
5287     typename tuple_type<A1>::const_reference m_x;
5288 };
5289 
5290 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5291 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 2> : tuple_type<A2> {
5292     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a2) {}
5293     typename tuple_type<A2>::const_reference get() const { return m_x; }
5294 private:
5295     typename tuple_type<A2>::const_reference m_x;
5296 };
5297 
5298 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5299 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 3> : tuple_type<A3> {
5300     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a3) {}
5301     typename tuple_type<A3>::const_reference get() const { return m_x; }
5302 private:
5303     typename tuple_type<A3>::const_reference m_x;
5304 };
5305 
5306 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5307 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 4> : tuple_type<A4> {
5308     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a4) {}
5309     typename tuple_type<A4>::const_reference get() const { return m_x; }
5310 private:
5311     typename tuple_type<A4>::const_reference m_x;
5312 };
5313 
5314 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5315 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 5> : tuple_type<A5> {
5316     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a5) {}
5317     typename tuple_type<A5>::const_reference get() const { return m_x; }
5318 private:
5319     typename tuple_type<A5>::const_reference m_x;
5320 };
5321 
5322 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5323 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 6> : tuple_type<A6> {
5324     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a6) {}
5325     typename tuple_type<A6>::const_reference get() const { return m_x; }
5326 private:
5327     typename tuple_type<A6>::const_reference m_x;
5328 };
5329 
5330 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5331 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 7> : tuple_type<A7> {
5332     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a7) {}
5333     typename tuple_type<A7>::const_reference get() const { return m_x; }
5334 private:
5335     typename tuple_type<A7>::const_reference m_x;
5336 };
5337 
5338 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5339 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 8> : tuple_type<A8> {
5340     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a8) {}
5341     typename tuple_type<A8>::const_reference get() const { return m_x; }
5342 private:
5343     typename tuple_type<A8>::const_reference m_x;
5344 };
5345 
5346 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5347 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 9> : tuple_type<A9> {
5348     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a9) {}
5349     typename tuple_type<A9>::const_reference get() const { return m_x; }
5350 private:
5351     typename tuple_type<A9>::const_reference m_x;
5352 };
5353 
5354 
5355 
5356 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5357 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 0> : tuple_type<A0> {
5358     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a0) {}
5359     typename tuple_type<A0>::const_reference get() const { return m_x; }
5360 private:
5361     typename tuple_type<A0>::const_reference m_x;
5362 };
5363 
5364 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5365 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 1> : tuple_type<A1> {
5366     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a1) {}
5367     typename tuple_type<A1>::const_reference get() const { return m_x; }
5368 private:
5369     typename tuple_type<A1>::const_reference m_x;
5370 };
5371 
5372 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5373 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 2> : tuple_type<A2> {
5374     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a2) {}
5375     typename tuple_type<A2>::const_reference get() const { return m_x; }
5376 private:
5377     typename tuple_type<A2>::const_reference m_x;
5378 };
5379 
5380 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5381 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 3> : tuple_type<A3> {
5382     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a3) {}
5383     typename tuple_type<A3>::const_reference get() const { return m_x; }
5384 private:
5385     typename tuple_type<A3>::const_reference m_x;
5386 };
5387 
5388 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5389 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 4> : tuple_type<A4> {
5390     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a4) {}
5391     typename tuple_type<A4>::const_reference get() const { return m_x; }
5392 private:
5393     typename tuple_type<A4>::const_reference m_x;
5394 };
5395 
5396 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5397 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 5> : tuple_type<A5> {
5398     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a5) {}
5399     typename tuple_type<A5>::const_reference get() const { return m_x; }
5400 private:
5401     typename tuple_type<A5>::const_reference m_x;
5402 };
5403 
5404 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5405 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 6> : tuple_type<A6> {
5406     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a6) {}
5407     typename tuple_type<A6>::const_reference get() const { return m_x; }
5408 private:
5409     typename tuple_type<A6>::const_reference m_x;
5410 };
5411 
5412 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5413 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 7> : tuple_type<A7> {
5414     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a7) {}
5415     typename tuple_type<A7>::const_reference get() const { return m_x; }
5416 private:
5417     typename tuple_type<A7>::const_reference m_x;
5418 };
5419 
5420 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5421 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 8> : tuple_type<A8> {
5422     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a8) {}
5423     typename tuple_type<A8>::const_reference get() const { return m_x; }
5424 private:
5425     typename tuple_type<A8>::const_reference m_x;
5426 };
5427 
5428 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5429 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 9> : tuple_type<A9> {
5430     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a9) {}
5431     typename tuple_type<A9>::const_reference get() const { return m_x; }
5432 private:
5433     typename tuple_type<A9>::const_reference m_x;
5434 };
5435 
5436 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5437 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 10> : tuple_type<A10> {
5438     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a10) {}
5439     typename tuple_type<A10>::const_reference get() const { return m_x; }
5440 private:
5441     typename tuple_type<A10>::const_reference m_x;
5442 };
5443 
5444 
5445 
5446 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5447 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 0> : tuple_type<A0> {
5448     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a0) {}
5449     typename tuple_type<A0>::const_reference get() const { return m_x; }
5450 private:
5451     typename tuple_type<A0>::const_reference m_x;
5452 };
5453 
5454 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5455 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 1> : tuple_type<A1> {
5456     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a1) {}
5457     typename tuple_type<A1>::const_reference get() const { return m_x; }
5458 private:
5459     typename tuple_type<A1>::const_reference m_x;
5460 };
5461 
5462 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5463 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 2> : tuple_type<A2> {
5464     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a2) {}
5465     typename tuple_type<A2>::const_reference get() const { return m_x; }
5466 private:
5467     typename tuple_type<A2>::const_reference m_x;
5468 };
5469 
5470 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5471 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 3> : tuple_type<A3> {
5472     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a3) {}
5473     typename tuple_type<A3>::const_reference get() const { return m_x; }
5474 private:
5475     typename tuple_type<A3>::const_reference m_x;
5476 };
5477 
5478 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5479 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 4> : tuple_type<A4> {
5480     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a4) {}
5481     typename tuple_type<A4>::const_reference get() const { return m_x; }
5482 private:
5483     typename tuple_type<A4>::const_reference m_x;
5484 };
5485 
5486 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5487 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 5> : tuple_type<A5> {
5488     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a5) {}
5489     typename tuple_type<A5>::const_reference get() const { return m_x; }
5490 private:
5491     typename tuple_type<A5>::const_reference m_x;
5492 };
5493 
5494 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5495 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 6> : tuple_type<A6> {
5496     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a6) {}
5497     typename tuple_type<A6>::const_reference get() const { return m_x; }
5498 private:
5499     typename tuple_type<A6>::const_reference m_x;
5500 };
5501 
5502 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5503 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 7> : tuple_type<A7> {
5504     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a7) {}
5505     typename tuple_type<A7>::const_reference get() const { return m_x; }
5506 private:
5507     typename tuple_type<A7>::const_reference m_x;
5508 };
5509 
5510 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5511 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 8> : tuple_type<A8> {
5512     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a8) {}
5513     typename tuple_type<A8>::const_reference get() const { return m_x; }
5514 private:
5515     typename tuple_type<A8>::const_reference m_x;
5516 };
5517 
5518 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5519 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 9> : tuple_type<A9> {
5520     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a9) {}
5521     typename tuple_type<A9>::const_reference get() const { return m_x; }
5522 private:
5523     typename tuple_type<A9>::const_reference m_x;
5524 };
5525 
5526 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5527 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 10> : tuple_type<A10> {
5528     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a10) {}
5529     typename tuple_type<A10>::const_reference get() const { return m_x; }
5530 private:
5531     typename tuple_type<A10>::const_reference m_x;
5532 };
5533 
5534 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5535 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 11> : tuple_type<A11> {
5536     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a11) {}
5537     typename tuple_type<A11>::const_reference get() const { return m_x; }
5538 private:
5539     typename tuple_type<A11>::const_reference m_x;
5540 };
5541 
5542 
5543 
5544 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5545 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 0> : tuple_type<A0> {
5546     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a0) {}
5547     typename tuple_type<A0>::const_reference get() const { return m_x; }
5548 private:
5549     typename tuple_type<A0>::const_reference m_x;
5550 };
5551 
5552 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5553 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 1> : tuple_type<A1> {
5554     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a1) {}
5555     typename tuple_type<A1>::const_reference get() const { return m_x; }
5556 private:
5557     typename tuple_type<A1>::const_reference m_x;
5558 };
5559 
5560 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5561 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 2> : tuple_type<A2> {
5562     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a2) {}
5563     typename tuple_type<A2>::const_reference get() const { return m_x; }
5564 private:
5565     typename tuple_type<A2>::const_reference m_x;
5566 };
5567 
5568 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5569 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 3> : tuple_type<A3> {
5570     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a3) {}
5571     typename tuple_type<A3>::const_reference get() const { return m_x; }
5572 private:
5573     typename tuple_type<A3>::const_reference m_x;
5574 };
5575 
5576 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5577 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 4> : tuple_type<A4> {
5578     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a4) {}
5579     typename tuple_type<A4>::const_reference get() const { return m_x; }
5580 private:
5581     typename tuple_type<A4>::const_reference m_x;
5582 };
5583 
5584 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5585 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 5> : tuple_type<A5> {
5586     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a5) {}
5587     typename tuple_type<A5>::const_reference get() const { return m_x; }
5588 private:
5589     typename tuple_type<A5>::const_reference m_x;
5590 };
5591 
5592 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5593 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 6> : tuple_type<A6> {
5594     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a6) {}
5595     typename tuple_type<A6>::const_reference get() const { return m_x; }
5596 private:
5597     typename tuple_type<A6>::const_reference m_x;
5598 };
5599 
5600 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5601 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 7> : tuple_type<A7> {
5602     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a7) {}
5603     typename tuple_type<A7>::const_reference get() const { return m_x; }
5604 private:
5605     typename tuple_type<A7>::const_reference m_x;
5606 };
5607 
5608 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5609 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 8> : tuple_type<A8> {
5610     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a8) {}
5611     typename tuple_type<A8>::const_reference get() const { return m_x; }
5612 private:
5613     typename tuple_type<A8>::const_reference m_x;
5614 };
5615 
5616 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5617 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 9> : tuple_type<A9> {
5618     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a9) {}
5619     typename tuple_type<A9>::const_reference get() const { return m_x; }
5620 private:
5621     typename tuple_type<A9>::const_reference m_x;
5622 };
5623 
5624 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5625 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 10> : tuple_type<A10> {
5626     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a10) {}
5627     typename tuple_type<A10>::const_reference get() const { return m_x; }
5628 private:
5629     typename tuple_type<A10>::const_reference m_x;
5630 };
5631 
5632 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5633 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 11> : tuple_type<A11> {
5634     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a11) {}
5635     typename tuple_type<A11>::const_reference get() const { return m_x; }
5636 private:
5637     typename tuple_type<A11>::const_reference m_x;
5638 };
5639 
5640 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5641 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 12> : tuple_type<A12> {
5642     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a12) {}
5643     typename tuple_type<A12>::const_reference get() const { return m_x; }
5644 private:
5645     typename tuple_type<A12>::const_reference m_x;
5646 };
5647 
5648 
5649 
5650 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5651 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 0> : tuple_type<A0> {
5652     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a0) {}
5653     typename tuple_type<A0>::const_reference get() const { return m_x; }
5654 private:
5655     typename tuple_type<A0>::const_reference m_x;
5656 };
5657 
5658 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5659 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 1> : tuple_type<A1> {
5660     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a1) {}
5661     typename tuple_type<A1>::const_reference get() const { return m_x; }
5662 private:
5663     typename tuple_type<A1>::const_reference m_x;
5664 };
5665 
5666 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5667 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 2> : tuple_type<A2> {
5668     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a2) {}
5669     typename tuple_type<A2>::const_reference get() const { return m_x; }
5670 private:
5671     typename tuple_type<A2>::const_reference m_x;
5672 };
5673 
5674 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5675 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 3> : tuple_type<A3> {
5676     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a3) {}
5677     typename tuple_type<A3>::const_reference get() const { return m_x; }
5678 private:
5679     typename tuple_type<A3>::const_reference m_x;
5680 };
5681 
5682 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5683 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 4> : tuple_type<A4> {
5684     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a4) {}
5685     typename tuple_type<A4>::const_reference get() const { return m_x; }
5686 private:
5687     typename tuple_type<A4>::const_reference m_x;
5688 };
5689 
5690 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5691 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 5> : tuple_type<A5> {
5692     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a5) {}
5693     typename tuple_type<A5>::const_reference get() const { return m_x; }
5694 private:
5695     typename tuple_type<A5>::const_reference m_x;
5696 };
5697 
5698 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5699 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 6> : tuple_type<A6> {
5700     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a6) {}
5701     typename tuple_type<A6>::const_reference get() const { return m_x; }
5702 private:
5703     typename tuple_type<A6>::const_reference m_x;
5704 };
5705 
5706 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5707 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 7> : tuple_type<A7> {
5708     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a7) {}
5709     typename tuple_type<A7>::const_reference get() const { return m_x; }
5710 private:
5711     typename tuple_type<A7>::const_reference m_x;
5712 };
5713 
5714 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5715 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 8> : tuple_type<A8> {
5716     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a8) {}
5717     typename tuple_type<A8>::const_reference get() const { return m_x; }
5718 private:
5719     typename tuple_type<A8>::const_reference m_x;
5720 };
5721 
5722 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5723 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 9> : tuple_type<A9> {
5724     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a9) {}
5725     typename tuple_type<A9>::const_reference get() const { return m_x; }
5726 private:
5727     typename tuple_type<A9>::const_reference m_x;
5728 };
5729 
5730 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5731 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 10> : tuple_type<A10> {
5732     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a10) {}
5733     typename tuple_type<A10>::const_reference get() const { return m_x; }
5734 private:
5735     typename tuple_type<A10>::const_reference m_x;
5736 };
5737 
5738 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5739 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 11> : tuple_type<A11> {
5740     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a11) {}
5741     typename tuple_type<A11>::const_reference get() const { return m_x; }
5742 private:
5743     typename tuple_type<A11>::const_reference m_x;
5744 };
5745 
5746 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5747 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 12> : tuple_type<A12> {
5748     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a12) {}
5749     typename tuple_type<A12>::const_reference get() const { return m_x; }
5750 private:
5751     typename tuple_type<A12>::const_reference m_x;
5752 };
5753 
5754 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5755 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 13> : tuple_type<A13> {
5756     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a13) {}
5757     typename tuple_type<A13>::const_reference get() const { return m_x; }
5758 private:
5759     typename tuple_type<A13>::const_reference m_x;
5760 };
5761 
5762 
5763 
5764 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5765 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 0> : tuple_type<A0> {
5766     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a0) {}
5767     typename tuple_type<A0>::const_reference get() const { return m_x; }
5768 private:
5769     typename tuple_type<A0>::const_reference m_x;
5770 };
5771 
5772 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5773 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 1> : tuple_type<A1> {
5774     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a1) {}
5775     typename tuple_type<A1>::const_reference get() const { return m_x; }
5776 private:
5777     typename tuple_type<A1>::const_reference m_x;
5778 };
5779 
5780 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5781 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 2> : tuple_type<A2> {
5782     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a2) {}
5783     typename tuple_type<A2>::const_reference get() const { return m_x; }
5784 private:
5785     typename tuple_type<A2>::const_reference m_x;
5786 };
5787 
5788 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5789 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 3> : tuple_type<A3> {
5790     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a3) {}
5791     typename tuple_type<A3>::const_reference get() const { return m_x; }
5792 private:
5793     typename tuple_type<A3>::const_reference m_x;
5794 };
5795 
5796 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5797 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 4> : tuple_type<A4> {
5798     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a4) {}
5799     typename tuple_type<A4>::const_reference get() const { return m_x; }
5800 private:
5801     typename tuple_type<A4>::const_reference m_x;
5802 };
5803 
5804 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5805 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 5> : tuple_type<A5> {
5806     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a5) {}
5807     typename tuple_type<A5>::const_reference get() const { return m_x; }
5808 private:
5809     typename tuple_type<A5>::const_reference m_x;
5810 };
5811 
5812 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5813 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 6> : tuple_type<A6> {
5814     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a6) {}
5815     typename tuple_type<A6>::const_reference get() const { return m_x; }
5816 private:
5817     typename tuple_type<A6>::const_reference m_x;
5818 };
5819 
5820 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5821 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 7> : tuple_type<A7> {
5822     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a7) {}
5823     typename tuple_type<A7>::const_reference get() const { return m_x; }
5824 private:
5825     typename tuple_type<A7>::const_reference m_x;
5826 };
5827 
5828 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5829 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 8> : tuple_type<A8> {
5830     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a8) {}
5831     typename tuple_type<A8>::const_reference get() const { return m_x; }
5832 private:
5833     typename tuple_type<A8>::const_reference m_x;
5834 };
5835 
5836 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5837 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 9> : tuple_type<A9> {
5838     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a9) {}
5839     typename tuple_type<A9>::const_reference get() const { return m_x; }
5840 private:
5841     typename tuple_type<A9>::const_reference m_x;
5842 };
5843 
5844 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5845 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 10> : tuple_type<A10> {
5846     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a10) {}
5847     typename tuple_type<A10>::const_reference get() const { return m_x; }
5848 private:
5849     typename tuple_type<A10>::const_reference m_x;
5850 };
5851 
5852 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5853 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 11> : tuple_type<A11> {
5854     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a11) {}
5855     typename tuple_type<A11>::const_reference get() const { return m_x; }
5856 private:
5857     typename tuple_type<A11>::const_reference m_x;
5858 };
5859 
5860 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5861 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 12> : tuple_type<A12> {
5862     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a12) {}
5863     typename tuple_type<A12>::const_reference get() const { return m_x; }
5864 private:
5865     typename tuple_type<A12>::const_reference m_x;
5866 };
5867 
5868 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5869 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 13> : tuple_type<A13> {
5870     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a13) {}
5871     typename tuple_type<A13>::const_reference get() const { return m_x; }
5872 private:
5873     typename tuple_type<A13>::const_reference m_x;
5874 };
5875 
5876 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5877 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 14> : tuple_type<A14> {
5878     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& x) : m_x(x.a14) {}
5879     typename tuple_type<A14>::const_reference get() const { return m_x; }
5880 private:
5881     typename tuple_type<A14>::const_reference m_x;
5882 };
5883 
5884 
5885 
5886 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5887 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 0> : tuple_type<A0> {
5888     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a0) {}
5889     typename tuple_type<A0>::const_reference get() const { return m_x; }
5890 private:
5891     typename tuple_type<A0>::const_reference m_x;
5892 };
5893 
5894 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5895 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 1> : tuple_type<A1> {
5896     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a1) {}
5897     typename tuple_type<A1>::const_reference get() const { return m_x; }
5898 private:
5899     typename tuple_type<A1>::const_reference m_x;
5900 };
5901 
5902 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5903 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 2> : tuple_type<A2> {
5904     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a2) {}
5905     typename tuple_type<A2>::const_reference get() const { return m_x; }
5906 private:
5907     typename tuple_type<A2>::const_reference m_x;
5908 };
5909 
5910 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5911 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 3> : tuple_type<A3> {
5912     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a3) {}
5913     typename tuple_type<A3>::const_reference get() const { return m_x; }
5914 private:
5915     typename tuple_type<A3>::const_reference m_x;
5916 };
5917 
5918 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5919 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 4> : tuple_type<A4> {
5920     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a4) {}
5921     typename tuple_type<A4>::const_reference get() const { return m_x; }
5922 private:
5923     typename tuple_type<A4>::const_reference m_x;
5924 };
5925 
5926 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5927 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 5> : tuple_type<A5> {
5928     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a5) {}
5929     typename tuple_type<A5>::const_reference get() const { return m_x; }
5930 private:
5931     typename tuple_type<A5>::const_reference m_x;
5932 };
5933 
5934 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5935 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 6> : tuple_type<A6> {
5936     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a6) {}
5937     typename tuple_type<A6>::const_reference get() const { return m_x; }
5938 private:
5939     typename tuple_type<A6>::const_reference m_x;
5940 };
5941 
5942 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5943 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 7> : tuple_type<A7> {
5944     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a7) {}
5945     typename tuple_type<A7>::const_reference get() const { return m_x; }
5946 private:
5947     typename tuple_type<A7>::const_reference m_x;
5948 };
5949 
5950 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5951 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 8> : tuple_type<A8> {
5952     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a8) {}
5953     typename tuple_type<A8>::const_reference get() const { return m_x; }
5954 private:
5955     typename tuple_type<A8>::const_reference m_x;
5956 };
5957 
5958 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5959 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 9> : tuple_type<A9> {
5960     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a9) {}
5961     typename tuple_type<A9>::const_reference get() const { return m_x; }
5962 private:
5963     typename tuple_type<A9>::const_reference m_x;
5964 };
5965 
5966 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5967 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 10> : tuple_type<A10> {
5968     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a10) {}
5969     typename tuple_type<A10>::const_reference get() const { return m_x; }
5970 private:
5971     typename tuple_type<A10>::const_reference m_x;
5972 };
5973 
5974 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5975 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 11> : tuple_type<A11> {
5976     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a11) {}
5977     typename tuple_type<A11>::const_reference get() const { return m_x; }
5978 private:
5979     typename tuple_type<A11>::const_reference m_x;
5980 };
5981 
5982 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5983 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 12> : tuple_type<A12> {
5984     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a12) {}
5985     typename tuple_type<A12>::const_reference get() const { return m_x; }
5986 private:
5987     typename tuple_type<A12>::const_reference m_x;
5988 };
5989 
5990 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5991 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 13> : tuple_type<A13> {
5992     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a13) {}
5993     typename tuple_type<A13>::const_reference get() const { return m_x; }
5994 private:
5995     typename tuple_type<A13>::const_reference m_x;
5996 };
5997 
5998 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5999 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 14> : tuple_type<A14> {
6000     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a14) {}
6001     typename tuple_type<A14>::const_reference get() const { return m_x; }
6002 private:
6003     typename tuple_type<A14>::const_reference m_x;
6004 };
6005 
6006 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
6007 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 15> : tuple_type<A15> {
6008     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& x) : m_x(x.a15) {}
6009     typename tuple_type<A15>::const_reference get() const { return m_x; }
6010 private:
6011     typename tuple_type<A15>::const_reference m_x;
6012 };
6013 
6014 
6015 
6016 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6017 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 0> : tuple_type<A0> {
6018     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a0) {}
6019     typename tuple_type<A0>::const_reference get() const { return m_x; }
6020 private:
6021     typename tuple_type<A0>::const_reference m_x;
6022 };
6023 
6024 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6025 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 1> : tuple_type<A1> {
6026     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a1) {}
6027     typename tuple_type<A1>::const_reference get() const { return m_x; }
6028 private:
6029     typename tuple_type<A1>::const_reference m_x;
6030 };
6031 
6032 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6033 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 2> : tuple_type<A2> {
6034     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a2) {}
6035     typename tuple_type<A2>::const_reference get() const { return m_x; }
6036 private:
6037     typename tuple_type<A2>::const_reference m_x;
6038 };
6039 
6040 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6041 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 3> : tuple_type<A3> {
6042     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a3) {}
6043     typename tuple_type<A3>::const_reference get() const { return m_x; }
6044 private:
6045     typename tuple_type<A3>::const_reference m_x;
6046 };
6047 
6048 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6049 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 4> : tuple_type<A4> {
6050     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a4) {}
6051     typename tuple_type<A4>::const_reference get() const { return m_x; }
6052 private:
6053     typename tuple_type<A4>::const_reference m_x;
6054 };
6055 
6056 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6057 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 5> : tuple_type<A5> {
6058     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a5) {}
6059     typename tuple_type<A5>::const_reference get() const { return m_x; }
6060 private:
6061     typename tuple_type<A5>::const_reference m_x;
6062 };
6063 
6064 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6065 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 6> : tuple_type<A6> {
6066     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a6) {}
6067     typename tuple_type<A6>::const_reference get() const { return m_x; }
6068 private:
6069     typename tuple_type<A6>::const_reference m_x;
6070 };
6071 
6072 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6073 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 7> : tuple_type<A7> {
6074     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a7) {}
6075     typename tuple_type<A7>::const_reference get() const { return m_x; }
6076 private:
6077     typename tuple_type<A7>::const_reference m_x;
6078 };
6079 
6080 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6081 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 8> : tuple_type<A8> {
6082     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a8) {}
6083     typename tuple_type<A8>::const_reference get() const { return m_x; }
6084 private:
6085     typename tuple_type<A8>::const_reference m_x;
6086 };
6087 
6088 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6089 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 9> : tuple_type<A9> {
6090     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a9) {}
6091     typename tuple_type<A9>::const_reference get() const { return m_x; }
6092 private:
6093     typename tuple_type<A9>::const_reference m_x;
6094 };
6095 
6096 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6097 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 10> : tuple_type<A10> {
6098     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a10) {}
6099     typename tuple_type<A10>::const_reference get() const { return m_x; }
6100 private:
6101     typename tuple_type<A10>::const_reference m_x;
6102 };
6103 
6104 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6105 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 11> : tuple_type<A11> {
6106     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a11) {}
6107     typename tuple_type<A11>::const_reference get() const { return m_x; }
6108 private:
6109     typename tuple_type<A11>::const_reference m_x;
6110 };
6111 
6112 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6113 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 12> : tuple_type<A12> {
6114     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a12) {}
6115     typename tuple_type<A12>::const_reference get() const { return m_x; }
6116 private:
6117     typename tuple_type<A12>::const_reference m_x;
6118 };
6119 
6120 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6121 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 13> : tuple_type<A13> {
6122     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a13) {}
6123     typename tuple_type<A13>::const_reference get() const { return m_x; }
6124 private:
6125     typename tuple_type<A13>::const_reference m_x;
6126 };
6127 
6128 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6129 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 14> : tuple_type<A14> {
6130     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a14) {}
6131     typename tuple_type<A14>::const_reference get() const { return m_x; }
6132 private:
6133     typename tuple_type<A14>::const_reference m_x;
6134 };
6135 
6136 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6137 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 15> : tuple_type<A15> {
6138     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a15) {}
6139     typename tuple_type<A15>::const_reference get() const { return m_x; }
6140 private:
6141     typename tuple_type<A15>::const_reference m_x;
6142 };
6143 
6144 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6145 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, 16> : tuple_type<A16> {
6146     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& x) : m_x(x.a16) {}
6147     typename tuple_type<A16>::const_reference get() const { return m_x; }
6148 private:
6149     typename tuple_type<A16>::const_reference m_x;
6150 };
6151 
6152 
6153 
6154 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6155 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 0> : tuple_type<A0> {
6156     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a0) {}
6157     typename tuple_type<A0>::const_reference get() const { return m_x; }
6158 private:
6159     typename tuple_type<A0>::const_reference m_x;
6160 };
6161 
6162 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6163 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 1> : tuple_type<A1> {
6164     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a1) {}
6165     typename tuple_type<A1>::const_reference get() const { return m_x; }
6166 private:
6167     typename tuple_type<A1>::const_reference m_x;
6168 };
6169 
6170 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6171 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 2> : tuple_type<A2> {
6172     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a2) {}
6173     typename tuple_type<A2>::const_reference get() const { return m_x; }
6174 private:
6175     typename tuple_type<A2>::const_reference m_x;
6176 };
6177 
6178 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6179 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 3> : tuple_type<A3> {
6180     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a3) {}
6181     typename tuple_type<A3>::const_reference get() const { return m_x; }
6182 private:
6183     typename tuple_type<A3>::const_reference m_x;
6184 };
6185 
6186 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6187 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 4> : tuple_type<A4> {
6188     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a4) {}
6189     typename tuple_type<A4>::const_reference get() const { return m_x; }
6190 private:
6191     typename tuple_type<A4>::const_reference m_x;
6192 };
6193 
6194 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6195 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 5> : tuple_type<A5> {
6196     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a5) {}
6197     typename tuple_type<A5>::const_reference get() const { return m_x; }
6198 private:
6199     typename tuple_type<A5>::const_reference m_x;
6200 };
6201 
6202 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6203 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 6> : tuple_type<A6> {
6204     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a6) {}
6205     typename tuple_type<A6>::const_reference get() const { return m_x; }
6206 private:
6207     typename tuple_type<A6>::const_reference m_x;
6208 };
6209 
6210 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6211 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 7> : tuple_type<A7> {
6212     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a7) {}
6213     typename tuple_type<A7>::const_reference get() const { return m_x; }
6214 private:
6215     typename tuple_type<A7>::const_reference m_x;
6216 };
6217 
6218 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6219 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 8> : tuple_type<A8> {
6220     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a8) {}
6221     typename tuple_type<A8>::const_reference get() const { return m_x; }
6222 private:
6223     typename tuple_type<A8>::const_reference m_x;
6224 };
6225 
6226 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6227 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 9> : tuple_type<A9> {
6228     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a9) {}
6229     typename tuple_type<A9>::const_reference get() const { return m_x; }
6230 private:
6231     typename tuple_type<A9>::const_reference m_x;
6232 };
6233 
6234 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6235 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 10> : tuple_type<A10> {
6236     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a10) {}
6237     typename tuple_type<A10>::const_reference get() const { return m_x; }
6238 private:
6239     typename tuple_type<A10>::const_reference m_x;
6240 };
6241 
6242 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6243 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 11> : tuple_type<A11> {
6244     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a11) {}
6245     typename tuple_type<A11>::const_reference get() const { return m_x; }
6246 private:
6247     typename tuple_type<A11>::const_reference m_x;
6248 };
6249 
6250 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6251 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 12> : tuple_type<A12> {
6252     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a12) {}
6253     typename tuple_type<A12>::const_reference get() const { return m_x; }
6254 private:
6255     typename tuple_type<A12>::const_reference m_x;
6256 };
6257 
6258 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6259 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 13> : tuple_type<A13> {
6260     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a13) {}
6261     typename tuple_type<A13>::const_reference get() const { return m_x; }
6262 private:
6263     typename tuple_type<A13>::const_reference m_x;
6264 };
6265 
6266 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6267 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 14> : tuple_type<A14> {
6268     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a14) {}
6269     typename tuple_type<A14>::const_reference get() const { return m_x; }
6270 private:
6271     typename tuple_type<A14>::const_reference m_x;
6272 };
6273 
6274 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6275 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 15> : tuple_type<A15> {
6276     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a15) {}
6277     typename tuple_type<A15>::const_reference get() const { return m_x; }
6278 private:
6279     typename tuple_type<A15>::const_reference m_x;
6280 };
6281 
6282 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6283 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 16> : tuple_type<A16> {
6284     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a16) {}
6285     typename tuple_type<A16>::const_reference get() const { return m_x; }
6286 private:
6287     typename tuple_type<A16>::const_reference m_x;
6288 };
6289 
6290 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6291 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, 17> : tuple_type<A17> {
6292     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& x) : m_x(x.a17) {}
6293     typename tuple_type<A17>::const_reference get() const { return m_x; }
6294 private:
6295     typename tuple_type<A17>::const_reference m_x;
6296 };
6297 
6298 
6299 
6300 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6301 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 0> : tuple_type<A0> {
6302     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a0) {}
6303     typename tuple_type<A0>::const_reference get() const { return m_x; }
6304 private:
6305     typename tuple_type<A0>::const_reference m_x;
6306 };
6307 
6308 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6309 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 1> : tuple_type<A1> {
6310     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a1) {}
6311     typename tuple_type<A1>::const_reference get() const { return m_x; }
6312 private:
6313     typename tuple_type<A1>::const_reference m_x;
6314 };
6315 
6316 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6317 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 2> : tuple_type<A2> {
6318     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a2) {}
6319     typename tuple_type<A2>::const_reference get() const { return m_x; }
6320 private:
6321     typename tuple_type<A2>::const_reference m_x;
6322 };
6323 
6324 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6325 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 3> : tuple_type<A3> {
6326     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a3) {}
6327     typename tuple_type<A3>::const_reference get() const { return m_x; }
6328 private:
6329     typename tuple_type<A3>::const_reference m_x;
6330 };
6331 
6332 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6333 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 4> : tuple_type<A4> {
6334     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a4) {}
6335     typename tuple_type<A4>::const_reference get() const { return m_x; }
6336 private:
6337     typename tuple_type<A4>::const_reference m_x;
6338 };
6339 
6340 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6341 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 5> : tuple_type<A5> {
6342     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a5) {}
6343     typename tuple_type<A5>::const_reference get() const { return m_x; }
6344 private:
6345     typename tuple_type<A5>::const_reference m_x;
6346 };
6347 
6348 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6349 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 6> : tuple_type<A6> {
6350     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a6) {}
6351     typename tuple_type<A6>::const_reference get() const { return m_x; }
6352 private:
6353     typename tuple_type<A6>::const_reference m_x;
6354 };
6355 
6356 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6357 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 7> : tuple_type<A7> {
6358     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a7) {}
6359     typename tuple_type<A7>::const_reference get() const { return m_x; }
6360 private:
6361     typename tuple_type<A7>::const_reference m_x;
6362 };
6363 
6364 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6365 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 8> : tuple_type<A8> {
6366     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a8) {}
6367     typename tuple_type<A8>::const_reference get() const { return m_x; }
6368 private:
6369     typename tuple_type<A8>::const_reference m_x;
6370 };
6371 
6372 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6373 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 9> : tuple_type<A9> {
6374     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a9) {}
6375     typename tuple_type<A9>::const_reference get() const { return m_x; }
6376 private:
6377     typename tuple_type<A9>::const_reference m_x;
6378 };
6379 
6380 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6381 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 10> : tuple_type<A10> {
6382     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a10) {}
6383     typename tuple_type<A10>::const_reference get() const { return m_x; }
6384 private:
6385     typename tuple_type<A10>::const_reference m_x;
6386 };
6387 
6388 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6389 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 11> : tuple_type<A11> {
6390     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a11) {}
6391     typename tuple_type<A11>::const_reference get() const { return m_x; }
6392 private:
6393     typename tuple_type<A11>::const_reference m_x;
6394 };
6395 
6396 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6397 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 12> : tuple_type<A12> {
6398     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a12) {}
6399     typename tuple_type<A12>::const_reference get() const { return m_x; }
6400 private:
6401     typename tuple_type<A12>::const_reference m_x;
6402 };
6403 
6404 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6405 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 13> : tuple_type<A13> {
6406     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a13) {}
6407     typename tuple_type<A13>::const_reference get() const { return m_x; }
6408 private:
6409     typename tuple_type<A13>::const_reference m_x;
6410 };
6411 
6412 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6413 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 14> : tuple_type<A14> {
6414     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a14) {}
6415     typename tuple_type<A14>::const_reference get() const { return m_x; }
6416 private:
6417     typename tuple_type<A14>::const_reference m_x;
6418 };
6419 
6420 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6421 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 15> : tuple_type<A15> {
6422     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a15) {}
6423     typename tuple_type<A15>::const_reference get() const { return m_x; }
6424 private:
6425     typename tuple_type<A15>::const_reference m_x;
6426 };
6427 
6428 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6429 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 16> : tuple_type<A16> {
6430     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a16) {}
6431     typename tuple_type<A16>::const_reference get() const { return m_x; }
6432 private:
6433     typename tuple_type<A16>::const_reference m_x;
6434 };
6435 
6436 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6437 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 17> : tuple_type<A17> {
6438     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a17) {}
6439     typename tuple_type<A17>::const_reference get() const { return m_x; }
6440 private:
6441     typename tuple_type<A17>::const_reference m_x;
6442 };
6443 
6444 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6445 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, 18> : tuple_type<A18> {
6446     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& x) : m_x(x.a18) {}
6447     typename tuple_type<A18>::const_reference get() const { return m_x; }
6448 private:
6449     typename tuple_type<A18>::const_reference m_x;
6450 };
6451 
6452 
6453 
6454 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6455 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 0> : tuple_type<A0> {
6456     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a0) {}
6457     typename tuple_type<A0>::const_reference get() const { return m_x; }
6458 private:
6459     typename tuple_type<A0>::const_reference m_x;
6460 };
6461 
6462 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6463 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 1> : tuple_type<A1> {
6464     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a1) {}
6465     typename tuple_type<A1>::const_reference get() const { return m_x; }
6466 private:
6467     typename tuple_type<A1>::const_reference m_x;
6468 };
6469 
6470 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6471 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 2> : tuple_type<A2> {
6472     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a2) {}
6473     typename tuple_type<A2>::const_reference get() const { return m_x; }
6474 private:
6475     typename tuple_type<A2>::const_reference m_x;
6476 };
6477 
6478 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6479 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 3> : tuple_type<A3> {
6480     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a3) {}
6481     typename tuple_type<A3>::const_reference get() const { return m_x; }
6482 private:
6483     typename tuple_type<A3>::const_reference m_x;
6484 };
6485 
6486 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6487 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 4> : tuple_type<A4> {
6488     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a4) {}
6489     typename tuple_type<A4>::const_reference get() const { return m_x; }
6490 private:
6491     typename tuple_type<A4>::const_reference m_x;
6492 };
6493 
6494 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6495 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 5> : tuple_type<A5> {
6496     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a5) {}
6497     typename tuple_type<A5>::const_reference get() const { return m_x; }
6498 private:
6499     typename tuple_type<A5>::const_reference m_x;
6500 };
6501 
6502 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6503 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 6> : tuple_type<A6> {
6504     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a6) {}
6505     typename tuple_type<A6>::const_reference get() const { return m_x; }
6506 private:
6507     typename tuple_type<A6>::const_reference m_x;
6508 };
6509 
6510 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6511 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 7> : tuple_type<A7> {
6512     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a7) {}
6513     typename tuple_type<A7>::const_reference get() const { return m_x; }
6514 private:
6515     typename tuple_type<A7>::const_reference m_x;
6516 };
6517 
6518 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6519 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 8> : tuple_type<A8> {
6520     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a8) {}
6521     typename tuple_type<A8>::const_reference get() const { return m_x; }
6522 private:
6523     typename tuple_type<A8>::const_reference m_x;
6524 };
6525 
6526 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6527 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 9> : tuple_type<A9> {
6528     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a9) {}
6529     typename tuple_type<A9>::const_reference get() const { return m_x; }
6530 private:
6531     typename tuple_type<A9>::const_reference m_x;
6532 };
6533 
6534 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6535 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 10> : tuple_type<A10> {
6536     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a10) {}
6537     typename tuple_type<A10>::const_reference get() const { return m_x; }
6538 private:
6539     typename tuple_type<A10>::const_reference m_x;
6540 };
6541 
6542 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6543 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 11> : tuple_type<A11> {
6544     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a11) {}
6545     typename tuple_type<A11>::const_reference get() const { return m_x; }
6546 private:
6547     typename tuple_type<A11>::const_reference m_x;
6548 };
6549 
6550 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6551 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 12> : tuple_type<A12> {
6552     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a12) {}
6553     typename tuple_type<A12>::const_reference get() const { return m_x; }
6554 private:
6555     typename tuple_type<A12>::const_reference m_x;
6556 };
6557 
6558 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6559 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 13> : tuple_type<A13> {
6560     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a13) {}
6561     typename tuple_type<A13>::const_reference get() const { return m_x; }
6562 private:
6563     typename tuple_type<A13>::const_reference m_x;
6564 };
6565 
6566 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6567 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 14> : tuple_type<A14> {
6568     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a14) {}
6569     typename tuple_type<A14>::const_reference get() const { return m_x; }
6570 private:
6571     typename tuple_type<A14>::const_reference m_x;
6572 };
6573 
6574 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6575 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 15> : tuple_type<A15> {
6576     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a15) {}
6577     typename tuple_type<A15>::const_reference get() const { return m_x; }
6578 private:
6579     typename tuple_type<A15>::const_reference m_x;
6580 };
6581 
6582 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6583 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 16> : tuple_type<A16> {
6584     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a16) {}
6585     typename tuple_type<A16>::const_reference get() const { return m_x; }
6586 private:
6587     typename tuple_type<A16>::const_reference m_x;
6588 };
6589 
6590 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6591 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 17> : tuple_type<A17> {
6592     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a17) {}
6593     typename tuple_type<A17>::const_reference get() const { return m_x; }
6594 private:
6595     typename tuple_type<A17>::const_reference m_x;
6596 };
6597 
6598 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6599 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 18> : tuple_type<A18> {
6600     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a18) {}
6601     typename tuple_type<A18>::const_reference get() const { return m_x; }
6602 private:
6603     typename tuple_type<A18>::const_reference m_x;
6604 };
6605 
6606 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6607 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, 19> : tuple_type<A19> {
6608     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& x) : m_x(x.a19) {}
6609     typename tuple_type<A19>::const_reference get() const { return m_x; }
6610 private:
6611     typename tuple_type<A19>::const_reference m_x;
6612 };
6613 
6614 
6615 
6616 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6617 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 0> : tuple_type<A0> {
6618     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a0) {}
6619     typename tuple_type<A0>::const_reference get() const { return m_x; }
6620 private:
6621     typename tuple_type<A0>::const_reference m_x;
6622 };
6623 
6624 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6625 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 1> : tuple_type<A1> {
6626     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a1) {}
6627     typename tuple_type<A1>::const_reference get() const { return m_x; }
6628 private:
6629     typename tuple_type<A1>::const_reference m_x;
6630 };
6631 
6632 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6633 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 2> : tuple_type<A2> {
6634     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a2) {}
6635     typename tuple_type<A2>::const_reference get() const { return m_x; }
6636 private:
6637     typename tuple_type<A2>::const_reference m_x;
6638 };
6639 
6640 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6641 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 3> : tuple_type<A3> {
6642     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a3) {}
6643     typename tuple_type<A3>::const_reference get() const { return m_x; }
6644 private:
6645     typename tuple_type<A3>::const_reference m_x;
6646 };
6647 
6648 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6649 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 4> : tuple_type<A4> {
6650     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a4) {}
6651     typename tuple_type<A4>::const_reference get() const { return m_x; }
6652 private:
6653     typename tuple_type<A4>::const_reference m_x;
6654 };
6655 
6656 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6657 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 5> : tuple_type<A5> {
6658     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a5) {}
6659     typename tuple_type<A5>::const_reference get() const { return m_x; }
6660 private:
6661     typename tuple_type<A5>::const_reference m_x;
6662 };
6663 
6664 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6665 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 6> : tuple_type<A6> {
6666     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a6) {}
6667     typename tuple_type<A6>::const_reference get() const { return m_x; }
6668 private:
6669     typename tuple_type<A6>::const_reference m_x;
6670 };
6671 
6672 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6673 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 7> : tuple_type<A7> {
6674     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a7) {}
6675     typename tuple_type<A7>::const_reference get() const { return m_x; }
6676 private:
6677     typename tuple_type<A7>::const_reference m_x;
6678 };
6679 
6680 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6681 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 8> : tuple_type<A8> {
6682     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a8) {}
6683     typename tuple_type<A8>::const_reference get() const { return m_x; }
6684 private:
6685     typename tuple_type<A8>::const_reference m_x;
6686 };
6687 
6688 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6689 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 9> : tuple_type<A9> {
6690     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a9) {}
6691     typename tuple_type<A9>::const_reference get() const { return m_x; }
6692 private:
6693     typename tuple_type<A9>::const_reference m_x;
6694 };
6695 
6696 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6697 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 10> : tuple_type<A10> {
6698     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a10) {}
6699     typename tuple_type<A10>::const_reference get() const { return m_x; }
6700 private:
6701     typename tuple_type<A10>::const_reference m_x;
6702 };
6703 
6704 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6705 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 11> : tuple_type<A11> {
6706     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a11) {}
6707     typename tuple_type<A11>::const_reference get() const { return m_x; }
6708 private:
6709     typename tuple_type<A11>::const_reference m_x;
6710 };
6711 
6712 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6713 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 12> : tuple_type<A12> {
6714     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a12) {}
6715     typename tuple_type<A12>::const_reference get() const { return m_x; }
6716 private:
6717     typename tuple_type<A12>::const_reference m_x;
6718 };
6719 
6720 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6721 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 13> : tuple_type<A13> {
6722     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a13) {}
6723     typename tuple_type<A13>::const_reference get() const { return m_x; }
6724 private:
6725     typename tuple_type<A13>::const_reference m_x;
6726 };
6727 
6728 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6729 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 14> : tuple_type<A14> {
6730     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a14) {}
6731     typename tuple_type<A14>::const_reference get() const { return m_x; }
6732 private:
6733     typename tuple_type<A14>::const_reference m_x;
6734 };
6735 
6736 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6737 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 15> : tuple_type<A15> {
6738     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a15) {}
6739     typename tuple_type<A15>::const_reference get() const { return m_x; }
6740 private:
6741     typename tuple_type<A15>::const_reference m_x;
6742 };
6743 
6744 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6745 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 16> : tuple_type<A16> {
6746     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a16) {}
6747     typename tuple_type<A16>::const_reference get() const { return m_x; }
6748 private:
6749     typename tuple_type<A16>::const_reference m_x;
6750 };
6751 
6752 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6753 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 17> : tuple_type<A17> {
6754     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a17) {}
6755     typename tuple_type<A17>::const_reference get() const { return m_x; }
6756 private:
6757     typename tuple_type<A17>::const_reference m_x;
6758 };
6759 
6760 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6761 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 18> : tuple_type<A18> {
6762     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a18) {}
6763     typename tuple_type<A18>::const_reference get() const { return m_x; }
6764 private:
6765     typename tuple_type<A18>::const_reference m_x;
6766 };
6767 
6768 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6769 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 19> : tuple_type<A19> {
6770     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a19) {}
6771     typename tuple_type<A19>::const_reference get() const { return m_x; }
6772 private:
6773     typename tuple_type<A19>::const_reference m_x;
6774 };
6775 
6776 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6777 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, 20> : tuple_type<A20> {
6778     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& x) : m_x(x.a20) {}
6779     typename tuple_type<A20>::const_reference get() const { return m_x; }
6780 private:
6781     typename tuple_type<A20>::const_reference m_x;
6782 };
6783 
6784 
6785 
6786 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6787 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 0> : tuple_type<A0> {
6788     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a0) {}
6789     typename tuple_type<A0>::const_reference get() const { return m_x; }
6790 private:
6791     typename tuple_type<A0>::const_reference m_x;
6792 };
6793 
6794 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6795 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 1> : tuple_type<A1> {
6796     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a1) {}
6797     typename tuple_type<A1>::const_reference get() const { return m_x; }
6798 private:
6799     typename tuple_type<A1>::const_reference m_x;
6800 };
6801 
6802 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6803 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 2> : tuple_type<A2> {
6804     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a2) {}
6805     typename tuple_type<A2>::const_reference get() const { return m_x; }
6806 private:
6807     typename tuple_type<A2>::const_reference m_x;
6808 };
6809 
6810 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6811 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 3> : tuple_type<A3> {
6812     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a3) {}
6813     typename tuple_type<A3>::const_reference get() const { return m_x; }
6814 private:
6815     typename tuple_type<A3>::const_reference m_x;
6816 };
6817 
6818 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6819 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 4> : tuple_type<A4> {
6820     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a4) {}
6821     typename tuple_type<A4>::const_reference get() const { return m_x; }
6822 private:
6823     typename tuple_type<A4>::const_reference m_x;
6824 };
6825 
6826 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6827 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 5> : tuple_type<A5> {
6828     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a5) {}
6829     typename tuple_type<A5>::const_reference get() const { return m_x; }
6830 private:
6831     typename tuple_type<A5>::const_reference m_x;
6832 };
6833 
6834 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6835 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 6> : tuple_type<A6> {
6836     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a6) {}
6837     typename tuple_type<A6>::const_reference get() const { return m_x; }
6838 private:
6839     typename tuple_type<A6>::const_reference m_x;
6840 };
6841 
6842 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6843 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 7> : tuple_type<A7> {
6844     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a7) {}
6845     typename tuple_type<A7>::const_reference get() const { return m_x; }
6846 private:
6847     typename tuple_type<A7>::const_reference m_x;
6848 };
6849 
6850 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6851 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 8> : tuple_type<A8> {
6852     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a8) {}
6853     typename tuple_type<A8>::const_reference get() const { return m_x; }
6854 private:
6855     typename tuple_type<A8>::const_reference m_x;
6856 };
6857 
6858 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6859 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 9> : tuple_type<A9> {
6860     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a9) {}
6861     typename tuple_type<A9>::const_reference get() const { return m_x; }
6862 private:
6863     typename tuple_type<A9>::const_reference m_x;
6864 };
6865 
6866 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6867 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 10> : tuple_type<A10> {
6868     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a10) {}
6869     typename tuple_type<A10>::const_reference get() const { return m_x; }
6870 private:
6871     typename tuple_type<A10>::const_reference m_x;
6872 };
6873 
6874 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6875 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 11> : tuple_type<A11> {
6876     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a11) {}
6877     typename tuple_type<A11>::const_reference get() const { return m_x; }
6878 private:
6879     typename tuple_type<A11>::const_reference m_x;
6880 };
6881 
6882 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6883 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 12> : tuple_type<A12> {
6884     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a12) {}
6885     typename tuple_type<A12>::const_reference get() const { return m_x; }
6886 private:
6887     typename tuple_type<A12>::const_reference m_x;
6888 };
6889 
6890 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6891 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 13> : tuple_type<A13> {
6892     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a13) {}
6893     typename tuple_type<A13>::const_reference get() const { return m_x; }
6894 private:
6895     typename tuple_type<A13>::const_reference m_x;
6896 };
6897 
6898 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6899 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 14> : tuple_type<A14> {
6900     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a14) {}
6901     typename tuple_type<A14>::const_reference get() const { return m_x; }
6902 private:
6903     typename tuple_type<A14>::const_reference m_x;
6904 };
6905 
6906 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6907 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 15> : tuple_type<A15> {
6908     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a15) {}
6909     typename tuple_type<A15>::const_reference get() const { return m_x; }
6910 private:
6911     typename tuple_type<A15>::const_reference m_x;
6912 };
6913 
6914 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6915 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 16> : tuple_type<A16> {
6916     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a16) {}
6917     typename tuple_type<A16>::const_reference get() const { return m_x; }
6918 private:
6919     typename tuple_type<A16>::const_reference m_x;
6920 };
6921 
6922 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6923 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 17> : tuple_type<A17> {
6924     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a17) {}
6925     typename tuple_type<A17>::const_reference get() const { return m_x; }
6926 private:
6927     typename tuple_type<A17>::const_reference m_x;
6928 };
6929 
6930 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6931 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 18> : tuple_type<A18> {
6932     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a18) {}
6933     typename tuple_type<A18>::const_reference get() const { return m_x; }
6934 private:
6935     typename tuple_type<A18>::const_reference m_x;
6936 };
6937 
6938 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6939 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 19> : tuple_type<A19> {
6940     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a19) {}
6941     typename tuple_type<A19>::const_reference get() const { return m_x; }
6942 private:
6943     typename tuple_type<A19>::const_reference m_x;
6944 };
6945 
6946 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6947 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 20> : tuple_type<A20> {
6948     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a20) {}
6949     typename tuple_type<A20>::const_reference get() const { return m_x; }
6950 private:
6951     typename tuple_type<A20>::const_reference m_x;
6952 };
6953 
6954 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6955 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, 21> : tuple_type<A21> {
6956     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& x) : m_x(x.a21) {}
6957     typename tuple_type<A21>::const_reference get() const { return m_x; }
6958 private:
6959     typename tuple_type<A21>::const_reference m_x;
6960 };
6961 
6962 
6963 
6964 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6965 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 0> : tuple_type<A0> {
6966     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a0) {}
6967     typename tuple_type<A0>::const_reference get() const { return m_x; }
6968 private:
6969     typename tuple_type<A0>::const_reference m_x;
6970 };
6971 
6972 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6973 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 1> : tuple_type<A1> {
6974     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a1) {}
6975     typename tuple_type<A1>::const_reference get() const { return m_x; }
6976 private:
6977     typename tuple_type<A1>::const_reference m_x;
6978 };
6979 
6980 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6981 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 2> : tuple_type<A2> {
6982     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a2) {}
6983     typename tuple_type<A2>::const_reference get() const { return m_x; }
6984 private:
6985     typename tuple_type<A2>::const_reference m_x;
6986 };
6987 
6988 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6989 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 3> : tuple_type<A3> {
6990     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a3) {}
6991     typename tuple_type<A3>::const_reference get() const { return m_x; }
6992 private:
6993     typename tuple_type<A3>::const_reference m_x;
6994 };
6995 
6996 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6997 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 4> : tuple_type<A4> {
6998     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a4) {}
6999     typename tuple_type<A4>::const_reference get() const { return m_x; }
7000 private:
7001     typename tuple_type<A4>::const_reference m_x;
7002 };
7003 
7004 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7005 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 5> : tuple_type<A5> {
7006     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a5) {}
7007     typename tuple_type<A5>::const_reference get() const { return m_x; }
7008 private:
7009     typename tuple_type<A5>::const_reference m_x;
7010 };
7011 
7012 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7013 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 6> : tuple_type<A6> {
7014     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a6) {}
7015     typename tuple_type<A6>::const_reference get() const { return m_x; }
7016 private:
7017     typename tuple_type<A6>::const_reference m_x;
7018 };
7019 
7020 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7021 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 7> : tuple_type<A7> {
7022     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a7) {}
7023     typename tuple_type<A7>::const_reference get() const { return m_x; }
7024 private:
7025     typename tuple_type<A7>::const_reference m_x;
7026 };
7027 
7028 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7029 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 8> : tuple_type<A8> {
7030     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a8) {}
7031     typename tuple_type<A8>::const_reference get() const { return m_x; }
7032 private:
7033     typename tuple_type<A8>::const_reference m_x;
7034 };
7035 
7036 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7037 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 9> : tuple_type<A9> {
7038     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a9) {}
7039     typename tuple_type<A9>::const_reference get() const { return m_x; }
7040 private:
7041     typename tuple_type<A9>::const_reference m_x;
7042 };
7043 
7044 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7045 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 10> : tuple_type<A10> {
7046     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a10) {}
7047     typename tuple_type<A10>::const_reference get() const { return m_x; }
7048 private:
7049     typename tuple_type<A10>::const_reference m_x;
7050 };
7051 
7052 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7053 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 11> : tuple_type<A11> {
7054     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a11) {}
7055     typename tuple_type<A11>::const_reference get() const { return m_x; }
7056 private:
7057     typename tuple_type<A11>::const_reference m_x;
7058 };
7059 
7060 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7061 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 12> : tuple_type<A12> {
7062     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a12) {}
7063     typename tuple_type<A12>::const_reference get() const { return m_x; }
7064 private:
7065     typename tuple_type<A12>::const_reference m_x;
7066 };
7067 
7068 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7069 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 13> : tuple_type<A13> {
7070     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a13) {}
7071     typename tuple_type<A13>::const_reference get() const { return m_x; }
7072 private:
7073     typename tuple_type<A13>::const_reference m_x;
7074 };
7075 
7076 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7077 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 14> : tuple_type<A14> {
7078     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a14) {}
7079     typename tuple_type<A14>::const_reference get() const { return m_x; }
7080 private:
7081     typename tuple_type<A14>::const_reference m_x;
7082 };
7083 
7084 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7085 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 15> : tuple_type<A15> {
7086     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a15) {}
7087     typename tuple_type<A15>::const_reference get() const { return m_x; }
7088 private:
7089     typename tuple_type<A15>::const_reference m_x;
7090 };
7091 
7092 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7093 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 16> : tuple_type<A16> {
7094     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a16) {}
7095     typename tuple_type<A16>::const_reference get() const { return m_x; }
7096 private:
7097     typename tuple_type<A16>::const_reference m_x;
7098 };
7099 
7100 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7101 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 17> : tuple_type<A17> {
7102     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a17) {}
7103     typename tuple_type<A17>::const_reference get() const { return m_x; }
7104 private:
7105     typename tuple_type<A17>::const_reference m_x;
7106 };
7107 
7108 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7109 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 18> : tuple_type<A18> {
7110     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a18) {}
7111     typename tuple_type<A18>::const_reference get() const { return m_x; }
7112 private:
7113     typename tuple_type<A18>::const_reference m_x;
7114 };
7115 
7116 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7117 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 19> : tuple_type<A19> {
7118     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a19) {}
7119     typename tuple_type<A19>::const_reference get() const { return m_x; }
7120 private:
7121     typename tuple_type<A19>::const_reference m_x;
7122 };
7123 
7124 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7125 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 20> : tuple_type<A20> {
7126     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a20) {}
7127     typename tuple_type<A20>::const_reference get() const { return m_x; }
7128 private:
7129     typename tuple_type<A20>::const_reference m_x;
7130 };
7131 
7132 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7133 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 21> : tuple_type<A21> {
7134     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a21) {}
7135     typename tuple_type<A21>::const_reference get() const { return m_x; }
7136 private:
7137     typename tuple_type<A21>::const_reference m_x;
7138 };
7139 
7140 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7141 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, 22> : tuple_type<A22> {
7142     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& x) : m_x(x.a22) {}
7143     typename tuple_type<A22>::const_reference get() const { return m_x; }
7144 private:
7145     typename tuple_type<A22>::const_reference m_x;
7146 };
7147 
7148 
7149 
7150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7151 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 0> : tuple_type<A0> {
7152     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a0) {}
7153     typename tuple_type<A0>::const_reference get() const { return m_x; }
7154 private:
7155     typename tuple_type<A0>::const_reference m_x;
7156 };
7157 
7158 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7159 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 1> : tuple_type<A1> {
7160     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a1) {}
7161     typename tuple_type<A1>::const_reference get() const { return m_x; }
7162 private:
7163     typename tuple_type<A1>::const_reference m_x;
7164 };
7165 
7166 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7167 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 2> : tuple_type<A2> {
7168     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a2) {}
7169     typename tuple_type<A2>::const_reference get() const { return m_x; }
7170 private:
7171     typename tuple_type<A2>::const_reference m_x;
7172 };
7173 
7174 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7175 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 3> : tuple_type<A3> {
7176     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a3) {}
7177     typename tuple_type<A3>::const_reference get() const { return m_x; }
7178 private:
7179     typename tuple_type<A3>::const_reference m_x;
7180 };
7181 
7182 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7183 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 4> : tuple_type<A4> {
7184     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a4) {}
7185     typename tuple_type<A4>::const_reference get() const { return m_x; }
7186 private:
7187     typename tuple_type<A4>::const_reference m_x;
7188 };
7189 
7190 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7191 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 5> : tuple_type<A5> {
7192     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a5) {}
7193     typename tuple_type<A5>::const_reference get() const { return m_x; }
7194 private:
7195     typename tuple_type<A5>::const_reference m_x;
7196 };
7197 
7198 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7199 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 6> : tuple_type<A6> {
7200     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a6) {}
7201     typename tuple_type<A6>::const_reference get() const { return m_x; }
7202 private:
7203     typename tuple_type<A6>::const_reference m_x;
7204 };
7205 
7206 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7207 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 7> : tuple_type<A7> {
7208     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a7) {}
7209     typename tuple_type<A7>::const_reference get() const { return m_x; }
7210 private:
7211     typename tuple_type<A7>::const_reference m_x;
7212 };
7213 
7214 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7215 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 8> : tuple_type<A8> {
7216     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a8) {}
7217     typename tuple_type<A8>::const_reference get() const { return m_x; }
7218 private:
7219     typename tuple_type<A8>::const_reference m_x;
7220 };
7221 
7222 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7223 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 9> : tuple_type<A9> {
7224     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a9) {}
7225     typename tuple_type<A9>::const_reference get() const { return m_x; }
7226 private:
7227     typename tuple_type<A9>::const_reference m_x;
7228 };
7229 
7230 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7231 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 10> : tuple_type<A10> {
7232     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a10) {}
7233     typename tuple_type<A10>::const_reference get() const { return m_x; }
7234 private:
7235     typename tuple_type<A10>::const_reference m_x;
7236 };
7237 
7238 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7239 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 11> : tuple_type<A11> {
7240     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a11) {}
7241     typename tuple_type<A11>::const_reference get() const { return m_x; }
7242 private:
7243     typename tuple_type<A11>::const_reference m_x;
7244 };
7245 
7246 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7247 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 12> : tuple_type<A12> {
7248     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a12) {}
7249     typename tuple_type<A12>::const_reference get() const { return m_x; }
7250 private:
7251     typename tuple_type<A12>::const_reference m_x;
7252 };
7253 
7254 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7255 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 13> : tuple_type<A13> {
7256     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a13) {}
7257     typename tuple_type<A13>::const_reference get() const { return m_x; }
7258 private:
7259     typename tuple_type<A13>::const_reference m_x;
7260 };
7261 
7262 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7263 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 14> : tuple_type<A14> {
7264     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a14) {}
7265     typename tuple_type<A14>::const_reference get() const { return m_x; }
7266 private:
7267     typename tuple_type<A14>::const_reference m_x;
7268 };
7269 
7270 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7271 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 15> : tuple_type<A15> {
7272     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a15) {}
7273     typename tuple_type<A15>::const_reference get() const { return m_x; }
7274 private:
7275     typename tuple_type<A15>::const_reference m_x;
7276 };
7277 
7278 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7279 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 16> : tuple_type<A16> {
7280     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a16) {}
7281     typename tuple_type<A16>::const_reference get() const { return m_x; }
7282 private:
7283     typename tuple_type<A16>::const_reference m_x;
7284 };
7285 
7286 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7287 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 17> : tuple_type<A17> {
7288     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a17) {}
7289     typename tuple_type<A17>::const_reference get() const { return m_x; }
7290 private:
7291     typename tuple_type<A17>::const_reference m_x;
7292 };
7293 
7294 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7295 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 18> : tuple_type<A18> {
7296     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a18) {}
7297     typename tuple_type<A18>::const_reference get() const { return m_x; }
7298 private:
7299     typename tuple_type<A18>::const_reference m_x;
7300 };
7301 
7302 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7303 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 19> : tuple_type<A19> {
7304     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a19) {}
7305     typename tuple_type<A19>::const_reference get() const { return m_x; }
7306 private:
7307     typename tuple_type<A19>::const_reference m_x;
7308 };
7309 
7310 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7311 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 20> : tuple_type<A20> {
7312     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a20) {}
7313     typename tuple_type<A20>::const_reference get() const { return m_x; }
7314 private:
7315     typename tuple_type<A20>::const_reference m_x;
7316 };
7317 
7318 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7319 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 21> : tuple_type<A21> {
7320     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a21) {}
7321     typename tuple_type<A21>::const_reference get() const { return m_x; }
7322 private:
7323     typename tuple_type<A21>::const_reference m_x;
7324 };
7325 
7326 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7327 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 22> : tuple_type<A22> {
7328     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a22) {}
7329     typename tuple_type<A22>::const_reference get() const { return m_x; }
7330 private:
7331     typename tuple_type<A22>::const_reference m_x;
7332 };
7333 
7334 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7335 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, 23> : tuple_type<A23> {
7336     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& x) : m_x(x.a23) {}
7337     typename tuple_type<A23>::const_reference get() const { return m_x; }
7338 private:
7339     typename tuple_type<A23>::const_reference m_x;
7340 };
7341 
7342 
7343 
7344 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7345 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 0> : tuple_type<A0> {
7346     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a0) {}
7347     typename tuple_type<A0>::const_reference get() const { return m_x; }
7348 private:
7349     typename tuple_type<A0>::const_reference m_x;
7350 };
7351 
7352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7353 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 1> : tuple_type<A1> {
7354     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a1) {}
7355     typename tuple_type<A1>::const_reference get() const { return m_x; }
7356 private:
7357     typename tuple_type<A1>::const_reference m_x;
7358 };
7359 
7360 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7361 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 2> : tuple_type<A2> {
7362     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a2) {}
7363     typename tuple_type<A2>::const_reference get() const { return m_x; }
7364 private:
7365     typename tuple_type<A2>::const_reference m_x;
7366 };
7367 
7368 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7369 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 3> : tuple_type<A3> {
7370     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a3) {}
7371     typename tuple_type<A3>::const_reference get() const { return m_x; }
7372 private:
7373     typename tuple_type<A3>::const_reference m_x;
7374 };
7375 
7376 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7377 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 4> : tuple_type<A4> {
7378     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a4) {}
7379     typename tuple_type<A4>::const_reference get() const { return m_x; }
7380 private:
7381     typename tuple_type<A4>::const_reference m_x;
7382 };
7383 
7384 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7385 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 5> : tuple_type<A5> {
7386     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a5) {}
7387     typename tuple_type<A5>::const_reference get() const { return m_x; }
7388 private:
7389     typename tuple_type<A5>::const_reference m_x;
7390 };
7391 
7392 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7393 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 6> : tuple_type<A6> {
7394     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a6) {}
7395     typename tuple_type<A6>::const_reference get() const { return m_x; }
7396 private:
7397     typename tuple_type<A6>::const_reference m_x;
7398 };
7399 
7400 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7401 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 7> : tuple_type<A7> {
7402     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a7) {}
7403     typename tuple_type<A7>::const_reference get() const { return m_x; }
7404 private:
7405     typename tuple_type<A7>::const_reference m_x;
7406 };
7407 
7408 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7409 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 8> : tuple_type<A8> {
7410     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a8) {}
7411     typename tuple_type<A8>::const_reference get() const { return m_x; }
7412 private:
7413     typename tuple_type<A8>::const_reference m_x;
7414 };
7415 
7416 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7417 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 9> : tuple_type<A9> {
7418     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a9) {}
7419     typename tuple_type<A9>::const_reference get() const { return m_x; }
7420 private:
7421     typename tuple_type<A9>::const_reference m_x;
7422 };
7423 
7424 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7425 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 10> : tuple_type<A10> {
7426     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a10) {}
7427     typename tuple_type<A10>::const_reference get() const { return m_x; }
7428 private:
7429     typename tuple_type<A10>::const_reference m_x;
7430 };
7431 
7432 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7433 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 11> : tuple_type<A11> {
7434     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a11) {}
7435     typename tuple_type<A11>::const_reference get() const { return m_x; }
7436 private:
7437     typename tuple_type<A11>::const_reference m_x;
7438 };
7439 
7440 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7441 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 12> : tuple_type<A12> {
7442     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a12) {}
7443     typename tuple_type<A12>::const_reference get() const { return m_x; }
7444 private:
7445     typename tuple_type<A12>::const_reference m_x;
7446 };
7447 
7448 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7449 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 13> : tuple_type<A13> {
7450     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a13) {}
7451     typename tuple_type<A13>::const_reference get() const { return m_x; }
7452 private:
7453     typename tuple_type<A13>::const_reference m_x;
7454 };
7455 
7456 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7457 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 14> : tuple_type<A14> {
7458     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a14) {}
7459     typename tuple_type<A14>::const_reference get() const { return m_x; }
7460 private:
7461     typename tuple_type<A14>::const_reference m_x;
7462 };
7463 
7464 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7465 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 15> : tuple_type<A15> {
7466     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a15) {}
7467     typename tuple_type<A15>::const_reference get() const { return m_x; }
7468 private:
7469     typename tuple_type<A15>::const_reference m_x;
7470 };
7471 
7472 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7473 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 16> : tuple_type<A16> {
7474     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a16) {}
7475     typename tuple_type<A16>::const_reference get() const { return m_x; }
7476 private:
7477     typename tuple_type<A16>::const_reference m_x;
7478 };
7479 
7480 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7481 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 17> : tuple_type<A17> {
7482     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a17) {}
7483     typename tuple_type<A17>::const_reference get() const { return m_x; }
7484 private:
7485     typename tuple_type<A17>::const_reference m_x;
7486 };
7487 
7488 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7489 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 18> : tuple_type<A18> {
7490     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a18) {}
7491     typename tuple_type<A18>::const_reference get() const { return m_x; }
7492 private:
7493     typename tuple_type<A18>::const_reference m_x;
7494 };
7495 
7496 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7497 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 19> : tuple_type<A19> {
7498     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a19) {}
7499     typename tuple_type<A19>::const_reference get() const { return m_x; }
7500 private:
7501     typename tuple_type<A19>::const_reference m_x;
7502 };
7503 
7504 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7505 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 20> : tuple_type<A20> {
7506     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a20) {}
7507     typename tuple_type<A20>::const_reference get() const { return m_x; }
7508 private:
7509     typename tuple_type<A20>::const_reference m_x;
7510 };
7511 
7512 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7513 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 21> : tuple_type<A21> {
7514     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a21) {}
7515     typename tuple_type<A21>::const_reference get() const { return m_x; }
7516 private:
7517     typename tuple_type<A21>::const_reference m_x;
7518 };
7519 
7520 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7521 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 22> : tuple_type<A22> {
7522     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a22) {}
7523     typename tuple_type<A22>::const_reference get() const { return m_x; }
7524 private:
7525     typename tuple_type<A22>::const_reference m_x;
7526 };
7527 
7528 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7529 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 23> : tuple_type<A23> {
7530     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a23) {}
7531     typename tuple_type<A23>::const_reference get() const { return m_x; }
7532 private:
7533     typename tuple_type<A23>::const_reference m_x;
7534 };
7535 
7536 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7537 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, 24> : tuple_type<A24> {
7538     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& x) : m_x(x.a24) {}
7539     typename tuple_type<A24>::const_reference get() const { return m_x; }
7540 private:
7541     typename tuple_type<A24>::const_reference m_x;
7542 };
7543 
7544 
7545 
7546 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7547 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 0> : tuple_type<A0> {
7548     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a0) {}
7549     typename tuple_type<A0>::const_reference get() const { return m_x; }
7550 private:
7551     typename tuple_type<A0>::const_reference m_x;
7552 };
7553 
7554 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7555 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 1> : tuple_type<A1> {
7556     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a1) {}
7557     typename tuple_type<A1>::const_reference get() const { return m_x; }
7558 private:
7559     typename tuple_type<A1>::const_reference m_x;
7560 };
7561 
7562 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7563 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 2> : tuple_type<A2> {
7564     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a2) {}
7565     typename tuple_type<A2>::const_reference get() const { return m_x; }
7566 private:
7567     typename tuple_type<A2>::const_reference m_x;
7568 };
7569 
7570 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7571 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 3> : tuple_type<A3> {
7572     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a3) {}
7573     typename tuple_type<A3>::const_reference get() const { return m_x; }
7574 private:
7575     typename tuple_type<A3>::const_reference m_x;
7576 };
7577 
7578 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7579 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 4> : tuple_type<A4> {
7580     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a4) {}
7581     typename tuple_type<A4>::const_reference get() const { return m_x; }
7582 private:
7583     typename tuple_type<A4>::const_reference m_x;
7584 };
7585 
7586 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7587 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 5> : tuple_type<A5> {
7588     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a5) {}
7589     typename tuple_type<A5>::const_reference get() const { return m_x; }
7590 private:
7591     typename tuple_type<A5>::const_reference m_x;
7592 };
7593 
7594 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7595 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 6> : tuple_type<A6> {
7596     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a6) {}
7597     typename tuple_type<A6>::const_reference get() const { return m_x; }
7598 private:
7599     typename tuple_type<A6>::const_reference m_x;
7600 };
7601 
7602 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7603 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 7> : tuple_type<A7> {
7604     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a7) {}
7605     typename tuple_type<A7>::const_reference get() const { return m_x; }
7606 private:
7607     typename tuple_type<A7>::const_reference m_x;
7608 };
7609 
7610 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7611 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 8> : tuple_type<A8> {
7612     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a8) {}
7613     typename tuple_type<A8>::const_reference get() const { return m_x; }
7614 private:
7615     typename tuple_type<A8>::const_reference m_x;
7616 };
7617 
7618 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7619 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 9> : tuple_type<A9> {
7620     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a9) {}
7621     typename tuple_type<A9>::const_reference get() const { return m_x; }
7622 private:
7623     typename tuple_type<A9>::const_reference m_x;
7624 };
7625 
7626 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7627 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 10> : tuple_type<A10> {
7628     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a10) {}
7629     typename tuple_type<A10>::const_reference get() const { return m_x; }
7630 private:
7631     typename tuple_type<A10>::const_reference m_x;
7632 };
7633 
7634 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7635 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 11> : tuple_type<A11> {
7636     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a11) {}
7637     typename tuple_type<A11>::const_reference get() const { return m_x; }
7638 private:
7639     typename tuple_type<A11>::const_reference m_x;
7640 };
7641 
7642 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7643 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 12> : tuple_type<A12> {
7644     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a12) {}
7645     typename tuple_type<A12>::const_reference get() const { return m_x; }
7646 private:
7647     typename tuple_type<A12>::const_reference m_x;
7648 };
7649 
7650 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7651 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 13> : tuple_type<A13> {
7652     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a13) {}
7653     typename tuple_type<A13>::const_reference get() const { return m_x; }
7654 private:
7655     typename tuple_type<A13>::const_reference m_x;
7656 };
7657 
7658 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7659 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 14> : tuple_type<A14> {
7660     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a14) {}
7661     typename tuple_type<A14>::const_reference get() const { return m_x; }
7662 private:
7663     typename tuple_type<A14>::const_reference m_x;
7664 };
7665 
7666 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7667 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 15> : tuple_type<A15> {
7668     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a15) {}
7669     typename tuple_type<A15>::const_reference get() const { return m_x; }
7670 private:
7671     typename tuple_type<A15>::const_reference m_x;
7672 };
7673 
7674 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7675 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 16> : tuple_type<A16> {
7676     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a16) {}
7677     typename tuple_type<A16>::const_reference get() const { return m_x; }
7678 private:
7679     typename tuple_type<A16>::const_reference m_x;
7680 };
7681 
7682 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7683 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 17> : tuple_type<A17> {
7684     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a17) {}
7685     typename tuple_type<A17>::const_reference get() const { return m_x; }
7686 private:
7687     typename tuple_type<A17>::const_reference m_x;
7688 };
7689 
7690 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7691 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 18> : tuple_type<A18> {
7692     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a18) {}
7693     typename tuple_type<A18>::const_reference get() const { return m_x; }
7694 private:
7695     typename tuple_type<A18>::const_reference m_x;
7696 };
7697 
7698 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7699 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 19> : tuple_type<A19> {
7700     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a19) {}
7701     typename tuple_type<A19>::const_reference get() const { return m_x; }
7702 private:
7703     typename tuple_type<A19>::const_reference m_x;
7704 };
7705 
7706 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7707 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 20> : tuple_type<A20> {
7708     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a20) {}
7709     typename tuple_type<A20>::const_reference get() const { return m_x; }
7710 private:
7711     typename tuple_type<A20>::const_reference m_x;
7712 };
7713 
7714 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7715 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 21> : tuple_type<A21> {
7716     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a21) {}
7717     typename tuple_type<A21>::const_reference get() const { return m_x; }
7718 private:
7719     typename tuple_type<A21>::const_reference m_x;
7720 };
7721 
7722 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7723 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 22> : tuple_type<A22> {
7724     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a22) {}
7725     typename tuple_type<A22>::const_reference get() const { return m_x; }
7726 private:
7727     typename tuple_type<A22>::const_reference m_x;
7728 };
7729 
7730 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7731 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 23> : tuple_type<A23> {
7732     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a23) {}
7733     typename tuple_type<A23>::const_reference get() const { return m_x; }
7734 private:
7735     typename tuple_type<A23>::const_reference m_x;
7736 };
7737 
7738 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7739 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 24> : tuple_type<A24> {
7740     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a24) {}
7741     typename tuple_type<A24>::const_reference get() const { return m_x; }
7742 private:
7743     typename tuple_type<A24>::const_reference m_x;
7744 };
7745 
7746 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7747 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, 25> : tuple_type<A25> {
7748     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& x) : m_x(x.a25) {}
7749     typename tuple_type<A25>::const_reference get() const { return m_x; }
7750 private:
7751     typename tuple_type<A25>::const_reference m_x;
7752 };
7753 
7754 
7755 
7756 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7757 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 0> : tuple_type<A0> {
7758     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a0) {}
7759     typename tuple_type<A0>::const_reference get() const { return m_x; }
7760 private:
7761     typename tuple_type<A0>::const_reference m_x;
7762 };
7763 
7764 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7765 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 1> : tuple_type<A1> {
7766     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a1) {}
7767     typename tuple_type<A1>::const_reference get() const { return m_x; }
7768 private:
7769     typename tuple_type<A1>::const_reference m_x;
7770 };
7771 
7772 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7773 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 2> : tuple_type<A2> {
7774     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a2) {}
7775     typename tuple_type<A2>::const_reference get() const { return m_x; }
7776 private:
7777     typename tuple_type<A2>::const_reference m_x;
7778 };
7779 
7780 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7781 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 3> : tuple_type<A3> {
7782     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a3) {}
7783     typename tuple_type<A3>::const_reference get() const { return m_x; }
7784 private:
7785     typename tuple_type<A3>::const_reference m_x;
7786 };
7787 
7788 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7789 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 4> : tuple_type<A4> {
7790     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a4) {}
7791     typename tuple_type<A4>::const_reference get() const { return m_x; }
7792 private:
7793     typename tuple_type<A4>::const_reference m_x;
7794 };
7795 
7796 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7797 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 5> : tuple_type<A5> {
7798     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a5) {}
7799     typename tuple_type<A5>::const_reference get() const { return m_x; }
7800 private:
7801     typename tuple_type<A5>::const_reference m_x;
7802 };
7803 
7804 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7805 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 6> : tuple_type<A6> {
7806     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a6) {}
7807     typename tuple_type<A6>::const_reference get() const { return m_x; }
7808 private:
7809     typename tuple_type<A6>::const_reference m_x;
7810 };
7811 
7812 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7813 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 7> : tuple_type<A7> {
7814     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a7) {}
7815     typename tuple_type<A7>::const_reference get() const { return m_x; }
7816 private:
7817     typename tuple_type<A7>::const_reference m_x;
7818 };
7819 
7820 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7821 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 8> : tuple_type<A8> {
7822     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a8) {}
7823     typename tuple_type<A8>::const_reference get() const { return m_x; }
7824 private:
7825     typename tuple_type<A8>::const_reference m_x;
7826 };
7827 
7828 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7829 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 9> : tuple_type<A9> {
7830     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a9) {}
7831     typename tuple_type<A9>::const_reference get() const { return m_x; }
7832 private:
7833     typename tuple_type<A9>::const_reference m_x;
7834 };
7835 
7836 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7837 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 10> : tuple_type<A10> {
7838     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a10) {}
7839     typename tuple_type<A10>::const_reference get() const { return m_x; }
7840 private:
7841     typename tuple_type<A10>::const_reference m_x;
7842 };
7843 
7844 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7845 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 11> : tuple_type<A11> {
7846     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a11) {}
7847     typename tuple_type<A11>::const_reference get() const { return m_x; }
7848 private:
7849     typename tuple_type<A11>::const_reference m_x;
7850 };
7851 
7852 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7853 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 12> : tuple_type<A12> {
7854     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a12) {}
7855     typename tuple_type<A12>::const_reference get() const { return m_x; }
7856 private:
7857     typename tuple_type<A12>::const_reference m_x;
7858 };
7859 
7860 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7861 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 13> : tuple_type<A13> {
7862     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a13) {}
7863     typename tuple_type<A13>::const_reference get() const { return m_x; }
7864 private:
7865     typename tuple_type<A13>::const_reference m_x;
7866 };
7867 
7868 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7869 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 14> : tuple_type<A14> {
7870     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a14) {}
7871     typename tuple_type<A14>::const_reference get() const { return m_x; }
7872 private:
7873     typename tuple_type<A14>::const_reference m_x;
7874 };
7875 
7876 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7877 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 15> : tuple_type<A15> {
7878     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a15) {}
7879     typename tuple_type<A15>::const_reference get() const { return m_x; }
7880 private:
7881     typename tuple_type<A15>::const_reference m_x;
7882 };
7883 
7884 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7885 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 16> : tuple_type<A16> {
7886     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a16) {}
7887     typename tuple_type<A16>::const_reference get() const { return m_x; }
7888 private:
7889     typename tuple_type<A16>::const_reference m_x;
7890 };
7891 
7892 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7893 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 17> : tuple_type<A17> {
7894     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a17) {}
7895     typename tuple_type<A17>::const_reference get() const { return m_x; }
7896 private:
7897     typename tuple_type<A17>::const_reference m_x;
7898 };
7899 
7900 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7901 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 18> : tuple_type<A18> {
7902     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a18) {}
7903     typename tuple_type<A18>::const_reference get() const { return m_x; }
7904 private:
7905     typename tuple_type<A18>::const_reference m_x;
7906 };
7907 
7908 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7909 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 19> : tuple_type<A19> {
7910     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a19) {}
7911     typename tuple_type<A19>::const_reference get() const { return m_x; }
7912 private:
7913     typename tuple_type<A19>::const_reference m_x;
7914 };
7915 
7916 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7917 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 20> : tuple_type<A20> {
7918     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a20) {}
7919     typename tuple_type<A20>::const_reference get() const { return m_x; }
7920 private:
7921     typename tuple_type<A20>::const_reference m_x;
7922 };
7923 
7924 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7925 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 21> : tuple_type<A21> {
7926     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a21) {}
7927     typename tuple_type<A21>::const_reference get() const { return m_x; }
7928 private:
7929     typename tuple_type<A21>::const_reference m_x;
7930 };
7931 
7932 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7933 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 22> : tuple_type<A22> {
7934     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a22) {}
7935     typename tuple_type<A22>::const_reference get() const { return m_x; }
7936 private:
7937     typename tuple_type<A22>::const_reference m_x;
7938 };
7939 
7940 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7941 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 23> : tuple_type<A23> {
7942     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a23) {}
7943     typename tuple_type<A23>::const_reference get() const { return m_x; }
7944 private:
7945     typename tuple_type<A23>::const_reference m_x;
7946 };
7947 
7948 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7949 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 24> : tuple_type<A24> {
7950     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a24) {}
7951     typename tuple_type<A24>::const_reference get() const { return m_x; }
7952 private:
7953     typename tuple_type<A24>::const_reference m_x;
7954 };
7955 
7956 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7957 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 25> : tuple_type<A25> {
7958     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a25) {}
7959     typename tuple_type<A25>::const_reference get() const { return m_x; }
7960 private:
7961     typename tuple_type<A25>::const_reference m_x;
7962 };
7963 
7964 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7965 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, 26> : tuple_type<A26> {
7966     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& x) : m_x(x.a26) {}
7967     typename tuple_type<A26>::const_reference get() const { return m_x; }
7968 private:
7969     typename tuple_type<A26>::const_reference m_x;
7970 };
7971 
7972 
7973 
7974 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7975 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 0> : tuple_type<A0> {
7976     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a0) {}
7977     typename tuple_type<A0>::const_reference get() const { return m_x; }
7978 private:
7979     typename tuple_type<A0>::const_reference m_x;
7980 };
7981 
7982 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7983 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 1> : tuple_type<A1> {
7984     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a1) {}
7985     typename tuple_type<A1>::const_reference get() const { return m_x; }
7986 private:
7987     typename tuple_type<A1>::const_reference m_x;
7988 };
7989 
7990 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7991 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 2> : tuple_type<A2> {
7992     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a2) {}
7993     typename tuple_type<A2>::const_reference get() const { return m_x; }
7994 private:
7995     typename tuple_type<A2>::const_reference m_x;
7996 };
7997 
7998 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7999 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 3> : tuple_type<A3> {
8000     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a3) {}
8001     typename tuple_type<A3>::const_reference get() const { return m_x; }
8002 private:
8003     typename tuple_type<A3>::const_reference m_x;
8004 };
8005 
8006 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8007 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 4> : tuple_type<A4> {
8008     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a4) {}
8009     typename tuple_type<A4>::const_reference get() const { return m_x; }
8010 private:
8011     typename tuple_type<A4>::const_reference m_x;
8012 };
8013 
8014 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8015 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 5> : tuple_type<A5> {
8016     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a5) {}
8017     typename tuple_type<A5>::const_reference get() const { return m_x; }
8018 private:
8019     typename tuple_type<A5>::const_reference m_x;
8020 };
8021 
8022 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8023 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 6> : tuple_type<A6> {
8024     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a6) {}
8025     typename tuple_type<A6>::const_reference get() const { return m_x; }
8026 private:
8027     typename tuple_type<A6>::const_reference m_x;
8028 };
8029 
8030 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8031 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 7> : tuple_type<A7> {
8032     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a7) {}
8033     typename tuple_type<A7>::const_reference get() const { return m_x; }
8034 private:
8035     typename tuple_type<A7>::const_reference m_x;
8036 };
8037 
8038 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8039 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 8> : tuple_type<A8> {
8040     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a8) {}
8041     typename tuple_type<A8>::const_reference get() const { return m_x; }
8042 private:
8043     typename tuple_type<A8>::const_reference m_x;
8044 };
8045 
8046 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8047 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 9> : tuple_type<A9> {
8048     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a9) {}
8049     typename tuple_type<A9>::const_reference get() const { return m_x; }
8050 private:
8051     typename tuple_type<A9>::const_reference m_x;
8052 };
8053 
8054 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8055 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 10> : tuple_type<A10> {
8056     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a10) {}
8057     typename tuple_type<A10>::const_reference get() const { return m_x; }
8058 private:
8059     typename tuple_type<A10>::const_reference m_x;
8060 };
8061 
8062 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8063 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 11> : tuple_type<A11> {
8064     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a11) {}
8065     typename tuple_type<A11>::const_reference get() const { return m_x; }
8066 private:
8067     typename tuple_type<A11>::const_reference m_x;
8068 };
8069 
8070 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8071 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 12> : tuple_type<A12> {
8072     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a12) {}
8073     typename tuple_type<A12>::const_reference get() const { return m_x; }
8074 private:
8075     typename tuple_type<A12>::const_reference m_x;
8076 };
8077 
8078 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8079 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 13> : tuple_type<A13> {
8080     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a13) {}
8081     typename tuple_type<A13>::const_reference get() const { return m_x; }
8082 private:
8083     typename tuple_type<A13>::const_reference m_x;
8084 };
8085 
8086 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8087 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 14> : tuple_type<A14> {
8088     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a14) {}
8089     typename tuple_type<A14>::const_reference get() const { return m_x; }
8090 private:
8091     typename tuple_type<A14>::const_reference m_x;
8092 };
8093 
8094 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8095 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 15> : tuple_type<A15> {
8096     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a15) {}
8097     typename tuple_type<A15>::const_reference get() const { return m_x; }
8098 private:
8099     typename tuple_type<A15>::const_reference m_x;
8100 };
8101 
8102 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8103 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 16> : tuple_type<A16> {
8104     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a16) {}
8105     typename tuple_type<A16>::const_reference get() const { return m_x; }
8106 private:
8107     typename tuple_type<A16>::const_reference m_x;
8108 };
8109 
8110 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8111 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 17> : tuple_type<A17> {
8112     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a17) {}
8113     typename tuple_type<A17>::const_reference get() const { return m_x; }
8114 private:
8115     typename tuple_type<A17>::const_reference m_x;
8116 };
8117 
8118 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8119 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 18> : tuple_type<A18> {
8120     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a18) {}
8121     typename tuple_type<A18>::const_reference get() const { return m_x; }
8122 private:
8123     typename tuple_type<A18>::const_reference m_x;
8124 };
8125 
8126 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8127 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 19> : tuple_type<A19> {
8128     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a19) {}
8129     typename tuple_type<A19>::const_reference get() const { return m_x; }
8130 private:
8131     typename tuple_type<A19>::const_reference m_x;
8132 };
8133 
8134 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8135 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 20> : tuple_type<A20> {
8136     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a20) {}
8137     typename tuple_type<A20>::const_reference get() const { return m_x; }
8138 private:
8139     typename tuple_type<A20>::const_reference m_x;
8140 };
8141 
8142 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8143 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 21> : tuple_type<A21> {
8144     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a21) {}
8145     typename tuple_type<A21>::const_reference get() const { return m_x; }
8146 private:
8147     typename tuple_type<A21>::const_reference m_x;
8148 };
8149 
8150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8151 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 22> : tuple_type<A22> {
8152     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a22) {}
8153     typename tuple_type<A22>::const_reference get() const { return m_x; }
8154 private:
8155     typename tuple_type<A22>::const_reference m_x;
8156 };
8157 
8158 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8159 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 23> : tuple_type<A23> {
8160     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a23) {}
8161     typename tuple_type<A23>::const_reference get() const { return m_x; }
8162 private:
8163     typename tuple_type<A23>::const_reference m_x;
8164 };
8165 
8166 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8167 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 24> : tuple_type<A24> {
8168     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a24) {}
8169     typename tuple_type<A24>::const_reference get() const { return m_x; }
8170 private:
8171     typename tuple_type<A24>::const_reference m_x;
8172 };
8173 
8174 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8175 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 25> : tuple_type<A25> {
8176     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a25) {}
8177     typename tuple_type<A25>::const_reference get() const { return m_x; }
8178 private:
8179     typename tuple_type<A25>::const_reference m_x;
8180 };
8181 
8182 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8183 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 26> : tuple_type<A26> {
8184     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a26) {}
8185     typename tuple_type<A26>::const_reference get() const { return m_x; }
8186 private:
8187     typename tuple_type<A26>::const_reference m_x;
8188 };
8189 
8190 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8191 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, 27> : tuple_type<A27> {
8192     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& x) : m_x(x.a27) {}
8193     typename tuple_type<A27>::const_reference get() const { return m_x; }
8194 private:
8195     typename tuple_type<A27>::const_reference m_x;
8196 };
8197 
8198 
8199 
8200 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8201 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 0> : tuple_type<A0> {
8202     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a0) {}
8203     typename tuple_type<A0>::const_reference get() const { return m_x; }
8204 private:
8205     typename tuple_type<A0>::const_reference m_x;
8206 };
8207 
8208 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8209 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 1> : tuple_type<A1> {
8210     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a1) {}
8211     typename tuple_type<A1>::const_reference get() const { return m_x; }
8212 private:
8213     typename tuple_type<A1>::const_reference m_x;
8214 };
8215 
8216 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8217 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 2> : tuple_type<A2> {
8218     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a2) {}
8219     typename tuple_type<A2>::const_reference get() const { return m_x; }
8220 private:
8221     typename tuple_type<A2>::const_reference m_x;
8222 };
8223 
8224 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8225 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 3> : tuple_type<A3> {
8226     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a3) {}
8227     typename tuple_type<A3>::const_reference get() const { return m_x; }
8228 private:
8229     typename tuple_type<A3>::const_reference m_x;
8230 };
8231 
8232 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8233 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 4> : tuple_type<A4> {
8234     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a4) {}
8235     typename tuple_type<A4>::const_reference get() const { return m_x; }
8236 private:
8237     typename tuple_type<A4>::const_reference m_x;
8238 };
8239 
8240 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8241 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 5> : tuple_type<A5> {
8242     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a5) {}
8243     typename tuple_type<A5>::const_reference get() const { return m_x; }
8244 private:
8245     typename tuple_type<A5>::const_reference m_x;
8246 };
8247 
8248 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8249 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 6> : tuple_type<A6> {
8250     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a6) {}
8251     typename tuple_type<A6>::const_reference get() const { return m_x; }
8252 private:
8253     typename tuple_type<A6>::const_reference m_x;
8254 };
8255 
8256 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8257 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 7> : tuple_type<A7> {
8258     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a7) {}
8259     typename tuple_type<A7>::const_reference get() const { return m_x; }
8260 private:
8261     typename tuple_type<A7>::const_reference m_x;
8262 };
8263 
8264 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8265 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 8> : tuple_type<A8> {
8266     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a8) {}
8267     typename tuple_type<A8>::const_reference get() const { return m_x; }
8268 private:
8269     typename tuple_type<A8>::const_reference m_x;
8270 };
8271 
8272 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8273 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 9> : tuple_type<A9> {
8274     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a9) {}
8275     typename tuple_type<A9>::const_reference get() const { return m_x; }
8276 private:
8277     typename tuple_type<A9>::const_reference m_x;
8278 };
8279 
8280 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8281 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 10> : tuple_type<A10> {
8282     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a10) {}
8283     typename tuple_type<A10>::const_reference get() const { return m_x; }
8284 private:
8285     typename tuple_type<A10>::const_reference m_x;
8286 };
8287 
8288 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8289 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 11> : tuple_type<A11> {
8290     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a11) {}
8291     typename tuple_type<A11>::const_reference get() const { return m_x; }
8292 private:
8293     typename tuple_type<A11>::const_reference m_x;
8294 };
8295 
8296 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8297 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 12> : tuple_type<A12> {
8298     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a12) {}
8299     typename tuple_type<A12>::const_reference get() const { return m_x; }
8300 private:
8301     typename tuple_type<A12>::const_reference m_x;
8302 };
8303 
8304 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8305 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 13> : tuple_type<A13> {
8306     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a13) {}
8307     typename tuple_type<A13>::const_reference get() const { return m_x; }
8308 private:
8309     typename tuple_type<A13>::const_reference m_x;
8310 };
8311 
8312 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8313 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 14> : tuple_type<A14> {
8314     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a14) {}
8315     typename tuple_type<A14>::const_reference get() const { return m_x; }
8316 private:
8317     typename tuple_type<A14>::const_reference m_x;
8318 };
8319 
8320 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8321 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 15> : tuple_type<A15> {
8322     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a15) {}
8323     typename tuple_type<A15>::const_reference get() const { return m_x; }
8324 private:
8325     typename tuple_type<A15>::const_reference m_x;
8326 };
8327 
8328 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8329 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 16> : tuple_type<A16> {
8330     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a16) {}
8331     typename tuple_type<A16>::const_reference get() const { return m_x; }
8332 private:
8333     typename tuple_type<A16>::const_reference m_x;
8334 };
8335 
8336 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8337 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 17> : tuple_type<A17> {
8338     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a17) {}
8339     typename tuple_type<A17>::const_reference get() const { return m_x; }
8340 private:
8341     typename tuple_type<A17>::const_reference m_x;
8342 };
8343 
8344 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8345 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 18> : tuple_type<A18> {
8346     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a18) {}
8347     typename tuple_type<A18>::const_reference get() const { return m_x; }
8348 private:
8349     typename tuple_type<A18>::const_reference m_x;
8350 };
8351 
8352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8353 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 19> : tuple_type<A19> {
8354     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a19) {}
8355     typename tuple_type<A19>::const_reference get() const { return m_x; }
8356 private:
8357     typename tuple_type<A19>::const_reference m_x;
8358 };
8359 
8360 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8361 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 20> : tuple_type<A20> {
8362     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a20) {}
8363     typename tuple_type<A20>::const_reference get() const { return m_x; }
8364 private:
8365     typename tuple_type<A20>::const_reference m_x;
8366 };
8367 
8368 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8369 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 21> : tuple_type<A21> {
8370     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a21) {}
8371     typename tuple_type<A21>::const_reference get() const { return m_x; }
8372 private:
8373     typename tuple_type<A21>::const_reference m_x;
8374 };
8375 
8376 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8377 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 22> : tuple_type<A22> {
8378     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a22) {}
8379     typename tuple_type<A22>::const_reference get() const { return m_x; }
8380 private:
8381     typename tuple_type<A22>::const_reference m_x;
8382 };
8383 
8384 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8385 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 23> : tuple_type<A23> {
8386     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a23) {}
8387     typename tuple_type<A23>::const_reference get() const { return m_x; }
8388 private:
8389     typename tuple_type<A23>::const_reference m_x;
8390 };
8391 
8392 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8393 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 24> : tuple_type<A24> {
8394     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a24) {}
8395     typename tuple_type<A24>::const_reference get() const { return m_x; }
8396 private:
8397     typename tuple_type<A24>::const_reference m_x;
8398 };
8399 
8400 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8401 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 25> : tuple_type<A25> {
8402     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a25) {}
8403     typename tuple_type<A25>::const_reference get() const { return m_x; }
8404 private:
8405     typename tuple_type<A25>::const_reference m_x;
8406 };
8407 
8408 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8409 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 26> : tuple_type<A26> {
8410     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a26) {}
8411     typename tuple_type<A26>::const_reference get() const { return m_x; }
8412 private:
8413     typename tuple_type<A26>::const_reference m_x;
8414 };
8415 
8416 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8417 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 27> : tuple_type<A27> {
8418     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a27) {}
8419     typename tuple_type<A27>::const_reference get() const { return m_x; }
8420 private:
8421     typename tuple_type<A27>::const_reference m_x;
8422 };
8423 
8424 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8425 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, 28> : tuple_type<A28> {
8426     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& x) : m_x(x.a28) {}
8427     typename tuple_type<A28>::const_reference get() const { return m_x; }
8428 private:
8429     typename tuple_type<A28>::const_reference m_x;
8430 };
8431 
8432 
8433 
8434 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8435 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 0> : tuple_type<A0> {
8436     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a0) {}
8437     typename tuple_type<A0>::const_reference get() const { return m_x; }
8438 private:
8439     typename tuple_type<A0>::const_reference m_x;
8440 };
8441 
8442 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8443 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 1> : tuple_type<A1> {
8444     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a1) {}
8445     typename tuple_type<A1>::const_reference get() const { return m_x; }
8446 private:
8447     typename tuple_type<A1>::const_reference m_x;
8448 };
8449 
8450 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8451 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 2> : tuple_type<A2> {
8452     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a2) {}
8453     typename tuple_type<A2>::const_reference get() const { return m_x; }
8454 private:
8455     typename tuple_type<A2>::const_reference m_x;
8456 };
8457 
8458 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8459 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 3> : tuple_type<A3> {
8460     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a3) {}
8461     typename tuple_type<A3>::const_reference get() const { return m_x; }
8462 private:
8463     typename tuple_type<A3>::const_reference m_x;
8464 };
8465 
8466 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8467 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 4> : tuple_type<A4> {
8468     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a4) {}
8469     typename tuple_type<A4>::const_reference get() const { return m_x; }
8470 private:
8471     typename tuple_type<A4>::const_reference m_x;
8472 };
8473 
8474 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8475 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 5> : tuple_type<A5> {
8476     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a5) {}
8477     typename tuple_type<A5>::const_reference get() const { return m_x; }
8478 private:
8479     typename tuple_type<A5>::const_reference m_x;
8480 };
8481 
8482 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8483 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 6> : tuple_type<A6> {
8484     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a6) {}
8485     typename tuple_type<A6>::const_reference get() const { return m_x; }
8486 private:
8487     typename tuple_type<A6>::const_reference m_x;
8488 };
8489 
8490 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8491 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 7> : tuple_type<A7> {
8492     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a7) {}
8493     typename tuple_type<A7>::const_reference get() const { return m_x; }
8494 private:
8495     typename tuple_type<A7>::const_reference m_x;
8496 };
8497 
8498 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8499 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 8> : tuple_type<A8> {
8500     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a8) {}
8501     typename tuple_type<A8>::const_reference get() const { return m_x; }
8502 private:
8503     typename tuple_type<A8>::const_reference m_x;
8504 };
8505 
8506 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8507 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 9> : tuple_type<A9> {
8508     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a9) {}
8509     typename tuple_type<A9>::const_reference get() const { return m_x; }
8510 private:
8511     typename tuple_type<A9>::const_reference m_x;
8512 };
8513 
8514 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8515 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 10> : tuple_type<A10> {
8516     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a10) {}
8517     typename tuple_type<A10>::const_reference get() const { return m_x; }
8518 private:
8519     typename tuple_type<A10>::const_reference m_x;
8520 };
8521 
8522 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8523 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 11> : tuple_type<A11> {
8524     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a11) {}
8525     typename tuple_type<A11>::const_reference get() const { return m_x; }
8526 private:
8527     typename tuple_type<A11>::const_reference m_x;
8528 };
8529 
8530 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8531 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 12> : tuple_type<A12> {
8532     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a12) {}
8533     typename tuple_type<A12>::const_reference get() const { return m_x; }
8534 private:
8535     typename tuple_type<A12>::const_reference m_x;
8536 };
8537 
8538 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8539 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 13> : tuple_type<A13> {
8540     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a13) {}
8541     typename tuple_type<A13>::const_reference get() const { return m_x; }
8542 private:
8543     typename tuple_type<A13>::const_reference m_x;
8544 };
8545 
8546 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8547 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 14> : tuple_type<A14> {
8548     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a14) {}
8549     typename tuple_type<A14>::const_reference get() const { return m_x; }
8550 private:
8551     typename tuple_type<A14>::const_reference m_x;
8552 };
8553 
8554 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8555 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 15> : tuple_type<A15> {
8556     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a15) {}
8557     typename tuple_type<A15>::const_reference get() const { return m_x; }
8558 private:
8559     typename tuple_type<A15>::const_reference m_x;
8560 };
8561 
8562 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8563 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 16> : tuple_type<A16> {
8564     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a16) {}
8565     typename tuple_type<A16>::const_reference get() const { return m_x; }
8566 private:
8567     typename tuple_type<A16>::const_reference m_x;
8568 };
8569 
8570 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8571 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 17> : tuple_type<A17> {
8572     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a17) {}
8573     typename tuple_type<A17>::const_reference get() const { return m_x; }
8574 private:
8575     typename tuple_type<A17>::const_reference m_x;
8576 };
8577 
8578 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8579 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 18> : tuple_type<A18> {
8580     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a18) {}
8581     typename tuple_type<A18>::const_reference get() const { return m_x; }
8582 private:
8583     typename tuple_type<A18>::const_reference m_x;
8584 };
8585 
8586 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8587 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 19> : tuple_type<A19> {
8588     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a19) {}
8589     typename tuple_type<A19>::const_reference get() const { return m_x; }
8590 private:
8591     typename tuple_type<A19>::const_reference m_x;
8592 };
8593 
8594 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8595 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 20> : tuple_type<A20> {
8596     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a20) {}
8597     typename tuple_type<A20>::const_reference get() const { return m_x; }
8598 private:
8599     typename tuple_type<A20>::const_reference m_x;
8600 };
8601 
8602 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8603 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 21> : tuple_type<A21> {
8604     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a21) {}
8605     typename tuple_type<A21>::const_reference get() const { return m_x; }
8606 private:
8607     typename tuple_type<A21>::const_reference m_x;
8608 };
8609 
8610 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8611 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 22> : tuple_type<A22> {
8612     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a22) {}
8613     typename tuple_type<A22>::const_reference get() const { return m_x; }
8614 private:
8615     typename tuple_type<A22>::const_reference m_x;
8616 };
8617 
8618 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8619 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 23> : tuple_type<A23> {
8620     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a23) {}
8621     typename tuple_type<A23>::const_reference get() const { return m_x; }
8622 private:
8623     typename tuple_type<A23>::const_reference m_x;
8624 };
8625 
8626 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8627 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 24> : tuple_type<A24> {
8628     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a24) {}
8629     typename tuple_type<A24>::const_reference get() const { return m_x; }
8630 private:
8631     typename tuple_type<A24>::const_reference m_x;
8632 };
8633 
8634 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8635 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 25> : tuple_type<A25> {
8636     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a25) {}
8637     typename tuple_type<A25>::const_reference get() const { return m_x; }
8638 private:
8639     typename tuple_type<A25>::const_reference m_x;
8640 };
8641 
8642 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8643 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 26> : tuple_type<A26> {
8644     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a26) {}
8645     typename tuple_type<A26>::const_reference get() const { return m_x; }
8646 private:
8647     typename tuple_type<A26>::const_reference m_x;
8648 };
8649 
8650 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8651 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 27> : tuple_type<A27> {
8652     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a27) {}
8653     typename tuple_type<A27>::const_reference get() const { return m_x; }
8654 private:
8655     typename tuple_type<A27>::const_reference m_x;
8656 };
8657 
8658 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8659 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 28> : tuple_type<A28> {
8660     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a28) {}
8661     typename tuple_type<A28>::const_reference get() const { return m_x; }
8662 private:
8663     typename tuple_type<A28>::const_reference m_x;
8664 };
8665 
8666 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
8667 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, 29> : tuple_type<A29> {
8668     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& x) : m_x(x.a29) {}
8669     typename tuple_type<A29>::const_reference get() const { return m_x; }
8670 private:
8671     typename tuple_type<A29>::const_reference m_x;
8672 };
8673 
8674 
8675 
8676 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8677 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 0> : tuple_type<A0> {
8678     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a0) {}
8679     typename tuple_type<A0>::const_reference get() const { return m_x; }
8680 private:
8681     typename tuple_type<A0>::const_reference m_x;
8682 };
8683 
8684 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8685 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 1> : tuple_type<A1> {
8686     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a1) {}
8687     typename tuple_type<A1>::const_reference get() const { return m_x; }
8688 private:
8689     typename tuple_type<A1>::const_reference m_x;
8690 };
8691 
8692 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8693 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 2> : tuple_type<A2> {
8694     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a2) {}
8695     typename tuple_type<A2>::const_reference get() const { return m_x; }
8696 private:
8697     typename tuple_type<A2>::const_reference m_x;
8698 };
8699 
8700 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8701 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 3> : tuple_type<A3> {
8702     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a3) {}
8703     typename tuple_type<A3>::const_reference get() const { return m_x; }
8704 private:
8705     typename tuple_type<A3>::const_reference m_x;
8706 };
8707 
8708 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8709 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 4> : tuple_type<A4> {
8710     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a4) {}
8711     typename tuple_type<A4>::const_reference get() const { return m_x; }
8712 private:
8713     typename tuple_type<A4>::const_reference m_x;
8714 };
8715 
8716 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8717 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 5> : tuple_type<A5> {
8718     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a5) {}
8719     typename tuple_type<A5>::const_reference get() const { return m_x; }
8720 private:
8721     typename tuple_type<A5>::const_reference m_x;
8722 };
8723 
8724 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8725 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 6> : tuple_type<A6> {
8726     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a6) {}
8727     typename tuple_type<A6>::const_reference get() const { return m_x; }
8728 private:
8729     typename tuple_type<A6>::const_reference m_x;
8730 };
8731 
8732 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8733 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 7> : tuple_type<A7> {
8734     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a7) {}
8735     typename tuple_type<A7>::const_reference get() const { return m_x; }
8736 private:
8737     typename tuple_type<A7>::const_reference m_x;
8738 };
8739 
8740 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8741 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 8> : tuple_type<A8> {
8742     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a8) {}
8743     typename tuple_type<A8>::const_reference get() const { return m_x; }
8744 private:
8745     typename tuple_type<A8>::const_reference m_x;
8746 };
8747 
8748 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8749 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 9> : tuple_type<A9> {
8750     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a9) {}
8751     typename tuple_type<A9>::const_reference get() const { return m_x; }
8752 private:
8753     typename tuple_type<A9>::const_reference m_x;
8754 };
8755 
8756 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8757 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 10> : tuple_type<A10> {
8758     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a10) {}
8759     typename tuple_type<A10>::const_reference get() const { return m_x; }
8760 private:
8761     typename tuple_type<A10>::const_reference m_x;
8762 };
8763 
8764 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8765 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 11> : tuple_type<A11> {
8766     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a11) {}
8767     typename tuple_type<A11>::const_reference get() const { return m_x; }
8768 private:
8769     typename tuple_type<A11>::const_reference m_x;
8770 };
8771 
8772 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8773 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 12> : tuple_type<A12> {
8774     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a12) {}
8775     typename tuple_type<A12>::const_reference get() const { return m_x; }
8776 private:
8777     typename tuple_type<A12>::const_reference m_x;
8778 };
8779 
8780 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8781 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 13> : tuple_type<A13> {
8782     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a13) {}
8783     typename tuple_type<A13>::const_reference get() const { return m_x; }
8784 private:
8785     typename tuple_type<A13>::const_reference m_x;
8786 };
8787 
8788 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8789 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 14> : tuple_type<A14> {
8790     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a14) {}
8791     typename tuple_type<A14>::const_reference get() const { return m_x; }
8792 private:
8793     typename tuple_type<A14>::const_reference m_x;
8794 };
8795 
8796 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8797 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 15> : tuple_type<A15> {
8798     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a15) {}
8799     typename tuple_type<A15>::const_reference get() const { return m_x; }
8800 private:
8801     typename tuple_type<A15>::const_reference m_x;
8802 };
8803 
8804 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8805 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 16> : tuple_type<A16> {
8806     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a16) {}
8807     typename tuple_type<A16>::const_reference get() const { return m_x; }
8808 private:
8809     typename tuple_type<A16>::const_reference m_x;
8810 };
8811 
8812 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8813 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 17> : tuple_type<A17> {
8814     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a17) {}
8815     typename tuple_type<A17>::const_reference get() const { return m_x; }
8816 private:
8817     typename tuple_type<A17>::const_reference m_x;
8818 };
8819 
8820 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8821 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 18> : tuple_type<A18> {
8822     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a18) {}
8823     typename tuple_type<A18>::const_reference get() const { return m_x; }
8824 private:
8825     typename tuple_type<A18>::const_reference m_x;
8826 };
8827 
8828 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8829 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 19> : tuple_type<A19> {
8830     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a19) {}
8831     typename tuple_type<A19>::const_reference get() const { return m_x; }
8832 private:
8833     typename tuple_type<A19>::const_reference m_x;
8834 };
8835 
8836 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8837 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 20> : tuple_type<A20> {
8838     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a20) {}
8839     typename tuple_type<A20>::const_reference get() const { return m_x; }
8840 private:
8841     typename tuple_type<A20>::const_reference m_x;
8842 };
8843 
8844 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8845 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 21> : tuple_type<A21> {
8846     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a21) {}
8847     typename tuple_type<A21>::const_reference get() const { return m_x; }
8848 private:
8849     typename tuple_type<A21>::const_reference m_x;
8850 };
8851 
8852 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8853 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 22> : tuple_type<A22> {
8854     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a22) {}
8855     typename tuple_type<A22>::const_reference get() const { return m_x; }
8856 private:
8857     typename tuple_type<A22>::const_reference m_x;
8858 };
8859 
8860 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8861 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 23> : tuple_type<A23> {
8862     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a23) {}
8863     typename tuple_type<A23>::const_reference get() const { return m_x; }
8864 private:
8865     typename tuple_type<A23>::const_reference m_x;
8866 };
8867 
8868 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8869 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 24> : tuple_type<A24> {
8870     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a24) {}
8871     typename tuple_type<A24>::const_reference get() const { return m_x; }
8872 private:
8873     typename tuple_type<A24>::const_reference m_x;
8874 };
8875 
8876 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8877 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 25> : tuple_type<A25> {
8878     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a25) {}
8879     typename tuple_type<A25>::const_reference get() const { return m_x; }
8880 private:
8881     typename tuple_type<A25>::const_reference m_x;
8882 };
8883 
8884 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8885 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 26> : tuple_type<A26> {
8886     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a26) {}
8887     typename tuple_type<A26>::const_reference get() const { return m_x; }
8888 private:
8889     typename tuple_type<A26>::const_reference m_x;
8890 };
8891 
8892 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8893 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 27> : tuple_type<A27> {
8894     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a27) {}
8895     typename tuple_type<A27>::const_reference get() const { return m_x; }
8896 private:
8897     typename tuple_type<A27>::const_reference m_x;
8898 };
8899 
8900 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8901 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 28> : tuple_type<A28> {
8902     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a28) {}
8903     typename tuple_type<A28>::const_reference get() const { return m_x; }
8904 private:
8905     typename tuple_type<A28>::const_reference m_x;
8906 };
8907 
8908 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8909 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 29> : tuple_type<A29> {
8910     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a29) {}
8911     typename tuple_type<A29>::const_reference get() const { return m_x; }
8912 private:
8913     typename tuple_type<A29>::const_reference m_x;
8914 };
8915 
8916 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
8917 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, 30> : tuple_type<A30> {
8918     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& x) : m_x(x.a30) {}
8919     typename tuple_type<A30>::const_reference get() const { return m_x; }
8920 private:
8921     typename tuple_type<A30>::const_reference m_x;
8922 };
8923 
8924 
8925 
8926 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8927 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 0> : tuple_type<A0> {
8928     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a0) {}
8929     typename tuple_type<A0>::const_reference get() const { return m_x; }
8930 private:
8931     typename tuple_type<A0>::const_reference m_x;
8932 };
8933 
8934 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8935 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 1> : tuple_type<A1> {
8936     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a1) {}
8937     typename tuple_type<A1>::const_reference get() const { return m_x; }
8938 private:
8939     typename tuple_type<A1>::const_reference m_x;
8940 };
8941 
8942 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8943 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 2> : tuple_type<A2> {
8944     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a2) {}
8945     typename tuple_type<A2>::const_reference get() const { return m_x; }
8946 private:
8947     typename tuple_type<A2>::const_reference m_x;
8948 };
8949 
8950 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8951 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 3> : tuple_type<A3> {
8952     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a3) {}
8953     typename tuple_type<A3>::const_reference get() const { return m_x; }
8954 private:
8955     typename tuple_type<A3>::const_reference m_x;
8956 };
8957 
8958 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8959 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 4> : tuple_type<A4> {
8960     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a4) {}
8961     typename tuple_type<A4>::const_reference get() const { return m_x; }
8962 private:
8963     typename tuple_type<A4>::const_reference m_x;
8964 };
8965 
8966 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8967 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 5> : tuple_type<A5> {
8968     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a5) {}
8969     typename tuple_type<A5>::const_reference get() const { return m_x; }
8970 private:
8971     typename tuple_type<A5>::const_reference m_x;
8972 };
8973 
8974 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8975 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 6> : tuple_type<A6> {
8976     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a6) {}
8977     typename tuple_type<A6>::const_reference get() const { return m_x; }
8978 private:
8979     typename tuple_type<A6>::const_reference m_x;
8980 };
8981 
8982 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8983 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 7> : tuple_type<A7> {
8984     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a7) {}
8985     typename tuple_type<A7>::const_reference get() const { return m_x; }
8986 private:
8987     typename tuple_type<A7>::const_reference m_x;
8988 };
8989 
8990 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8991 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 8> : tuple_type<A8> {
8992     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a8) {}
8993     typename tuple_type<A8>::const_reference get() const { return m_x; }
8994 private:
8995     typename tuple_type<A8>::const_reference m_x;
8996 };
8997 
8998 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
8999 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 9> : tuple_type<A9> {
9000     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a9) {}
9001     typename tuple_type<A9>::const_reference get() const { return m_x; }
9002 private:
9003     typename tuple_type<A9>::const_reference m_x;
9004 };
9005 
9006 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9007 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 10> : tuple_type<A10> {
9008     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a10) {}
9009     typename tuple_type<A10>::const_reference get() const { return m_x; }
9010 private:
9011     typename tuple_type<A10>::const_reference m_x;
9012 };
9013 
9014 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9015 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 11> : tuple_type<A11> {
9016     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a11) {}
9017     typename tuple_type<A11>::const_reference get() const { return m_x; }
9018 private:
9019     typename tuple_type<A11>::const_reference m_x;
9020 };
9021 
9022 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9023 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 12> : tuple_type<A12> {
9024     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a12) {}
9025     typename tuple_type<A12>::const_reference get() const { return m_x; }
9026 private:
9027     typename tuple_type<A12>::const_reference m_x;
9028 };
9029 
9030 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9031 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 13> : tuple_type<A13> {
9032     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a13) {}
9033     typename tuple_type<A13>::const_reference get() const { return m_x; }
9034 private:
9035     typename tuple_type<A13>::const_reference m_x;
9036 };
9037 
9038 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9039 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 14> : tuple_type<A14> {
9040     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a14) {}
9041     typename tuple_type<A14>::const_reference get() const { return m_x; }
9042 private:
9043     typename tuple_type<A14>::const_reference m_x;
9044 };
9045 
9046 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9047 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 15> : tuple_type<A15> {
9048     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a15) {}
9049     typename tuple_type<A15>::const_reference get() const { return m_x; }
9050 private:
9051     typename tuple_type<A15>::const_reference m_x;
9052 };
9053 
9054 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9055 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 16> : tuple_type<A16> {
9056     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a16) {}
9057     typename tuple_type<A16>::const_reference get() const { return m_x; }
9058 private:
9059     typename tuple_type<A16>::const_reference m_x;
9060 };
9061 
9062 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9063 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 17> : tuple_type<A17> {
9064     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a17) {}
9065     typename tuple_type<A17>::const_reference get() const { return m_x; }
9066 private:
9067     typename tuple_type<A17>::const_reference m_x;
9068 };
9069 
9070 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9071 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 18> : tuple_type<A18> {
9072     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a18) {}
9073     typename tuple_type<A18>::const_reference get() const { return m_x; }
9074 private:
9075     typename tuple_type<A18>::const_reference m_x;
9076 };
9077 
9078 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9079 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 19> : tuple_type<A19> {
9080     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a19) {}
9081     typename tuple_type<A19>::const_reference get() const { return m_x; }
9082 private:
9083     typename tuple_type<A19>::const_reference m_x;
9084 };
9085 
9086 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9087 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 20> : tuple_type<A20> {
9088     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a20) {}
9089     typename tuple_type<A20>::const_reference get() const { return m_x; }
9090 private:
9091     typename tuple_type<A20>::const_reference m_x;
9092 };
9093 
9094 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9095 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 21> : tuple_type<A21> {
9096     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a21) {}
9097     typename tuple_type<A21>::const_reference get() const { return m_x; }
9098 private:
9099     typename tuple_type<A21>::const_reference m_x;
9100 };
9101 
9102 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9103 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 22> : tuple_type<A22> {
9104     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a22) {}
9105     typename tuple_type<A22>::const_reference get() const { return m_x; }
9106 private:
9107     typename tuple_type<A22>::const_reference m_x;
9108 };
9109 
9110 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9111 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 23> : tuple_type<A23> {
9112     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a23) {}
9113     typename tuple_type<A23>::const_reference get() const { return m_x; }
9114 private:
9115     typename tuple_type<A23>::const_reference m_x;
9116 };
9117 
9118 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9119 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 24> : tuple_type<A24> {
9120     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a24) {}
9121     typename tuple_type<A24>::const_reference get() const { return m_x; }
9122 private:
9123     typename tuple_type<A24>::const_reference m_x;
9124 };
9125 
9126 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9127 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 25> : tuple_type<A25> {
9128     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a25) {}
9129     typename tuple_type<A25>::const_reference get() const { return m_x; }
9130 private:
9131     typename tuple_type<A25>::const_reference m_x;
9132 };
9133 
9134 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9135 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 26> : tuple_type<A26> {
9136     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a26) {}
9137     typename tuple_type<A26>::const_reference get() const { return m_x; }
9138 private:
9139     typename tuple_type<A26>::const_reference m_x;
9140 };
9141 
9142 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9143 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 27> : tuple_type<A27> {
9144     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a27) {}
9145     typename tuple_type<A27>::const_reference get() const { return m_x; }
9146 private:
9147     typename tuple_type<A27>::const_reference m_x;
9148 };
9149 
9150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9151 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 28> : tuple_type<A28> {
9152     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a28) {}
9153     typename tuple_type<A28>::const_reference get() const { return m_x; }
9154 private:
9155     typename tuple_type<A28>::const_reference m_x;
9156 };
9157 
9158 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9159 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 29> : tuple_type<A29> {
9160     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a29) {}
9161     typename tuple_type<A29>::const_reference get() const { return m_x; }
9162 private:
9163     typename tuple_type<A29>::const_reference m_x;
9164 };
9165 
9166 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9167 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 30> : tuple_type<A30> {
9168     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a30) {}
9169     typename tuple_type<A30>::const_reference get() const { return m_x; }
9170 private:
9171     typename tuple_type<A30>::const_reference m_x;
9172 };
9173 
9174 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
9175 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, 31> : tuple_type<A31> {
9176     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& x) : m_x(x.a31) {}
9177     typename tuple_type<A31>::const_reference get() const { return m_x; }
9178 private:
9179     typename tuple_type<A31>::const_reference m_x;
9180 };
9181 
9182 
9183 /// @endcond
9184 
9185 template <>
9186 struct tuple<> {
9187     tuple() {}
9188     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9189     typedef tuple<> value_type;
9190 };
9191 
9192 /// @cond
9193 
9194 template <typename A0>
9195 struct tuple<A0> {
9196     typedef tuple<A0> value_type;
9197     tuple() {}
9198     tuple(typename tuple_type<A0>::transparent_reference _a0) :
9199         a0(_a0) {}
9200     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9201     template <int N> typename tuple_element<value_type, N>::reference get()
9202         { return tuple_element<value_type, N>(*this).get(); }
9203     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9204         { return const_tuple_element<value_type, N>(*this).get(); }
9205 
9206     A0 a0;
9207 };
9208 
9209 template <int N, typename A0>
9210 inline typename type::tuple_element<type::tuple<A0>, N>::reference get(type::tuple<A0>& t)
9211 { return t.template get<N>(); }
9212 template <int N, typename A0>
9213 inline typename type::const_tuple_element<type::tuple<A0>, N>::const_reference get(type::tuple<A0> const& t)
9214 { return t.template get<N>(); }
9215 
9216 template <typename A0, typename A1>
9217 struct tuple<A0, A1> {
9218     typedef tuple<A0, A1> value_type;
9219     tuple() {}
9220     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1) :
9221         a0(_a0), a1(_a1) {}
9222     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9223     template <int N> typename tuple_element<value_type, N>::reference get()
9224         { return tuple_element<value_type, N>(*this).get(); }
9225     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9226         { return const_tuple_element<value_type, N>(*this).get(); }
9227 
9228     A0 a0;
9229     A1 a1;
9230 };
9231 
9232 template <int N, typename A0, typename A1>
9233 inline typename type::tuple_element<type::tuple<A0, A1>, N>::reference get(type::tuple<A0, A1>& t)
9234 { return t.template get<N>(); }
9235 template <int N, typename A0, typename A1>
9236 inline typename type::const_tuple_element<type::tuple<A0, A1>, N>::const_reference get(type::tuple<A0, A1> const& t)
9237 { return t.template get<N>(); }
9238 
9239 template <typename A0, typename A1, typename A2>
9240 struct tuple<A0, A1, A2> {
9241     typedef tuple<A0, A1, A2> value_type;
9242     tuple() {}
9243     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2) :
9244         a0(_a0), a1(_a1), a2(_a2) {}
9245     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9246     template <int N> typename tuple_element<value_type, N>::reference get()
9247         { return tuple_element<value_type, N>(*this).get(); }
9248     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9249         { return const_tuple_element<value_type, N>(*this).get(); }
9250 
9251     A0 a0;
9252     A1 a1;
9253     A2 a2;
9254 };
9255 
9256 template <int N, typename A0, typename A1, typename A2>
9257 inline typename type::tuple_element<type::tuple<A0, A1, A2>, N>::reference get(type::tuple<A0, A1, A2>& t)
9258 { return t.template get<N>(); }
9259 template <int N, typename A0, typename A1, typename A2>
9260 inline typename type::const_tuple_element<type::tuple<A0, A1, A2>, N>::const_reference get(type::tuple<A0, A1, A2> const& t)
9261 { return t.template get<N>(); }
9262 
9263 template <typename A0, typename A1, typename A2, typename A3>
9264 struct tuple<A0, A1, A2, A3> {
9265     typedef tuple<A0, A1, A2, A3> value_type;
9266     tuple() {}
9267     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3) :
9268         a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
9269     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9270     template <int N> typename tuple_element<value_type, N>::reference get()
9271         { return tuple_element<value_type, N>(*this).get(); }
9272     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9273         { return const_tuple_element<value_type, N>(*this).get(); }
9274 
9275     A0 a0;
9276     A1 a1;
9277     A2 a2;
9278     A3 a3;
9279 };
9280 
9281 template <int N, typename A0, typename A1, typename A2, typename A3>
9282 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3>, N>::reference get(type::tuple<A0, A1, A2, A3>& t)
9283 { return t.template get<N>(); }
9284 template <int N, typename A0, typename A1, typename A2, typename A3>
9285 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3>, N>::const_reference get(type::tuple<A0, A1, A2, A3> const& t)
9286 { return t.template get<N>(); }
9287 
9288 template <typename A0, typename A1, typename A2, typename A3, typename A4>
9289 struct tuple<A0, A1, A2, A3, A4> {
9290     typedef tuple<A0, A1, A2, A3, A4> value_type;
9291     tuple() {}
9292     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4) :
9293         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
9294     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9295     template <int N> typename tuple_element<value_type, N>::reference get()
9296         { return tuple_element<value_type, N>(*this).get(); }
9297     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9298         { return const_tuple_element<value_type, N>(*this).get(); }
9299 
9300     A0 a0;
9301     A1 a1;
9302     A2 a2;
9303     A3 a3;
9304     A4 a4;
9305 };
9306 
9307 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4>
9308 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4>, N>::reference get(type::tuple<A0, A1, A2, A3, A4>& t)
9309 { return t.template get<N>(); }
9310 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4>
9311 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4> const& t)
9312 { return t.template get<N>(); }
9313 
9314 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
9315 struct tuple<A0, A1, A2, A3, A4, A5> {
9316     typedef tuple<A0, A1, A2, A3, A4, A5> value_type;
9317     tuple() {}
9318     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5) :
9319         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
9320     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9321     template <int N> typename tuple_element<value_type, N>::reference get()
9322         { return tuple_element<value_type, N>(*this).get(); }
9323     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9324         { return const_tuple_element<value_type, N>(*this).get(); }
9325 
9326     A0 a0;
9327     A1 a1;
9328     A2 a2;
9329     A3 a3;
9330     A4 a4;
9331     A5 a5;
9332 };
9333 
9334 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
9335 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5>& t)
9336 { return t.template get<N>(); }
9337 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
9338 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5> const& t)
9339 { return t.template get<N>(); }
9340 
9341 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
9342 struct tuple<A0, A1, A2, A3, A4, A5, A6> {
9343     typedef tuple<A0, A1, A2, A3, A4, A5, A6> value_type;
9344     tuple() {}
9345     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6) :
9346         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
9347     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9348     template <int N> typename tuple_element<value_type, N>::reference get()
9349         { return tuple_element<value_type, N>(*this).get(); }
9350     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9351         { return const_tuple_element<value_type, N>(*this).get(); }
9352 
9353     A0 a0;
9354     A1 a1;
9355     A2 a2;
9356     A3 a3;
9357     A4 a4;
9358     A5 a5;
9359     A6 a6;
9360 };
9361 
9362 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
9363 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6>& t)
9364 { return t.template get<N>(); }
9365 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
9366 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6> const& t)
9367 { return t.template get<N>(); }
9368 
9369 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
9370 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7> {
9371     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
9372     tuple() {}
9373     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7) :
9374         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
9375     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9376     template <int N> typename tuple_element<value_type, N>::reference get()
9377         { return tuple_element<value_type, N>(*this).get(); }
9378     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9379         { return const_tuple_element<value_type, N>(*this).get(); }
9380 
9381     A0 a0;
9382     A1 a1;
9383     A2 a2;
9384     A3 a3;
9385     A4 a4;
9386     A5 a5;
9387     A6 a6;
9388     A7 a7;
9389 };
9390 
9391 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
9392 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& t)
9393 { return t.template get<N>(); }
9394 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
9395 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> const& t)
9396 { return t.template get<N>(); }
9397 
9398 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
9399 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
9400     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> value_type;
9401     tuple() {}
9402     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8) :
9403         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {}
9404     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9405     template <int N> typename tuple_element<value_type, N>::reference get()
9406         { return tuple_element<value_type, N>(*this).get(); }
9407     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9408         { return const_tuple_element<value_type, N>(*this).get(); }
9409 
9410     A0 a0;
9411     A1 a1;
9412     A2 a2;
9413     A3 a3;
9414     A4 a4;
9415     A5 a5;
9416     A6 a6;
9417     A7 a7;
9418     A8 a8;
9419 };
9420 
9421 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
9422 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& t)
9423 { return t.template get<N>(); }
9424 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
9425 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> const& t)
9426 { return t.template get<N>(); }
9427 
9428 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
9429 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
9430     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
9431     tuple() {}
9432     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9) :
9433         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
9434     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9435     template <int N> typename tuple_element<value_type, N>::reference get()
9436         { return tuple_element<value_type, N>(*this).get(); }
9437     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9438         { return const_tuple_element<value_type, N>(*this).get(); }
9439 
9440     A0 a0;
9441     A1 a1;
9442     A2 a2;
9443     A3 a3;
9444     A4 a4;
9445     A5 a5;
9446     A6 a6;
9447     A7 a7;
9448     A8 a8;
9449     A9 a9;
9450 };
9451 
9452 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
9453 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& t)
9454 { return t.template get<N>(); }
9455 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
9456 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> const& t)
9457 { return t.template get<N>(); }
9458 
9459 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
9460 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
9461     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
9462     tuple() {}
9463     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10) :
9464         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
9465     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9466     template <int N> typename tuple_element<value_type, N>::reference get()
9467         { return tuple_element<value_type, N>(*this).get(); }
9468     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9469         { return const_tuple_element<value_type, N>(*this).get(); }
9470 
9471     A0 a0;
9472     A1 a1;
9473     A2 a2;
9474     A3 a3;
9475     A4 a4;
9476     A5 a5;
9477     A6 a6;
9478     A7 a7;
9479     A8 a8;
9480     A9 a9;
9481     A10 a10;
9482 };
9483 
9484 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
9485 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& t)
9486 { return t.template get<N>(); }
9487 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
9488 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> const& t)
9489 { return t.template get<N>(); }
9490 
9491 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
9492 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
9493     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
9494     tuple() {}
9495     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11) :
9496         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
9497     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9498     template <int N> typename tuple_element<value_type, N>::reference get()
9499         { return tuple_element<value_type, N>(*this).get(); }
9500     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9501         { return const_tuple_element<value_type, N>(*this).get(); }
9502 
9503     A0 a0;
9504     A1 a1;
9505     A2 a2;
9506     A3 a3;
9507     A4 a4;
9508     A5 a5;
9509     A6 a6;
9510     A7 a7;
9511     A8 a8;
9512     A9 a9;
9513     A10 a10;
9514     A11 a11;
9515 };
9516 
9517 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
9518 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& t)
9519 { return t.template get<N>(); }
9520 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
9521 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> const& t)
9522 { return t.template get<N>(); }
9523 
9524 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
9525 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
9526     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
9527     tuple() {}
9528     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12) :
9529         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12) {}
9530     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9531     template <int N> typename tuple_element<value_type, N>::reference get()
9532         { return tuple_element<value_type, N>(*this).get(); }
9533     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9534         { return const_tuple_element<value_type, N>(*this).get(); }
9535 
9536     A0 a0;
9537     A1 a1;
9538     A2 a2;
9539     A3 a3;
9540     A4 a4;
9541     A5 a5;
9542     A6 a6;
9543     A7 a7;
9544     A8 a8;
9545     A9 a9;
9546     A10 a10;
9547     A11 a11;
9548     A12 a12;
9549 };
9550 
9551 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
9552 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& t)
9553 { return t.template get<N>(); }
9554 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
9555 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> const& t)
9556 { return t.template get<N>(); }
9557 
9558 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
9559 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
9560     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
9561     tuple() {}
9562     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13) :
9563         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {}
9564     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9565     template <int N> typename tuple_element<value_type, N>::reference get()
9566         { return tuple_element<value_type, N>(*this).get(); }
9567     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9568         { return const_tuple_element<value_type, N>(*this).get(); }
9569 
9570     A0 a0;
9571     A1 a1;
9572     A2 a2;
9573     A3 a3;
9574     A4 a4;
9575     A5 a5;
9576     A6 a6;
9577     A7 a7;
9578     A8 a8;
9579     A9 a9;
9580     A10 a10;
9581     A11 a11;
9582     A12 a12;
9583     A13 a13;
9584 };
9585 
9586 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
9587 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& t)
9588 { return t.template get<N>(); }
9589 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
9590 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> const& t)
9591 { return t.template get<N>(); }
9592 
9593 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
9594 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
9595     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
9596     tuple() {}
9597     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14) :
9598         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14) {}
9599     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9600     template <int N> typename tuple_element<value_type, N>::reference get()
9601         { return tuple_element<value_type, N>(*this).get(); }
9602     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9603         { return const_tuple_element<value_type, N>(*this).get(); }
9604 
9605     A0 a0;
9606     A1 a1;
9607     A2 a2;
9608     A3 a3;
9609     A4 a4;
9610     A5 a5;
9611     A6 a6;
9612     A7 a7;
9613     A8 a8;
9614     A9 a9;
9615     A10 a10;
9616     A11 a11;
9617     A12 a12;
9618     A13 a13;
9619     A14 a14;
9620 };
9621 
9622 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
9623 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& t)
9624 { return t.template get<N>(); }
9625 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
9626 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> const& t)
9627 { return t.template get<N>(); }
9628 
9629 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
9630 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
9631     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
9632     tuple() {}
9633     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15) :
9634         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15) {}
9635     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9636     template <int N> typename tuple_element<value_type, N>::reference get()
9637         { return tuple_element<value_type, N>(*this).get(); }
9638     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9639         { return const_tuple_element<value_type, N>(*this).get(); }
9640 
9641     A0 a0;
9642     A1 a1;
9643     A2 a2;
9644     A3 a3;
9645     A4 a4;
9646     A5 a5;
9647     A6 a6;
9648     A7 a7;
9649     A8 a8;
9650     A9 a9;
9651     A10 a10;
9652     A11 a11;
9653     A12 a12;
9654     A13 a13;
9655     A14 a14;
9656     A15 a15;
9657 };
9658 
9659 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
9660 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& t)
9661 { return t.template get<N>(); }
9662 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
9663 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> const& t)
9664 { return t.template get<N>(); }
9665 
9666 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
9667 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
9668     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
9669     tuple() {}
9670     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16) :
9671         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16) {}
9672     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9673     template <int N> typename tuple_element<value_type, N>::reference get()
9674         { return tuple_element<value_type, N>(*this).get(); }
9675     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9676         { return const_tuple_element<value_type, N>(*this).get(); }
9677 
9678     A0 a0;
9679     A1 a1;
9680     A2 a2;
9681     A3 a3;
9682     A4 a4;
9683     A5 a5;
9684     A6 a6;
9685     A7 a7;
9686     A8 a8;
9687     A9 a9;
9688     A10 a10;
9689     A11 a11;
9690     A12 a12;
9691     A13 a13;
9692     A14 a14;
9693     A15 a15;
9694     A16 a16;
9695 };
9696 
9697 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
9698 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& t)
9699 { return t.template get<N>(); }
9700 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
9701 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> const& t)
9702 { return t.template get<N>(); }
9703 
9704 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
9705 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
9706     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
9707     tuple() {}
9708     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17) :
9709         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17) {}
9710     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9711     template <int N> typename tuple_element<value_type, N>::reference get()
9712         { return tuple_element<value_type, N>(*this).get(); }
9713     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9714         { return const_tuple_element<value_type, N>(*this).get(); }
9715 
9716     A0 a0;
9717     A1 a1;
9718     A2 a2;
9719     A3 a3;
9720     A4 a4;
9721     A5 a5;
9722     A6 a6;
9723     A7 a7;
9724     A8 a8;
9725     A9 a9;
9726     A10 a10;
9727     A11 a11;
9728     A12 a12;
9729     A13 a13;
9730     A14 a14;
9731     A15 a15;
9732     A16 a16;
9733     A17 a17;
9734 };
9735 
9736 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
9737 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& t)
9738 { return t.template get<N>(); }
9739 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
9740 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> const& t)
9741 { return t.template get<N>(); }
9742 
9743 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
9744 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
9745     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
9746     tuple() {}
9747     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18) :
9748         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18) {}
9749     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9750     template <int N> typename tuple_element<value_type, N>::reference get()
9751         { return tuple_element<value_type, N>(*this).get(); }
9752     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9753         { return const_tuple_element<value_type, N>(*this).get(); }
9754 
9755     A0 a0;
9756     A1 a1;
9757     A2 a2;
9758     A3 a3;
9759     A4 a4;
9760     A5 a5;
9761     A6 a6;
9762     A7 a7;
9763     A8 a8;
9764     A9 a9;
9765     A10 a10;
9766     A11 a11;
9767     A12 a12;
9768     A13 a13;
9769     A14 a14;
9770     A15 a15;
9771     A16 a16;
9772     A17 a17;
9773     A18 a18;
9774 };
9775 
9776 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
9777 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& t)
9778 { return t.template get<N>(); }
9779 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
9780 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> const& t)
9781 { return t.template get<N>(); }
9782 
9783 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
9784 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
9785     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> value_type;
9786     tuple() {}
9787     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19) :
9788         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19) {}
9789     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9790     template <int N> typename tuple_element<value_type, N>::reference get()
9791         { return tuple_element<value_type, N>(*this).get(); }
9792     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9793         { return const_tuple_element<value_type, N>(*this).get(); }
9794 
9795     A0 a0;
9796     A1 a1;
9797     A2 a2;
9798     A3 a3;
9799     A4 a4;
9800     A5 a5;
9801     A6 a6;
9802     A7 a7;
9803     A8 a8;
9804     A9 a9;
9805     A10 a10;
9806     A11 a11;
9807     A12 a12;
9808     A13 a13;
9809     A14 a14;
9810     A15 a15;
9811     A16 a16;
9812     A17 a17;
9813     A18 a18;
9814     A19 a19;
9815 };
9816 
9817 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
9818 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& t)
9819 { return t.template get<N>(); }
9820 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
9821 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> const& t)
9822 { return t.template get<N>(); }
9823 
9824 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
9825 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> {
9826     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> value_type;
9827     tuple() {}
9828     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20) :
9829         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20) {}
9830     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9831     template <int N> typename tuple_element<value_type, N>::reference get()
9832         { return tuple_element<value_type, N>(*this).get(); }
9833     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9834         { return const_tuple_element<value_type, N>(*this).get(); }
9835 
9836     A0 a0;
9837     A1 a1;
9838     A2 a2;
9839     A3 a3;
9840     A4 a4;
9841     A5 a5;
9842     A6 a6;
9843     A7 a7;
9844     A8 a8;
9845     A9 a9;
9846     A10 a10;
9847     A11 a11;
9848     A12 a12;
9849     A13 a13;
9850     A14 a14;
9851     A15 a15;
9852     A16 a16;
9853     A17 a17;
9854     A18 a18;
9855     A19 a19;
9856     A20 a20;
9857 };
9858 
9859 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
9860 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& t)
9861 { return t.template get<N>(); }
9862 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
9863 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> const& t)
9864 { return t.template get<N>(); }
9865 
9866 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
9867 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> {
9868     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> value_type;
9869     tuple() {}
9870     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21) :
9871         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21) {}
9872     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9873     template <int N> typename tuple_element<value_type, N>::reference get()
9874         { return tuple_element<value_type, N>(*this).get(); }
9875     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9876         { return const_tuple_element<value_type, N>(*this).get(); }
9877 
9878     A0 a0;
9879     A1 a1;
9880     A2 a2;
9881     A3 a3;
9882     A4 a4;
9883     A5 a5;
9884     A6 a6;
9885     A7 a7;
9886     A8 a8;
9887     A9 a9;
9888     A10 a10;
9889     A11 a11;
9890     A12 a12;
9891     A13 a13;
9892     A14 a14;
9893     A15 a15;
9894     A16 a16;
9895     A17 a17;
9896     A18 a18;
9897     A19 a19;
9898     A20 a20;
9899     A21 a21;
9900 };
9901 
9902 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
9903 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& t)
9904 { return t.template get<N>(); }
9905 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
9906 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> const& t)
9907 { return t.template get<N>(); }
9908 
9909 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
9910 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> {
9911     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> value_type;
9912     tuple() {}
9913     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22) :
9914         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22) {}
9915     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9916     template <int N> typename tuple_element<value_type, N>::reference get()
9917         { return tuple_element<value_type, N>(*this).get(); }
9918     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9919         { return const_tuple_element<value_type, N>(*this).get(); }
9920 
9921     A0 a0;
9922     A1 a1;
9923     A2 a2;
9924     A3 a3;
9925     A4 a4;
9926     A5 a5;
9927     A6 a6;
9928     A7 a7;
9929     A8 a8;
9930     A9 a9;
9931     A10 a10;
9932     A11 a11;
9933     A12 a12;
9934     A13 a13;
9935     A14 a14;
9936     A15 a15;
9937     A16 a16;
9938     A17 a17;
9939     A18 a18;
9940     A19 a19;
9941     A20 a20;
9942     A21 a21;
9943     A22 a22;
9944 };
9945 
9946 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
9947 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& t)
9948 { return t.template get<N>(); }
9949 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
9950 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> const& t)
9951 { return t.template get<N>(); }
9952 
9953 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
9954 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> {
9955     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> value_type;
9956     tuple() {}
9957     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23) :
9958         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23) {}
9959     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
9960     template <int N> typename tuple_element<value_type, N>::reference get()
9961         { return tuple_element<value_type, N>(*this).get(); }
9962     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9963         { return const_tuple_element<value_type, N>(*this).get(); }
9964 
9965     A0 a0;
9966     A1 a1;
9967     A2 a2;
9968     A3 a3;
9969     A4 a4;
9970     A5 a5;
9971     A6 a6;
9972     A7 a7;
9973     A8 a8;
9974     A9 a9;
9975     A10 a10;
9976     A11 a11;
9977     A12 a12;
9978     A13 a13;
9979     A14 a14;
9980     A15 a15;
9981     A16 a16;
9982     A17 a17;
9983     A18 a18;
9984     A19 a19;
9985     A20 a20;
9986     A21 a21;
9987     A22 a22;
9988     A23 a23;
9989 };
9990 
9991 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
9992 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& t)
9993 { return t.template get<N>(); }
9994 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
9995 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> const& t)
9996 { return t.template get<N>(); }
9997 
9998 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
9999 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> {
10000     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> value_type;
10001     tuple() {}
10002     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24) :
10003         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24) {}
10004     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10005     template <int N> typename tuple_element<value_type, N>::reference get()
10006         { return tuple_element<value_type, N>(*this).get(); }
10007     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10008         { return const_tuple_element<value_type, N>(*this).get(); }
10009 
10010     A0 a0;
10011     A1 a1;
10012     A2 a2;
10013     A3 a3;
10014     A4 a4;
10015     A5 a5;
10016     A6 a6;
10017     A7 a7;
10018     A8 a8;
10019     A9 a9;
10020     A10 a10;
10021     A11 a11;
10022     A12 a12;
10023     A13 a13;
10024     A14 a14;
10025     A15 a15;
10026     A16 a16;
10027     A17 a17;
10028     A18 a18;
10029     A19 a19;
10030     A20 a20;
10031     A21 a21;
10032     A22 a22;
10033     A23 a23;
10034     A24 a24;
10035 };
10036 
10037 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
10038 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& t)
10039 { return t.template get<N>(); }
10040 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
10041 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> const& t)
10042 { return t.template get<N>(); }
10043 
10044 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
10045 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> {
10046     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> value_type;
10047     tuple() {}
10048     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25) :
10049         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25) {}
10050     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10051     template <int N> typename tuple_element<value_type, N>::reference get()
10052         { return tuple_element<value_type, N>(*this).get(); }
10053     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10054         { return const_tuple_element<value_type, N>(*this).get(); }
10055 
10056     A0 a0;
10057     A1 a1;
10058     A2 a2;
10059     A3 a3;
10060     A4 a4;
10061     A5 a5;
10062     A6 a6;
10063     A7 a7;
10064     A8 a8;
10065     A9 a9;
10066     A10 a10;
10067     A11 a11;
10068     A12 a12;
10069     A13 a13;
10070     A14 a14;
10071     A15 a15;
10072     A16 a16;
10073     A17 a17;
10074     A18 a18;
10075     A19 a19;
10076     A20 a20;
10077     A21 a21;
10078     A22 a22;
10079     A23 a23;
10080     A24 a24;
10081     A25 a25;
10082 };
10083 
10084 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
10085 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& t)
10086 { return t.template get<N>(); }
10087 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
10088 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> const& t)
10089 { return t.template get<N>(); }
10090 
10091 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
10092 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> {
10093     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> value_type;
10094     tuple() {}
10095     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25, typename tuple_type<A26>::transparent_reference _a26) :
10096         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26) {}
10097     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10098     template <int N> typename tuple_element<value_type, N>::reference get()
10099         { return tuple_element<value_type, N>(*this).get(); }
10100     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10101         { return const_tuple_element<value_type, N>(*this).get(); }
10102 
10103     A0 a0;
10104     A1 a1;
10105     A2 a2;
10106     A3 a3;
10107     A4 a4;
10108     A5 a5;
10109     A6 a6;
10110     A7 a7;
10111     A8 a8;
10112     A9 a9;
10113     A10 a10;
10114     A11 a11;
10115     A12 a12;
10116     A13 a13;
10117     A14 a14;
10118     A15 a15;
10119     A16 a16;
10120     A17 a17;
10121     A18 a18;
10122     A19 a19;
10123     A20 a20;
10124     A21 a21;
10125     A22 a22;
10126     A23 a23;
10127     A24 a24;
10128     A25 a25;
10129     A26 a26;
10130 };
10131 
10132 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
10133 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& t)
10134 { return t.template get<N>(); }
10135 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
10136 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> const& t)
10137 { return t.template get<N>(); }
10138 
10139 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
10140 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> {
10141     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> value_type;
10142     tuple() {}
10143     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25, typename tuple_type<A26>::transparent_reference _a26, typename tuple_type<A27>::transparent_reference _a27) :
10144         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27) {}
10145     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10146     template <int N> typename tuple_element<value_type, N>::reference get()
10147         { return tuple_element<value_type, N>(*this).get(); }
10148     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10149         { return const_tuple_element<value_type, N>(*this).get(); }
10150 
10151     A0 a0;
10152     A1 a1;
10153     A2 a2;
10154     A3 a3;
10155     A4 a4;
10156     A5 a5;
10157     A6 a6;
10158     A7 a7;
10159     A8 a8;
10160     A9 a9;
10161     A10 a10;
10162     A11 a11;
10163     A12 a12;
10164     A13 a13;
10165     A14 a14;
10166     A15 a15;
10167     A16 a16;
10168     A17 a17;
10169     A18 a18;
10170     A19 a19;
10171     A20 a20;
10172     A21 a21;
10173     A22 a22;
10174     A23 a23;
10175     A24 a24;
10176     A25 a25;
10177     A26 a26;
10178     A27 a27;
10179 };
10180 
10181 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
10182 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& t)
10183 { return t.template get<N>(); }
10184 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
10185 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> const& t)
10186 { return t.template get<N>(); }
10187 
10188 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
10189 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> {
10190     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> value_type;
10191     tuple() {}
10192     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25, typename tuple_type<A26>::transparent_reference _a26, typename tuple_type<A27>::transparent_reference _a27, typename tuple_type<A28>::transparent_reference _a28) :
10193         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28) {}
10194     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10195     template <int N> typename tuple_element<value_type, N>::reference get()
10196         { return tuple_element<value_type, N>(*this).get(); }
10197     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10198         { return const_tuple_element<value_type, N>(*this).get(); }
10199 
10200     A0 a0;
10201     A1 a1;
10202     A2 a2;
10203     A3 a3;
10204     A4 a4;
10205     A5 a5;
10206     A6 a6;
10207     A7 a7;
10208     A8 a8;
10209     A9 a9;
10210     A10 a10;
10211     A11 a11;
10212     A12 a12;
10213     A13 a13;
10214     A14 a14;
10215     A15 a15;
10216     A16 a16;
10217     A17 a17;
10218     A18 a18;
10219     A19 a19;
10220     A20 a20;
10221     A21 a21;
10222     A22 a22;
10223     A23 a23;
10224     A24 a24;
10225     A25 a25;
10226     A26 a26;
10227     A27 a27;
10228     A28 a28;
10229 };
10230 
10231 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
10232 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& t)
10233 { return t.template get<N>(); }
10234 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
10235 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> const& t)
10236 { return t.template get<N>(); }
10237 
10238 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
10239 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> {
10240     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> value_type;
10241     tuple() {}
10242     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25, typename tuple_type<A26>::transparent_reference _a26, typename tuple_type<A27>::transparent_reference _a27, typename tuple_type<A28>::transparent_reference _a28, typename tuple_type<A29>::transparent_reference _a29) :
10243         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29) {}
10244     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10245     template <int N> typename tuple_element<value_type, N>::reference get()
10246         { return tuple_element<value_type, N>(*this).get(); }
10247     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10248         { return const_tuple_element<value_type, N>(*this).get(); }
10249 
10250     A0 a0;
10251     A1 a1;
10252     A2 a2;
10253     A3 a3;
10254     A4 a4;
10255     A5 a5;
10256     A6 a6;
10257     A7 a7;
10258     A8 a8;
10259     A9 a9;
10260     A10 a10;
10261     A11 a11;
10262     A12 a12;
10263     A13 a13;
10264     A14 a14;
10265     A15 a15;
10266     A16 a16;
10267     A17 a17;
10268     A18 a18;
10269     A19 a19;
10270     A20 a20;
10271     A21 a21;
10272     A22 a22;
10273     A23 a23;
10274     A24 a24;
10275     A25 a25;
10276     A26 a26;
10277     A27 a27;
10278     A28 a28;
10279     A29 a29;
10280 };
10281 
10282 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
10283 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& t)
10284 { return t.template get<N>(); }
10285 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
10286 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> const& t)
10287 { return t.template get<N>(); }
10288 
10289 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
10290 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> {
10291     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> value_type;
10292     tuple() {}
10293     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25, typename tuple_type<A26>::transparent_reference _a26, typename tuple_type<A27>::transparent_reference _a27, typename tuple_type<A28>::transparent_reference _a28, typename tuple_type<A29>::transparent_reference _a29, typename tuple_type<A30>::transparent_reference _a30) :
10294         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30) {}
10295     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10296     template <int N> typename tuple_element<value_type, N>::reference get()
10297         { return tuple_element<value_type, N>(*this).get(); }
10298     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10299         { return const_tuple_element<value_type, N>(*this).get(); }
10300 
10301     A0 a0;
10302     A1 a1;
10303     A2 a2;
10304     A3 a3;
10305     A4 a4;
10306     A5 a5;
10307     A6 a6;
10308     A7 a7;
10309     A8 a8;
10310     A9 a9;
10311     A10 a10;
10312     A11 a11;
10313     A12 a12;
10314     A13 a13;
10315     A14 a14;
10316     A15 a15;
10317     A16 a16;
10318     A17 a17;
10319     A18 a18;
10320     A19 a19;
10321     A20 a20;
10322     A21 a21;
10323     A22 a22;
10324     A23 a23;
10325     A24 a24;
10326     A25 a25;
10327     A26 a26;
10328     A27 a27;
10329     A28 a28;
10330     A29 a29;
10331     A30 a30;
10332 };
10333 
10334 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
10335 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& t)
10336 { return t.template get<N>(); }
10337 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
10338 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> const& t)
10339 { return t.template get<N>(); }
10340 
10341 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
10342 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> {
10343     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> value_type;
10344     tuple() {}
10345     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2, typename tuple_type<A3>::transparent_reference _a3, typename tuple_type<A4>::transparent_reference _a4, typename tuple_type<A5>::transparent_reference _a5, typename tuple_type<A6>::transparent_reference _a6, typename tuple_type<A7>::transparent_reference _a7, typename tuple_type<A8>::transparent_reference _a8, typename tuple_type<A9>::transparent_reference _a9, typename tuple_type<A10>::transparent_reference _a10, typename tuple_type<A11>::transparent_reference _a11, typename tuple_type<A12>::transparent_reference _a12, typename tuple_type<A13>::transparent_reference _a13, typename tuple_type<A14>::transparent_reference _a14, typename tuple_type<A15>::transparent_reference _a15, typename tuple_type<A16>::transparent_reference _a16, typename tuple_type<A17>::transparent_reference _a17, typename tuple_type<A18>::transparent_reference _a18, typename tuple_type<A19>::transparent_reference _a19, typename tuple_type<A20>::transparent_reference _a20, typename tuple_type<A21>::transparent_reference _a21, typename tuple_type<A22>::transparent_reference _a22, typename tuple_type<A23>::transparent_reference _a23, typename tuple_type<A24>::transparent_reference _a24, typename tuple_type<A25>::transparent_reference _a25, typename tuple_type<A26>::transparent_reference _a26, typename tuple_type<A27>::transparent_reference _a27, typename tuple_type<A28>::transparent_reference _a28, typename tuple_type<A29>::transparent_reference _a29, typename tuple_type<A30>::transparent_reference _a30, typename tuple_type<A31>::transparent_reference _a31) :
10346         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30), a31(_a31) {}
10347     tuple(clmdep_msgpack::object const& o) { o.convert(*this); }
10348     template <int N> typename tuple_element<value_type, N>::reference get()
10349         { return tuple_element<value_type, N>(*this).get(); }
10350     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10351         { return const_tuple_element<value_type, N>(*this).get(); }
10352 
10353     A0 a0;
10354     A1 a1;
10355     A2 a2;
10356     A3 a3;
10357     A4 a4;
10358     A5 a5;
10359     A6 a6;
10360     A7 a7;
10361     A8 a8;
10362     A9 a9;
10363     A10 a10;
10364     A11 a11;
10365     A12 a12;
10366     A13 a13;
10367     A14 a14;
10368     A15 a15;
10369     A16 a16;
10370     A17 a17;
10371     A18 a18;
10372     A19 a19;
10373     A20 a20;
10374     A21 a21;
10375     A22 a22;
10376     A23 a23;
10377     A24 a24;
10378     A25 a25;
10379     A26 a26;
10380     A27 a27;
10381     A28 a28;
10382     A29 a29;
10383     A30 a30;
10384     A31 a31;
10385 };
10386 
10387 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
10388 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, N>::reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& t)
10389 { return t.template get<N>(); }
10390 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
10391 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>, N>::const_reference get(type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> const& t)
10392 { return t.template get<N>(); }
10393 
10394 /// @endcond
10395 
10396 inline tuple<> make_tuple()
10397 {
10398     return tuple<>();
10399 }
10400 
10401 /// @cond
10402 
10403 template <typename A0>
10404 inline tuple<A0> make_tuple(typename tuple_type<A0>::transparent_reference a0)
10405 {
10406     return tuple<A0>(a0);
10407 }
10408 
10409 template <typename A0, typename A1>
10410 inline tuple<A0, A1> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1)
10411 {
10412     return tuple<A0, A1>(a0, a1);
10413 }
10414 
10415 template <typename A0, typename A1, typename A2>
10416 inline tuple<A0, A1, A2> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2)
10417 {
10418     return tuple<A0, A1, A2>(a0, a1, a2);
10419 }
10420 
10421 template <typename A0, typename A1, typename A2, typename A3>
10422 inline tuple<A0, A1, A2, A3> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3)
10423 {
10424     return tuple<A0, A1, A2, A3>(a0, a1, a2, a3);
10425 }
10426 
10427 template <typename A0, typename A1, typename A2, typename A3, typename A4>
10428 inline tuple<A0, A1, A2, A3, A4> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4)
10429 {
10430     return tuple<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
10431 }
10432 
10433 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
10434 inline tuple<A0, A1, A2, A3, A4, A5> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5)
10435 {
10436     return tuple<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
10437 }
10438 
10439 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
10440 inline tuple<A0, A1, A2, A3, A4, A5, A6> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6)
10441 {
10442     return tuple<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
10443 }
10444 
10445 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
10446 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7)
10447 {
10448     return tuple<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
10449 }
10450 
10451 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
10452 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8)
10453 {
10454     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
10455 }
10456 
10457 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
10458 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9)
10459 {
10460     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
10461 }
10462 
10463 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
10464 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10)
10465 {
10466     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
10467 }
10468 
10469 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
10470 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11)
10471 {
10472     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
10473 }
10474 
10475 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
10476 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12)
10477 {
10478     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
10479 }
10480 
10481 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
10482 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13)
10483 {
10484     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);
10485 }
10486 
10487 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
10488 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14)
10489 {
10490     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
10491 }
10492 
10493 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
10494 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15)
10495 {
10496     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
10497 }
10498 
10499 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
10500 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16)
10501 {
10502     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);
10503 }
10504 
10505 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
10506 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17)
10507 {
10508     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);
10509 }
10510 
10511 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
10512 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18)
10513 {
10514     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
10515 }
10516 
10517 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
10518 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19)
10519 {
10520     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);
10521 }
10522 
10523 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
10524 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20)
10525 {
10526     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
10527 }
10528 
10529 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
10530 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21)
10531 {
10532     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21);
10533 }
10534 
10535 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
10536 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22)
10537 {
10538     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22);
10539 }
10540 
10541 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
10542 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23)
10543 {
10544     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23);
10545 }
10546 
10547 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
10548 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24)
10549 {
10550     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24);
10551 }
10552 
10553 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
10554 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25)
10555 {
10556     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
10557 }
10558 
10559 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
10560 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25, typename tuple_type<A26>::transparent_reference a26)
10561 {
10562     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26);
10563 }
10564 
10565 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
10566 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25, typename tuple_type<A26>::transparent_reference a26, typename tuple_type<A27>::transparent_reference a27)
10567 {
10568     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27);
10569 }
10570 
10571 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
10572 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25, typename tuple_type<A26>::transparent_reference a26, typename tuple_type<A27>::transparent_reference a27, typename tuple_type<A28>::transparent_reference a28)
10573 {
10574     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28);
10575 }
10576 
10577 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
10578 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25, typename tuple_type<A26>::transparent_reference a26, typename tuple_type<A27>::transparent_reference a27, typename tuple_type<A28>::transparent_reference a28, typename tuple_type<A29>::transparent_reference a29)
10579 {
10580     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29);
10581 }
10582 
10583 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
10584 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25, typename tuple_type<A26>::transparent_reference a26, typename tuple_type<A27>::transparent_reference a27, typename tuple_type<A28>::transparent_reference a28, typename tuple_type<A29>::transparent_reference a29, typename tuple_type<A30>::transparent_reference a30)
10585 {
10586     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30);
10587 }
10588 
10589 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
10590 inline tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1, typename tuple_type<A2>::transparent_reference a2, typename tuple_type<A3>::transparent_reference a3, typename tuple_type<A4>::transparent_reference a4, typename tuple_type<A5>::transparent_reference a5, typename tuple_type<A6>::transparent_reference a6, typename tuple_type<A7>::transparent_reference a7, typename tuple_type<A8>::transparent_reference a8, typename tuple_type<A9>::transparent_reference a9, typename tuple_type<A10>::transparent_reference a10, typename tuple_type<A11>::transparent_reference a11, typename tuple_type<A12>::transparent_reference a12, typename tuple_type<A13>::transparent_reference a13, typename tuple_type<A14>::transparent_reference a14, typename tuple_type<A15>::transparent_reference a15, typename tuple_type<A16>::transparent_reference a16, typename tuple_type<A17>::transparent_reference a17, typename tuple_type<A18>::transparent_reference a18, typename tuple_type<A19>::transparent_reference a19, typename tuple_type<A20>::transparent_reference a20, typename tuple_type<A21>::transparent_reference a21, typename tuple_type<A22>::transparent_reference a22, typename tuple_type<A23>::transparent_reference a23, typename tuple_type<A24>::transparent_reference a24, typename tuple_type<A25>::transparent_reference a25, typename tuple_type<A26>::transparent_reference a26, typename tuple_type<A27>::transparent_reference a27, typename tuple_type<A28>::transparent_reference a28, typename tuple_type<A29>::transparent_reference a29, typename tuple_type<A30>::transparent_reference a30, typename tuple_type<A31>::transparent_reference a31)
10591 {
10592     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31);
10593 }
10594 
10595 /// @endcond
10596 
10597 }  // namespace type
10598 
10599 namespace adaptor {
10600 
10601 template <>
10602 struct convert<type::tuple<> > {
10603     clmdep_msgpack::object const& operator()(
10604         clmdep_msgpack::object const& o,
10605         type::tuple<>&) const {
10606         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10607         return o;
10608     }
10609 };
10610 
10611 /// @cond
10612 
10613 template <typename A0>
10614 struct convert<type::tuple<A0> > {
10615     clmdep_msgpack::object const& operator()(
10616         clmdep_msgpack::object const& o,
10617         type::tuple<A0>& v) const {
10618         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10619         if(o.via.array.size < 1) { throw clmdep_msgpack::type_error(); }
10620 
10621         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10622         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10623         return o;
10624     }
10625 };
10626 
10627 template <typename A0, typename A1>
10628 struct convert<type::tuple<A0, A1> > {
10629     clmdep_msgpack::object const& operator()(
10630         clmdep_msgpack::object const& o,
10631         type::tuple<A0, A1>& v) const {
10632         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10633         if(o.via.array.size < 2) { throw clmdep_msgpack::type_error(); }
10634 
10635         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10636         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10637         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10638         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10639         return o;
10640     }
10641 };
10642 
10643 template <typename A0, typename A1, typename A2>
10644 struct convert<type::tuple<A0, A1, A2> > {
10645     clmdep_msgpack::object const& operator()(
10646         clmdep_msgpack::object const& o,
10647         type::tuple<A0, A1, A2>& v) const {
10648         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10649         if(o.via.array.size < 3) { throw clmdep_msgpack::type_error(); }
10650 
10651         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10652         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10653         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10654         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10655         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10656         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10657         return o;
10658     }
10659 };
10660 
10661 template <typename A0, typename A1, typename A2, typename A3>
10662 struct convert<type::tuple<A0, A1, A2, A3> > {
10663     clmdep_msgpack::object const& operator()(
10664         clmdep_msgpack::object const& o,
10665         type::tuple<A0, A1, A2, A3>& v) const {
10666         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10667         if(o.via.array.size < 4) { throw clmdep_msgpack::type_error(); }
10668 
10669         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10670         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10671         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10672         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10673         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10674         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10675         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10676         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10677         return o;
10678     }
10679 };
10680 
10681 template <typename A0, typename A1, typename A2, typename A3, typename A4>
10682 struct convert<type::tuple<A0, A1, A2, A3, A4> > {
10683     clmdep_msgpack::object const& operator()(
10684         clmdep_msgpack::object const& o,
10685         type::tuple<A0, A1, A2, A3, A4>& v) const {
10686         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10687         if(o.via.array.size < 5) { throw clmdep_msgpack::type_error(); }
10688 
10689         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10690         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10691         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10692         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10693         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10694         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10695         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10696         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10697         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10698         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10699         return o;
10700     }
10701 };
10702 
10703 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
10704 struct convert<type::tuple<A0, A1, A2, A3, A4, A5> > {
10705     clmdep_msgpack::object const& operator()(
10706         clmdep_msgpack::object const& o,
10707         type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
10708         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10709         if(o.via.array.size < 6) { throw clmdep_msgpack::type_error(); }
10710 
10711         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10712         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10713         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10714         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10715         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10716         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10717         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10718         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10719         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10720         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10721         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10722         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10723         return o;
10724     }
10725 };
10726 
10727 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
10728 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
10729     clmdep_msgpack::object const& operator()(
10730         clmdep_msgpack::object const& o,
10731         type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
10732         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10733         if(o.via.array.size < 7) { throw clmdep_msgpack::type_error(); }
10734 
10735         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10736         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10737         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10738         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10739         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10740         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10741         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10742         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10743         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10744         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10745         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10746         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10747         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10748         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10749         return o;
10750     }
10751 };
10752 
10753 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
10754 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
10755     clmdep_msgpack::object const& operator()(
10756         clmdep_msgpack::object const& o,
10757         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
10758         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10759         if(o.via.array.size < 8) { throw clmdep_msgpack::type_error(); }
10760 
10761         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10762         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10763         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10764         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10765         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10766         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10767         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10768         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10769         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10770         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10771         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10772         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10773         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10774         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10775         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10776         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10777         return o;
10778     }
10779 };
10780 
10781 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
10782 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
10783     clmdep_msgpack::object const& operator()(
10784         clmdep_msgpack::object const& o,
10785         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
10786         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10787         if(o.via.array.size < 9) { throw clmdep_msgpack::type_error(); }
10788 
10789         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10790         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10791         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10792         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10793         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10794         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10795         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10796         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10797         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10798         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10799         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10800         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10801         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10802         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10803         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10804         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10805         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10806         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10807         return o;
10808     }
10809 };
10810 
10811 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
10812 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
10813     clmdep_msgpack::object const& operator()(
10814         clmdep_msgpack::object const& o,
10815         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
10816         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10817         if(o.via.array.size < 10) { throw clmdep_msgpack::type_error(); }
10818 
10819         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10820         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10821         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10822         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10823         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10824         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10825         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10826         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10827         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10828         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10829         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10830         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10831         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10832         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10833         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10834         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10835         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10836         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10837         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10838         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10839         return o;
10840     }
10841 };
10842 
10843 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
10844 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> > {
10845     clmdep_msgpack::object const& operator()(
10846         clmdep_msgpack::object const& o,
10847         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
10848         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10849         if(o.via.array.size < 11) { throw clmdep_msgpack::type_error(); }
10850 
10851         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10852         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10853         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10854         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10855         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10856         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10857         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10858         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10859         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10860         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10861         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10862         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10863         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10864         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10865         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10866         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10867         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10868         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10869         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10870         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10871         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10872         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
10873         return o;
10874     }
10875 };
10876 
10877 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
10878 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> > {
10879     clmdep_msgpack::object const& operator()(
10880         clmdep_msgpack::object const& o,
10881         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
10882         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10883         if(o.via.array.size < 12) { throw clmdep_msgpack::type_error(); }
10884 
10885         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10886         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10887         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10888         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10889         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10890         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10891         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10892         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10893         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10894         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10895         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10896         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10897         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10898         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10899         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10900         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10901         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10902         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10903         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10904         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10905         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10906         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
10907         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10908         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
10909         return o;
10910     }
10911 };
10912 
10913 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
10914 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> > {
10915     clmdep_msgpack::object const& operator()(
10916         clmdep_msgpack::object const& o,
10917         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
10918         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10919         if(o.via.array.size < 13) { throw clmdep_msgpack::type_error(); }
10920 
10921         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10922         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10923         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10924         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10925         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10926         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10927         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10928         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10929         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10930         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10931         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10932         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10933         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10934         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10935         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10936         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10937         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10938         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10939         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10940         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10941         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10942         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
10943         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10944         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
10945         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10946         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
10947         return o;
10948     }
10949 };
10950 
10951 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
10952 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> > {
10953     clmdep_msgpack::object const& operator()(
10954         clmdep_msgpack::object const& o,
10955         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
10956         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10957         if(o.via.array.size < 14) { throw clmdep_msgpack::type_error(); }
10958 
10959         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10960         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10961         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10962         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10963         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10964         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10965         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10966         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10967         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10968         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10969         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10970         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10971         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10972         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10973         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10974         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10975         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10976         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10977         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10978         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10979         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10980         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
10981         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10982         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
10983         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10984         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
10985         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
10986         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
10987         return o;
10988     }
10989 };
10990 
10991 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
10992 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> > {
10993     clmdep_msgpack::object const& operator()(
10994         clmdep_msgpack::object const& o,
10995         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
10996         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
10997         if(o.via.array.size < 15) { throw clmdep_msgpack::type_error(); }
10998 
10999         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11000         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11001         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11002         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11003         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11004         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11005         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11006         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11007         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11008         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11009         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11010         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11011         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11012         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11013         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11014         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11015         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11016         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11017         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11018         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11019         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11020         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11021         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11022         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11023         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11024         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11025         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11026         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11027         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11028         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11029         return o;
11030     }
11031 };
11032 
11033 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
11034 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> > {
11035     clmdep_msgpack::object const& operator()(
11036         clmdep_msgpack::object const& o,
11037         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
11038         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11039         if(o.via.array.size < 16) { throw clmdep_msgpack::type_error(); }
11040 
11041         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11042         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11043         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11044         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11045         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11046         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11047         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11048         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11049         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11050         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11051         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11052         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11053         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11054         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11055         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11056         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11057         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11058         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11059         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11060         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11061         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11062         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11063         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11064         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11065         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11066         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11067         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11068         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11069         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11070         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11071         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11072         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11073         return o;
11074     }
11075 };
11076 
11077 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
11078 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> > {
11079     clmdep_msgpack::object const& operator()(
11080         clmdep_msgpack::object const& o,
11081         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
11082         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11083         if(o.via.array.size < 17) { throw clmdep_msgpack::type_error(); }
11084 
11085         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11086         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11087         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11088         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11089         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11090         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11091         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11092         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11093         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11094         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11095         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11096         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11097         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11098         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11099         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11100         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11101         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11102         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11103         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11104         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11105         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11106         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11107         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11108         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11109         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11110         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11111         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11112         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11113         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11114         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11115         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11116         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11117         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11118         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11119         return o;
11120     }
11121 };
11122 
11123 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
11124 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> > {
11125     clmdep_msgpack::object const& operator()(
11126         clmdep_msgpack::object const& o,
11127         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
11128         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11129         if(o.via.array.size < 18) { throw clmdep_msgpack::type_error(); }
11130 
11131         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11132         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11133         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11134         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11135         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11136         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11137         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11138         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11139         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11140         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11141         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11142         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11143         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11144         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11145         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11146         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11147         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11148         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11149         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11150         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11151         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11152         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11153         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11154         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11155         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11156         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11157         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11158         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11159         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11160         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11161         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11162         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11163         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11164         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11165         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11166         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11167         return o;
11168     }
11169 };
11170 
11171 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
11172 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> > {
11173     clmdep_msgpack::object const& operator()(
11174         clmdep_msgpack::object const& o,
11175         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
11176         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11177         if(o.via.array.size < 19) { throw clmdep_msgpack::type_error(); }
11178 
11179         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11180         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11181         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11182         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11183         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11184         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11185         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11186         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11187         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11188         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11189         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11190         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11191         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11192         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11193         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11194         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11195         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11196         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11197         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11198         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11199         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11200         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11201         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11202         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11203         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11204         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11205         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11206         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11207         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11208         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11209         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11210         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11211         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11212         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11213         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11214         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11215         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11216         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11217         return o;
11218     }
11219 };
11220 
11221 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
11222 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> > {
11223     clmdep_msgpack::object const& operator()(
11224         clmdep_msgpack::object const& o,
11225         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& v) const {
11226         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11227         if(o.via.array.size < 20) { throw clmdep_msgpack::type_error(); }
11228 
11229         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11230         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11231         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11232         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11233         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11234         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11235         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11236         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11237         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11238         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11239         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11240         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11241         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11242         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11243         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11244         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11245         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11246         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11247         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11248         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11249         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11250         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11251         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11252         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11253         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11254         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11255         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11256         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11257         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11258         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11259         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11260         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11261         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11262         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11263         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11264         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11265         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11266         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11267         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11268         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11269         return o;
11270     }
11271 };
11272 
11273 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
11274 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> > {
11275     clmdep_msgpack::object const& operator()(
11276         clmdep_msgpack::object const& o,
11277         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& v) const {
11278         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11279         if(o.via.array.size < 21) { throw clmdep_msgpack::type_error(); }
11280 
11281         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11282         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11283         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11284         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11285         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11286         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11287         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11288         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11289         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11290         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11291         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11292         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11293         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11294         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11295         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11296         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11297         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11298         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11299         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11300         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11301         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11302         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11303         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11304         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11305         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11306         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11307         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11308         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11309         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11310         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11311         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11312         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11313         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11314         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11315         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11316         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11317         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11318         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11319         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11320         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11321         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11322         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11323         return o;
11324     }
11325 };
11326 
11327 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
11328 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> > {
11329     clmdep_msgpack::object const& operator()(
11330         clmdep_msgpack::object const& o,
11331         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& v) const {
11332         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11333         if(o.via.array.size < 22) { throw clmdep_msgpack::type_error(); }
11334 
11335         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11336         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11337         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11338         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11339         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11340         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11341         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11342         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11343         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11344         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11345         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11346         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11347         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11348         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11349         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11350         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11351         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11352         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11353         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11354         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11355         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11356         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11357         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11358         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11359         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11360         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11361         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11362         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11363         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11364         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11365         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11366         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11367         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11368         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11369         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11370         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11371         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11372         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11373         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11374         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11375         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11376         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11377         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11378         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11379         return o;
11380     }
11381 };
11382 
11383 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
11384 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> > {
11385     clmdep_msgpack::object const& operator()(
11386         clmdep_msgpack::object const& o,
11387         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& v) const {
11388         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11389         if(o.via.array.size < 23) { throw clmdep_msgpack::type_error(); }
11390 
11391         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11392         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11393         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11394         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11395         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11396         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11397         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11398         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11399         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11400         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11401         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11402         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11403         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11404         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11405         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11406         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11407         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11408         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11409         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11410         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11411         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11412         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11413         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11414         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11415         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11416         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11417         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11418         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11419         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11420         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11421         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11422         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11423         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11424         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11425         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11426         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11427         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11428         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11429         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11430         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11431         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11432         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11433         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11434         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11435         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11436         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11437         return o;
11438     }
11439 };
11440 
11441 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
11442 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> > {
11443     clmdep_msgpack::object const& operator()(
11444         clmdep_msgpack::object const& o,
11445         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& v) const {
11446         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11447         if(o.via.array.size < 24) { throw clmdep_msgpack::type_error(); }
11448 
11449         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11450         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11451         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11452         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11453         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11454         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11455         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11456         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11457         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11458         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11459         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11460         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11461         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11462         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11463         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11464         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11465         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11466         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11467         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11468         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11469         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11470         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11471         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11472         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11473         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11474         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11475         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11476         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11477         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11478         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11479         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11480         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11481         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11482         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11483         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11484         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11485         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11486         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11487         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11488         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11489         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11490         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11491         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11492         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11493         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11494         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11495         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11496         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11497         return o;
11498     }
11499 };
11500 
11501 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
11502 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> > {
11503     clmdep_msgpack::object const& operator()(
11504         clmdep_msgpack::object const& o,
11505         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& v) const {
11506         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11507         if(o.via.array.size < 25) { throw clmdep_msgpack::type_error(); }
11508 
11509         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11510         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11511         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11512         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11513         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11514         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11515         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11516         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11517         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11518         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11519         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11520         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11521         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11522         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11523         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11524         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11525         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11526         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11527         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11528         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11529         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11530         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11531         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11532         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11533         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11534         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11535         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11536         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11537         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11538         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11539         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11540         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11541         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11542         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11543         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11544         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11545         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11546         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11547         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11548         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11549         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11550         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11551         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11552         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11553         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11554         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11555         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11556         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11557         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11558         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11559         return o;
11560     }
11561 };
11562 
11563 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
11564 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> > {
11565     clmdep_msgpack::object const& operator()(
11566         clmdep_msgpack::object const& o,
11567         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& v) const {
11568         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11569         if(o.via.array.size < 26) { throw clmdep_msgpack::type_error(); }
11570 
11571         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11572         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11573         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11574         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11575         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11576         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11577         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11578         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11579         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11580         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11581         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11582         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11583         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11584         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11585         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11586         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11587         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11588         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11589         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11590         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11591         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11592         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11593         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11594         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11595         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11596         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11597         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11598         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11599         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11600         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11601         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11602         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11603         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11604         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11605         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11606         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11607         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11608         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11609         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11610         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11611         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11612         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11613         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11614         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11615         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11616         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11617         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11618         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11619         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11620         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11621         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11622         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11623         return o;
11624     }
11625 };
11626 
11627 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
11628 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> > {
11629     clmdep_msgpack::object const& operator()(
11630         clmdep_msgpack::object const& o,
11631         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& v) const {
11632         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11633         if(o.via.array.size < 27) { throw clmdep_msgpack::type_error(); }
11634 
11635         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11636         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11637         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11638         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11639         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11640         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11641         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11642         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11643         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11644         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11645         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11646         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11647         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11648         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11649         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11650         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11651         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11652         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11653         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11654         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11655         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11656         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11657         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11658         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11659         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11660         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11661         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11662         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11663         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11664         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11665         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11666         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11667         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11668         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11669         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11670         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11671         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11672         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11673         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11674         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11675         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11676         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11677         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11678         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11679         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11680         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11681         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11682         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11683         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11684         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11685         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11686         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11687         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11688         o.via.array.ptr[26].clmdep_msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
11689         return o;
11690     }
11691 };
11692 
11693 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
11694 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> > {
11695     clmdep_msgpack::object const& operator()(
11696         clmdep_msgpack::object const& o,
11697         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& v) const {
11698         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11699         if(o.via.array.size < 28) { throw clmdep_msgpack::type_error(); }
11700 
11701         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11702         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11703         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11704         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11705         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11706         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11707         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11708         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11709         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11710         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11711         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11712         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11713         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11714         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11715         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11716         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11717         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11718         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11719         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11720         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11721         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11722         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11723         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11724         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11725         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11726         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11727         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11728         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11729         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11730         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11731         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11732         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11733         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11734         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11735         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11736         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11737         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11738         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11739         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11740         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11741         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11742         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11743         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11744         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11745         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11746         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11747         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11748         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11749         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11750         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11751         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11752         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11753         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11754         o.via.array.ptr[26].clmdep_msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
11755         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11756         o.via.array.ptr[27].clmdep_msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
11757         return o;
11758     }
11759 };
11760 
11761 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
11762 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> > {
11763     clmdep_msgpack::object const& operator()(
11764         clmdep_msgpack::object const& o,
11765         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& v) const {
11766         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11767         if(o.via.array.size < 29) { throw clmdep_msgpack::type_error(); }
11768 
11769         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11770         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11771         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11772         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11773         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11774         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11775         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11776         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11777         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11778         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11779         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11780         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11781         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11782         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11783         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11784         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11785         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11786         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11787         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11788         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11789         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11790         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11791         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11792         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11793         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11794         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11795         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11796         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11797         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11798         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11799         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11800         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11801         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11802         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11803         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11804         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11805         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11806         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11807         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11808         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11809         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11810         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11811         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11812         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11813         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11814         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11815         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11816         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11817         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11818         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11819         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11820         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11821         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11822         o.via.array.ptr[26].clmdep_msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
11823         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11824         o.via.array.ptr[27].clmdep_msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
11825         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11826         o.via.array.ptr[28].clmdep_msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
11827         return o;
11828     }
11829 };
11830 
11831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
11832 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> > {
11833     clmdep_msgpack::object const& operator()(
11834         clmdep_msgpack::object const& o,
11835         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& v) const {
11836         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11837         if(o.via.array.size < 30) { throw clmdep_msgpack::type_error(); }
11838 
11839         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11840         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11841         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11842         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11843         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11844         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11845         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11846         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11847         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11848         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11849         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11850         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11851         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11852         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11853         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11854         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11855         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11856         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11857         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11858         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11859         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11860         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11861         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11862         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11863         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11864         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11865         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11866         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11867         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11868         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11869         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11870         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11871         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11872         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11873         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11874         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11875         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11876         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11877         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11878         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11879         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11880         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11881         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11882         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11883         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11884         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11885         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11886         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11887         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11888         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11889         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11890         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11891         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11892         o.via.array.ptr[26].clmdep_msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
11893         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11894         o.via.array.ptr[27].clmdep_msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
11895         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11896         o.via.array.ptr[28].clmdep_msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
11897         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11898         o.via.array.ptr[29].clmdep_msgpack::object::convert<typename type::tuple_type<A29>::type>(v.template get<29>());
11899         return o;
11900     }
11901 };
11902 
11903 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
11904 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> > {
11905     clmdep_msgpack::object const& operator()(
11906         clmdep_msgpack::object const& o,
11907         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& v) const {
11908         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11909         if(o.via.array.size < 31) { throw clmdep_msgpack::type_error(); }
11910 
11911         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11912         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11913         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11914         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11915         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11916         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11917         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11918         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11919         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11920         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11921         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11922         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11923         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11924         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11925         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11926         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11927         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11928         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11929         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11930         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11931         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11932         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11933         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11934         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11935         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11936         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11937         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11938         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11939         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11940         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11941         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11942         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11943         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11944         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11945         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11946         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11947         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11948         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11949         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11950         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11951         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11952         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11953         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11954         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11955         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11956         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11957         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11958         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11959         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11960         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11961         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11962         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11963         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11964         o.via.array.ptr[26].clmdep_msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
11965         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11966         o.via.array.ptr[27].clmdep_msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
11967         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11968         o.via.array.ptr[28].clmdep_msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
11969         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11970         o.via.array.ptr[29].clmdep_msgpack::object::convert<typename type::tuple_type<A29>::type>(v.template get<29>());
11971         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11972         o.via.array.ptr[30].clmdep_msgpack::object::convert<typename type::tuple_type<A30>::type>(v.template get<30>());
11973         return o;
11974     }
11975 };
11976 
11977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
11978 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> > {
11979     clmdep_msgpack::object const& operator()(
11980         clmdep_msgpack::object const& o,
11981         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& v) const {
11982         if(o.type != clmdep_msgpack::type::ARRAY) { throw clmdep_msgpack::type_error(); }
11983         if(o.via.array.size < 32) { throw clmdep_msgpack::type_error(); }
11984 
11985         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11986         o.via.array.ptr[0].clmdep_msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11987         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11988         o.via.array.ptr[1].clmdep_msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11989         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11990         o.via.array.ptr[2].clmdep_msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11991         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11992         o.via.array.ptr[3].clmdep_msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11993         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11994         o.via.array.ptr[4].clmdep_msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11995         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11996         o.via.array.ptr[5].clmdep_msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11997         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
11998         o.via.array.ptr[6].clmdep_msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11999         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12000         o.via.array.ptr[7].clmdep_msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
12001         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12002         o.via.array.ptr[8].clmdep_msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
12003         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12004         o.via.array.ptr[9].clmdep_msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12005         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12006         o.via.array.ptr[10].clmdep_msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12007         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12008         o.via.array.ptr[11].clmdep_msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12009         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12010         o.via.array.ptr[12].clmdep_msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12011         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12012         o.via.array.ptr[13].clmdep_msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12013         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12014         o.via.array.ptr[14].clmdep_msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12015         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12016         o.via.array.ptr[15].clmdep_msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12017         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12018         o.via.array.ptr[16].clmdep_msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12019         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12020         o.via.array.ptr[17].clmdep_msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12021         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12022         o.via.array.ptr[18].clmdep_msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12023         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12024         o.via.array.ptr[19].clmdep_msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12025         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12026         o.via.array.ptr[20].clmdep_msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12027         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12028         o.via.array.ptr[21].clmdep_msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12029         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12030         o.via.array.ptr[22].clmdep_msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12031         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12032         o.via.array.ptr[23].clmdep_msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12033         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12034         o.via.array.ptr[24].clmdep_msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12035         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12036         o.via.array.ptr[25].clmdep_msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12037         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12038         o.via.array.ptr[26].clmdep_msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12039         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12040         o.via.array.ptr[27].clmdep_msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
12041         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12042         o.via.array.ptr[28].clmdep_msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
12043         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12044         o.via.array.ptr[29].clmdep_msgpack::object::convert<typename type::tuple_type<A29>::type>(v.template get<29>());
12045         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12046         o.via.array.ptr[30].clmdep_msgpack::object::convert<typename type::tuple_type<A30>::type>(v.template get<30>());
12047         // In order to avoid clang++'s invalid warning, clmdep_msgpack::object:: has been added.
12048         o.via.array.ptr[31].clmdep_msgpack::object::convert<typename type::tuple_type<A31>::type>(v.template get<31>());
12049         return o;
12050     }
12051 };
12052 
12053 /// @endcond
12054 
12055 template <>
12056 struct pack<type::tuple<> > {
12057     template <typename Stream>
12058     clmdep_msgpack::packer<Stream>& operator()(
12059         clmdep_msgpack::packer<Stream>& o,
12060         const type::tuple<>&) const {
12061         o.pack_array(0);
12062         return o;
12063     }
12064 };
12065 
12066 /// @cond
12067 
12068 template <typename A0>
12069 struct pack<type::tuple<A0> > {
12070     template <typename Stream>
12071     clmdep_msgpack::packer<Stream>& operator()(
12072         clmdep_msgpack::packer<Stream>& o,
12073         const type::tuple<A0>& v) const {
12074         o.pack_array(1);
12075 
12076         o.pack(v.template get<0>());
12077         return o;
12078     }
12079 };
12080 
12081 template <typename A0, typename A1>
12082 struct pack<type::tuple<A0, A1> > {
12083     template <typename Stream>
12084     clmdep_msgpack::packer<Stream>& operator()(
12085         clmdep_msgpack::packer<Stream>& o,
12086         const type::tuple<A0, A1>& v) const {
12087         o.pack_array(2);
12088 
12089         o.pack(v.template get<0>());
12090         o.pack(v.template get<1>());
12091         return o;
12092     }
12093 };
12094 
12095 template <typename A0, typename A1, typename A2>
12096 struct pack<type::tuple<A0, A1, A2> > {
12097     template <typename Stream>
12098     clmdep_msgpack::packer<Stream>& operator()(
12099         clmdep_msgpack::packer<Stream>& o,
12100         const type::tuple<A0, A1, A2>& v) const {
12101         o.pack_array(3);
12102 
12103         o.pack(v.template get<0>());
12104         o.pack(v.template get<1>());
12105         o.pack(v.template get<2>());
12106         return o;
12107     }
12108 };
12109 
12110 template <typename A0, typename A1, typename A2, typename A3>
12111 struct pack<type::tuple<A0, A1, A2, A3> > {
12112     template <typename Stream>
12113     clmdep_msgpack::packer<Stream>& operator()(
12114         clmdep_msgpack::packer<Stream>& o,
12115         const type::tuple<A0, A1, A2, A3>& v) const {
12116         o.pack_array(4);
12117 
12118         o.pack(v.template get<0>());
12119         o.pack(v.template get<1>());
12120         o.pack(v.template get<2>());
12121         o.pack(v.template get<3>());
12122         return o;
12123     }
12124 };
12125 
12126 template <typename A0, typename A1, typename A2, typename A3, typename A4>
12127 struct pack<type::tuple<A0, A1, A2, A3, A4> > {
12128     template <typename Stream>
12129     clmdep_msgpack::packer<Stream>& operator()(
12130         clmdep_msgpack::packer<Stream>& o,
12131         const type::tuple<A0, A1, A2, A3, A4>& v) const {
12132         o.pack_array(5);
12133 
12134         o.pack(v.template get<0>());
12135         o.pack(v.template get<1>());
12136         o.pack(v.template get<2>());
12137         o.pack(v.template get<3>());
12138         o.pack(v.template get<4>());
12139         return o;
12140     }
12141 };
12142 
12143 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
12144 struct pack<type::tuple<A0, A1, A2, A3, A4, A5> > {
12145     template <typename Stream>
12146     clmdep_msgpack::packer<Stream>& operator()(
12147         clmdep_msgpack::packer<Stream>& o,
12148         const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
12149         o.pack_array(6);
12150 
12151         o.pack(v.template get<0>());
12152         o.pack(v.template get<1>());
12153         o.pack(v.template get<2>());
12154         o.pack(v.template get<3>());
12155         o.pack(v.template get<4>());
12156         o.pack(v.template get<5>());
12157         return o;
12158     }
12159 };
12160 
12161 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
12162 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
12163     template <typename Stream>
12164     clmdep_msgpack::packer<Stream>& operator()(
12165         clmdep_msgpack::packer<Stream>& o,
12166         const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
12167         o.pack_array(7);
12168 
12169         o.pack(v.template get<0>());
12170         o.pack(v.template get<1>());
12171         o.pack(v.template get<2>());
12172         o.pack(v.template get<3>());
12173         o.pack(v.template get<4>());
12174         o.pack(v.template get<5>());
12175         o.pack(v.template get<6>());
12176         return o;
12177     }
12178 };
12179 
12180 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
12181 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
12182     template <typename Stream>
12183     clmdep_msgpack::packer<Stream>& operator()(
12184         clmdep_msgpack::packer<Stream>& o,
12185         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
12186         o.pack_array(8);
12187 
12188         o.pack(v.template get<0>());
12189         o.pack(v.template get<1>());
12190         o.pack(v.template get<2>());
12191         o.pack(v.template get<3>());
12192         o.pack(v.template get<4>());
12193         o.pack(v.template get<5>());
12194         o.pack(v.template get<6>());
12195         o.pack(v.template get<7>());
12196         return o;
12197     }
12198 };
12199 
12200 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
12201 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
12202     template <typename Stream>
12203     clmdep_msgpack::packer<Stream>& operator()(
12204         clmdep_msgpack::packer<Stream>& o,
12205         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
12206         o.pack_array(9);
12207 
12208         o.pack(v.template get<0>());
12209         o.pack(v.template get<1>());
12210         o.pack(v.template get<2>());
12211         o.pack(v.template get<3>());
12212         o.pack(v.template get<4>());
12213         o.pack(v.template get<5>());
12214         o.pack(v.template get<6>());
12215         o.pack(v.template get<7>());
12216         o.pack(v.template get<8>());
12217         return o;
12218     }
12219 };
12220 
12221 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
12222 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
12223     template <typename Stream>
12224     clmdep_msgpack::packer<Stream>& operator()(
12225         clmdep_msgpack::packer<Stream>& o,
12226         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
12227         o.pack_array(10);
12228 
12229         o.pack(v.template get<0>());
12230         o.pack(v.template get<1>());
12231         o.pack(v.template get<2>());
12232         o.pack(v.template get<3>());
12233         o.pack(v.template get<4>());
12234         o.pack(v.template get<5>());
12235         o.pack(v.template get<6>());
12236         o.pack(v.template get<7>());
12237         o.pack(v.template get<8>());
12238         o.pack(v.template get<9>());
12239         return o;
12240     }
12241 };
12242 
12243 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
12244 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> > {
12245     template <typename Stream>
12246     clmdep_msgpack::packer<Stream>& operator()(
12247         clmdep_msgpack::packer<Stream>& o,
12248         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
12249         o.pack_array(11);
12250 
12251         o.pack(v.template get<0>());
12252         o.pack(v.template get<1>());
12253         o.pack(v.template get<2>());
12254         o.pack(v.template get<3>());
12255         o.pack(v.template get<4>());
12256         o.pack(v.template get<5>());
12257         o.pack(v.template get<6>());
12258         o.pack(v.template get<7>());
12259         o.pack(v.template get<8>());
12260         o.pack(v.template get<9>());
12261         o.pack(v.template get<10>());
12262         return o;
12263     }
12264 };
12265 
12266 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
12267 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> > {
12268     template <typename Stream>
12269     clmdep_msgpack::packer<Stream>& operator()(
12270         clmdep_msgpack::packer<Stream>& o,
12271         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
12272         o.pack_array(12);
12273 
12274         o.pack(v.template get<0>());
12275         o.pack(v.template get<1>());
12276         o.pack(v.template get<2>());
12277         o.pack(v.template get<3>());
12278         o.pack(v.template get<4>());
12279         o.pack(v.template get<5>());
12280         o.pack(v.template get<6>());
12281         o.pack(v.template get<7>());
12282         o.pack(v.template get<8>());
12283         o.pack(v.template get<9>());
12284         o.pack(v.template get<10>());
12285         o.pack(v.template get<11>());
12286         return o;
12287     }
12288 };
12289 
12290 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
12291 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> > {
12292     template <typename Stream>
12293     clmdep_msgpack::packer<Stream>& operator()(
12294         clmdep_msgpack::packer<Stream>& o,
12295         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
12296         o.pack_array(13);
12297 
12298         o.pack(v.template get<0>());
12299         o.pack(v.template get<1>());
12300         o.pack(v.template get<2>());
12301         o.pack(v.template get<3>());
12302         o.pack(v.template get<4>());
12303         o.pack(v.template get<5>());
12304         o.pack(v.template get<6>());
12305         o.pack(v.template get<7>());
12306         o.pack(v.template get<8>());
12307         o.pack(v.template get<9>());
12308         o.pack(v.template get<10>());
12309         o.pack(v.template get<11>());
12310         o.pack(v.template get<12>());
12311         return o;
12312     }
12313 };
12314 
12315 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
12316 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> > {
12317     template <typename Stream>
12318     clmdep_msgpack::packer<Stream>& operator()(
12319         clmdep_msgpack::packer<Stream>& o,
12320         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
12321         o.pack_array(14);
12322 
12323         o.pack(v.template get<0>());
12324         o.pack(v.template get<1>());
12325         o.pack(v.template get<2>());
12326         o.pack(v.template get<3>());
12327         o.pack(v.template get<4>());
12328         o.pack(v.template get<5>());
12329         o.pack(v.template get<6>());
12330         o.pack(v.template get<7>());
12331         o.pack(v.template get<8>());
12332         o.pack(v.template get<9>());
12333         o.pack(v.template get<10>());
12334         o.pack(v.template get<11>());
12335         o.pack(v.template get<12>());
12336         o.pack(v.template get<13>());
12337         return o;
12338     }
12339 };
12340 
12341 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
12342 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> > {
12343     template <typename Stream>
12344     clmdep_msgpack::packer<Stream>& operator()(
12345         clmdep_msgpack::packer<Stream>& o,
12346         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
12347         o.pack_array(15);
12348 
12349         o.pack(v.template get<0>());
12350         o.pack(v.template get<1>());
12351         o.pack(v.template get<2>());
12352         o.pack(v.template get<3>());
12353         o.pack(v.template get<4>());
12354         o.pack(v.template get<5>());
12355         o.pack(v.template get<6>());
12356         o.pack(v.template get<7>());
12357         o.pack(v.template get<8>());
12358         o.pack(v.template get<9>());
12359         o.pack(v.template get<10>());
12360         o.pack(v.template get<11>());
12361         o.pack(v.template get<12>());
12362         o.pack(v.template get<13>());
12363         o.pack(v.template get<14>());
12364         return o;
12365     }
12366 };
12367 
12368 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
12369 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> > {
12370     template <typename Stream>
12371     clmdep_msgpack::packer<Stream>& operator()(
12372         clmdep_msgpack::packer<Stream>& o,
12373         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
12374         o.pack_array(16);
12375 
12376         o.pack(v.template get<0>());
12377         o.pack(v.template get<1>());
12378         o.pack(v.template get<2>());
12379         o.pack(v.template get<3>());
12380         o.pack(v.template get<4>());
12381         o.pack(v.template get<5>());
12382         o.pack(v.template get<6>());
12383         o.pack(v.template get<7>());
12384         o.pack(v.template get<8>());
12385         o.pack(v.template get<9>());
12386         o.pack(v.template get<10>());
12387         o.pack(v.template get<11>());
12388         o.pack(v.template get<12>());
12389         o.pack(v.template get<13>());
12390         o.pack(v.template get<14>());
12391         o.pack(v.template get<15>());
12392         return o;
12393     }
12394 };
12395 
12396 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
12397 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> > {
12398     template <typename Stream>
12399     clmdep_msgpack::packer<Stream>& operator()(
12400         clmdep_msgpack::packer<Stream>& o,
12401         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
12402         o.pack_array(17);
12403 
12404         o.pack(v.template get<0>());
12405         o.pack(v.template get<1>());
12406         o.pack(v.template get<2>());
12407         o.pack(v.template get<3>());
12408         o.pack(v.template get<4>());
12409         o.pack(v.template get<5>());
12410         o.pack(v.template get<6>());
12411         o.pack(v.template get<7>());
12412         o.pack(v.template get<8>());
12413         o.pack(v.template get<9>());
12414         o.pack(v.template get<10>());
12415         o.pack(v.template get<11>());
12416         o.pack(v.template get<12>());
12417         o.pack(v.template get<13>());
12418         o.pack(v.template get<14>());
12419         o.pack(v.template get<15>());
12420         o.pack(v.template get<16>());
12421         return o;
12422     }
12423 };
12424 
12425 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
12426 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> > {
12427     template <typename Stream>
12428     clmdep_msgpack::packer<Stream>& operator()(
12429         clmdep_msgpack::packer<Stream>& o,
12430         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
12431         o.pack_array(18);
12432 
12433         o.pack(v.template get<0>());
12434         o.pack(v.template get<1>());
12435         o.pack(v.template get<2>());
12436         o.pack(v.template get<3>());
12437         o.pack(v.template get<4>());
12438         o.pack(v.template get<5>());
12439         o.pack(v.template get<6>());
12440         o.pack(v.template get<7>());
12441         o.pack(v.template get<8>());
12442         o.pack(v.template get<9>());
12443         o.pack(v.template get<10>());
12444         o.pack(v.template get<11>());
12445         o.pack(v.template get<12>());
12446         o.pack(v.template get<13>());
12447         o.pack(v.template get<14>());
12448         o.pack(v.template get<15>());
12449         o.pack(v.template get<16>());
12450         o.pack(v.template get<17>());
12451         return o;
12452     }
12453 };
12454 
12455 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
12456 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> > {
12457     template <typename Stream>
12458     clmdep_msgpack::packer<Stream>& operator()(
12459         clmdep_msgpack::packer<Stream>& o,
12460         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
12461         o.pack_array(19);
12462 
12463         o.pack(v.template get<0>());
12464         o.pack(v.template get<1>());
12465         o.pack(v.template get<2>());
12466         o.pack(v.template get<3>());
12467         o.pack(v.template get<4>());
12468         o.pack(v.template get<5>());
12469         o.pack(v.template get<6>());
12470         o.pack(v.template get<7>());
12471         o.pack(v.template get<8>());
12472         o.pack(v.template get<9>());
12473         o.pack(v.template get<10>());
12474         o.pack(v.template get<11>());
12475         o.pack(v.template get<12>());
12476         o.pack(v.template get<13>());
12477         o.pack(v.template get<14>());
12478         o.pack(v.template get<15>());
12479         o.pack(v.template get<16>());
12480         o.pack(v.template get<17>());
12481         o.pack(v.template get<18>());
12482         return o;
12483     }
12484 };
12485 
12486 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
12487 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> > {
12488     template <typename Stream>
12489     clmdep_msgpack::packer<Stream>& operator()(
12490         clmdep_msgpack::packer<Stream>& o,
12491         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& v) const {
12492         o.pack_array(20);
12493 
12494         o.pack(v.template get<0>());
12495         o.pack(v.template get<1>());
12496         o.pack(v.template get<2>());
12497         o.pack(v.template get<3>());
12498         o.pack(v.template get<4>());
12499         o.pack(v.template get<5>());
12500         o.pack(v.template get<6>());
12501         o.pack(v.template get<7>());
12502         o.pack(v.template get<8>());
12503         o.pack(v.template get<9>());
12504         o.pack(v.template get<10>());
12505         o.pack(v.template get<11>());
12506         o.pack(v.template get<12>());
12507         o.pack(v.template get<13>());
12508         o.pack(v.template get<14>());
12509         o.pack(v.template get<15>());
12510         o.pack(v.template get<16>());
12511         o.pack(v.template get<17>());
12512         o.pack(v.template get<18>());
12513         o.pack(v.template get<19>());
12514         return o;
12515     }
12516 };
12517 
12518 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
12519 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> > {
12520     template <typename Stream>
12521     clmdep_msgpack::packer<Stream>& operator()(
12522         clmdep_msgpack::packer<Stream>& o,
12523         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& v) const {
12524         o.pack_array(21);
12525 
12526         o.pack(v.template get<0>());
12527         o.pack(v.template get<1>());
12528         o.pack(v.template get<2>());
12529         o.pack(v.template get<3>());
12530         o.pack(v.template get<4>());
12531         o.pack(v.template get<5>());
12532         o.pack(v.template get<6>());
12533         o.pack(v.template get<7>());
12534         o.pack(v.template get<8>());
12535         o.pack(v.template get<9>());
12536         o.pack(v.template get<10>());
12537         o.pack(v.template get<11>());
12538         o.pack(v.template get<12>());
12539         o.pack(v.template get<13>());
12540         o.pack(v.template get<14>());
12541         o.pack(v.template get<15>());
12542         o.pack(v.template get<16>());
12543         o.pack(v.template get<17>());
12544         o.pack(v.template get<18>());
12545         o.pack(v.template get<19>());
12546         o.pack(v.template get<20>());
12547         return o;
12548     }
12549 };
12550 
12551 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
12552 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> > {
12553     template <typename Stream>
12554     clmdep_msgpack::packer<Stream>& operator()(
12555         clmdep_msgpack::packer<Stream>& o,
12556         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& v) const {
12557         o.pack_array(22);
12558 
12559         o.pack(v.template get<0>());
12560         o.pack(v.template get<1>());
12561         o.pack(v.template get<2>());
12562         o.pack(v.template get<3>());
12563         o.pack(v.template get<4>());
12564         o.pack(v.template get<5>());
12565         o.pack(v.template get<6>());
12566         o.pack(v.template get<7>());
12567         o.pack(v.template get<8>());
12568         o.pack(v.template get<9>());
12569         o.pack(v.template get<10>());
12570         o.pack(v.template get<11>());
12571         o.pack(v.template get<12>());
12572         o.pack(v.template get<13>());
12573         o.pack(v.template get<14>());
12574         o.pack(v.template get<15>());
12575         o.pack(v.template get<16>());
12576         o.pack(v.template get<17>());
12577         o.pack(v.template get<18>());
12578         o.pack(v.template get<19>());
12579         o.pack(v.template get<20>());
12580         o.pack(v.template get<21>());
12581         return o;
12582     }
12583 };
12584 
12585 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
12586 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> > {
12587     template <typename Stream>
12588     clmdep_msgpack::packer<Stream>& operator()(
12589         clmdep_msgpack::packer<Stream>& o,
12590         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& v) const {
12591         o.pack_array(23);
12592 
12593         o.pack(v.template get<0>());
12594         o.pack(v.template get<1>());
12595         o.pack(v.template get<2>());
12596         o.pack(v.template get<3>());
12597         o.pack(v.template get<4>());
12598         o.pack(v.template get<5>());
12599         o.pack(v.template get<6>());
12600         o.pack(v.template get<7>());
12601         o.pack(v.template get<8>());
12602         o.pack(v.template get<9>());
12603         o.pack(v.template get<10>());
12604         o.pack(v.template get<11>());
12605         o.pack(v.template get<12>());
12606         o.pack(v.template get<13>());
12607         o.pack(v.template get<14>());
12608         o.pack(v.template get<15>());
12609         o.pack(v.template get<16>());
12610         o.pack(v.template get<17>());
12611         o.pack(v.template get<18>());
12612         o.pack(v.template get<19>());
12613         o.pack(v.template get<20>());
12614         o.pack(v.template get<21>());
12615         o.pack(v.template get<22>());
12616         return o;
12617     }
12618 };
12619 
12620 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
12621 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> > {
12622     template <typename Stream>
12623     clmdep_msgpack::packer<Stream>& operator()(
12624         clmdep_msgpack::packer<Stream>& o,
12625         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& v) const {
12626         o.pack_array(24);
12627 
12628         o.pack(v.template get<0>());
12629         o.pack(v.template get<1>());
12630         o.pack(v.template get<2>());
12631         o.pack(v.template get<3>());
12632         o.pack(v.template get<4>());
12633         o.pack(v.template get<5>());
12634         o.pack(v.template get<6>());
12635         o.pack(v.template get<7>());
12636         o.pack(v.template get<8>());
12637         o.pack(v.template get<9>());
12638         o.pack(v.template get<10>());
12639         o.pack(v.template get<11>());
12640         o.pack(v.template get<12>());
12641         o.pack(v.template get<13>());
12642         o.pack(v.template get<14>());
12643         o.pack(v.template get<15>());
12644         o.pack(v.template get<16>());
12645         o.pack(v.template get<17>());
12646         o.pack(v.template get<18>());
12647         o.pack(v.template get<19>());
12648         o.pack(v.template get<20>());
12649         o.pack(v.template get<21>());
12650         o.pack(v.template get<22>());
12651         o.pack(v.template get<23>());
12652         return o;
12653     }
12654 };
12655 
12656 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
12657 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> > {
12658     template <typename Stream>
12659     clmdep_msgpack::packer<Stream>& operator()(
12660         clmdep_msgpack::packer<Stream>& o,
12661         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& v) const {
12662         o.pack_array(25);
12663 
12664         o.pack(v.template get<0>());
12665         o.pack(v.template get<1>());
12666         o.pack(v.template get<2>());
12667         o.pack(v.template get<3>());
12668         o.pack(v.template get<4>());
12669         o.pack(v.template get<5>());
12670         o.pack(v.template get<6>());
12671         o.pack(v.template get<7>());
12672         o.pack(v.template get<8>());
12673         o.pack(v.template get<9>());
12674         o.pack(v.template get<10>());
12675         o.pack(v.template get<11>());
12676         o.pack(v.template get<12>());
12677         o.pack(v.template get<13>());
12678         o.pack(v.template get<14>());
12679         o.pack(v.template get<15>());
12680         o.pack(v.template get<16>());
12681         o.pack(v.template get<17>());
12682         o.pack(v.template get<18>());
12683         o.pack(v.template get<19>());
12684         o.pack(v.template get<20>());
12685         o.pack(v.template get<21>());
12686         o.pack(v.template get<22>());
12687         o.pack(v.template get<23>());
12688         o.pack(v.template get<24>());
12689         return o;
12690     }
12691 };
12692 
12693 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
12694 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> > {
12695     template <typename Stream>
12696     clmdep_msgpack::packer<Stream>& operator()(
12697         clmdep_msgpack::packer<Stream>& o,
12698         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& v) const {
12699         o.pack_array(26);
12700 
12701         o.pack(v.template get<0>());
12702         o.pack(v.template get<1>());
12703         o.pack(v.template get<2>());
12704         o.pack(v.template get<3>());
12705         o.pack(v.template get<4>());
12706         o.pack(v.template get<5>());
12707         o.pack(v.template get<6>());
12708         o.pack(v.template get<7>());
12709         o.pack(v.template get<8>());
12710         o.pack(v.template get<9>());
12711         o.pack(v.template get<10>());
12712         o.pack(v.template get<11>());
12713         o.pack(v.template get<12>());
12714         o.pack(v.template get<13>());
12715         o.pack(v.template get<14>());
12716         o.pack(v.template get<15>());
12717         o.pack(v.template get<16>());
12718         o.pack(v.template get<17>());
12719         o.pack(v.template get<18>());
12720         o.pack(v.template get<19>());
12721         o.pack(v.template get<20>());
12722         o.pack(v.template get<21>());
12723         o.pack(v.template get<22>());
12724         o.pack(v.template get<23>());
12725         o.pack(v.template get<24>());
12726         o.pack(v.template get<25>());
12727         return o;
12728     }
12729 };
12730 
12731 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
12732 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> > {
12733     template <typename Stream>
12734     clmdep_msgpack::packer<Stream>& operator()(
12735         clmdep_msgpack::packer<Stream>& o,
12736         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& v) const {
12737         o.pack_array(27);
12738 
12739         o.pack(v.template get<0>());
12740         o.pack(v.template get<1>());
12741         o.pack(v.template get<2>());
12742         o.pack(v.template get<3>());
12743         o.pack(v.template get<4>());
12744         o.pack(v.template get<5>());
12745         o.pack(v.template get<6>());
12746         o.pack(v.template get<7>());
12747         o.pack(v.template get<8>());
12748         o.pack(v.template get<9>());
12749         o.pack(v.template get<10>());
12750         o.pack(v.template get<11>());
12751         o.pack(v.template get<12>());
12752         o.pack(v.template get<13>());
12753         o.pack(v.template get<14>());
12754         o.pack(v.template get<15>());
12755         o.pack(v.template get<16>());
12756         o.pack(v.template get<17>());
12757         o.pack(v.template get<18>());
12758         o.pack(v.template get<19>());
12759         o.pack(v.template get<20>());
12760         o.pack(v.template get<21>());
12761         o.pack(v.template get<22>());
12762         o.pack(v.template get<23>());
12763         o.pack(v.template get<24>());
12764         o.pack(v.template get<25>());
12765         o.pack(v.template get<26>());
12766         return o;
12767     }
12768 };
12769 
12770 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
12771 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> > {
12772     template <typename Stream>
12773     clmdep_msgpack::packer<Stream>& operator()(
12774         clmdep_msgpack::packer<Stream>& o,
12775         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& v) const {
12776         o.pack_array(28);
12777 
12778         o.pack(v.template get<0>());
12779         o.pack(v.template get<1>());
12780         o.pack(v.template get<2>());
12781         o.pack(v.template get<3>());
12782         o.pack(v.template get<4>());
12783         o.pack(v.template get<5>());
12784         o.pack(v.template get<6>());
12785         o.pack(v.template get<7>());
12786         o.pack(v.template get<8>());
12787         o.pack(v.template get<9>());
12788         o.pack(v.template get<10>());
12789         o.pack(v.template get<11>());
12790         o.pack(v.template get<12>());
12791         o.pack(v.template get<13>());
12792         o.pack(v.template get<14>());
12793         o.pack(v.template get<15>());
12794         o.pack(v.template get<16>());
12795         o.pack(v.template get<17>());
12796         o.pack(v.template get<18>());
12797         o.pack(v.template get<19>());
12798         o.pack(v.template get<20>());
12799         o.pack(v.template get<21>());
12800         o.pack(v.template get<22>());
12801         o.pack(v.template get<23>());
12802         o.pack(v.template get<24>());
12803         o.pack(v.template get<25>());
12804         o.pack(v.template get<26>());
12805         o.pack(v.template get<27>());
12806         return o;
12807     }
12808 };
12809 
12810 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
12811 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> > {
12812     template <typename Stream>
12813     clmdep_msgpack::packer<Stream>& operator()(
12814         clmdep_msgpack::packer<Stream>& o,
12815         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& v) const {
12816         o.pack_array(29);
12817 
12818         o.pack(v.template get<0>());
12819         o.pack(v.template get<1>());
12820         o.pack(v.template get<2>());
12821         o.pack(v.template get<3>());
12822         o.pack(v.template get<4>());
12823         o.pack(v.template get<5>());
12824         o.pack(v.template get<6>());
12825         o.pack(v.template get<7>());
12826         o.pack(v.template get<8>());
12827         o.pack(v.template get<9>());
12828         o.pack(v.template get<10>());
12829         o.pack(v.template get<11>());
12830         o.pack(v.template get<12>());
12831         o.pack(v.template get<13>());
12832         o.pack(v.template get<14>());
12833         o.pack(v.template get<15>());
12834         o.pack(v.template get<16>());
12835         o.pack(v.template get<17>());
12836         o.pack(v.template get<18>());
12837         o.pack(v.template get<19>());
12838         o.pack(v.template get<20>());
12839         o.pack(v.template get<21>());
12840         o.pack(v.template get<22>());
12841         o.pack(v.template get<23>());
12842         o.pack(v.template get<24>());
12843         o.pack(v.template get<25>());
12844         o.pack(v.template get<26>());
12845         o.pack(v.template get<27>());
12846         o.pack(v.template get<28>());
12847         return o;
12848     }
12849 };
12850 
12851 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
12852 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> > {
12853     template <typename Stream>
12854     clmdep_msgpack::packer<Stream>& operator()(
12855         clmdep_msgpack::packer<Stream>& o,
12856         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& v) const {
12857         o.pack_array(30);
12858 
12859         o.pack(v.template get<0>());
12860         o.pack(v.template get<1>());
12861         o.pack(v.template get<2>());
12862         o.pack(v.template get<3>());
12863         o.pack(v.template get<4>());
12864         o.pack(v.template get<5>());
12865         o.pack(v.template get<6>());
12866         o.pack(v.template get<7>());
12867         o.pack(v.template get<8>());
12868         o.pack(v.template get<9>());
12869         o.pack(v.template get<10>());
12870         o.pack(v.template get<11>());
12871         o.pack(v.template get<12>());
12872         o.pack(v.template get<13>());
12873         o.pack(v.template get<14>());
12874         o.pack(v.template get<15>());
12875         o.pack(v.template get<16>());
12876         o.pack(v.template get<17>());
12877         o.pack(v.template get<18>());
12878         o.pack(v.template get<19>());
12879         o.pack(v.template get<20>());
12880         o.pack(v.template get<21>());
12881         o.pack(v.template get<22>());
12882         o.pack(v.template get<23>());
12883         o.pack(v.template get<24>());
12884         o.pack(v.template get<25>());
12885         o.pack(v.template get<26>());
12886         o.pack(v.template get<27>());
12887         o.pack(v.template get<28>());
12888         o.pack(v.template get<29>());
12889         return o;
12890     }
12891 };
12892 
12893 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
12894 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> > {
12895     template <typename Stream>
12896     clmdep_msgpack::packer<Stream>& operator()(
12897         clmdep_msgpack::packer<Stream>& o,
12898         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& v) const {
12899         o.pack_array(31);
12900 
12901         o.pack(v.template get<0>());
12902         o.pack(v.template get<1>());
12903         o.pack(v.template get<2>());
12904         o.pack(v.template get<3>());
12905         o.pack(v.template get<4>());
12906         o.pack(v.template get<5>());
12907         o.pack(v.template get<6>());
12908         o.pack(v.template get<7>());
12909         o.pack(v.template get<8>());
12910         o.pack(v.template get<9>());
12911         o.pack(v.template get<10>());
12912         o.pack(v.template get<11>());
12913         o.pack(v.template get<12>());
12914         o.pack(v.template get<13>());
12915         o.pack(v.template get<14>());
12916         o.pack(v.template get<15>());
12917         o.pack(v.template get<16>());
12918         o.pack(v.template get<17>());
12919         o.pack(v.template get<18>());
12920         o.pack(v.template get<19>());
12921         o.pack(v.template get<20>());
12922         o.pack(v.template get<21>());
12923         o.pack(v.template get<22>());
12924         o.pack(v.template get<23>());
12925         o.pack(v.template get<24>());
12926         o.pack(v.template get<25>());
12927         o.pack(v.template get<26>());
12928         o.pack(v.template get<27>());
12929         o.pack(v.template get<28>());
12930         o.pack(v.template get<29>());
12931         o.pack(v.template get<30>());
12932         return o;
12933     }
12934 };
12935 
12936 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
12937 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> > {
12938     template <typename Stream>
12939     clmdep_msgpack::packer<Stream>& operator()(
12940         clmdep_msgpack::packer<Stream>& o,
12941         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& v) const {
12942         o.pack_array(32);
12943 
12944         o.pack(v.template get<0>());
12945         o.pack(v.template get<1>());
12946         o.pack(v.template get<2>());
12947         o.pack(v.template get<3>());
12948         o.pack(v.template get<4>());
12949         o.pack(v.template get<5>());
12950         o.pack(v.template get<6>());
12951         o.pack(v.template get<7>());
12952         o.pack(v.template get<8>());
12953         o.pack(v.template get<9>());
12954         o.pack(v.template get<10>());
12955         o.pack(v.template get<11>());
12956         o.pack(v.template get<12>());
12957         o.pack(v.template get<13>());
12958         o.pack(v.template get<14>());
12959         o.pack(v.template get<15>());
12960         o.pack(v.template get<16>());
12961         o.pack(v.template get<17>());
12962         o.pack(v.template get<18>());
12963         o.pack(v.template get<19>());
12964         o.pack(v.template get<20>());
12965         o.pack(v.template get<21>());
12966         o.pack(v.template get<22>());
12967         o.pack(v.template get<23>());
12968         o.pack(v.template get<24>());
12969         o.pack(v.template get<25>());
12970         o.pack(v.template get<26>());
12971         o.pack(v.template get<27>());
12972         o.pack(v.template get<28>());
12973         o.pack(v.template get<29>());
12974         o.pack(v.template get<30>());
12975         o.pack(v.template get<31>());
12976         return o;
12977     }
12978 };
12979 
12980 /// @endcond
12981 
12982 template <>
12983 struct object_with_zone<type::tuple<> > {
12984     void operator()(
12985         clmdep_msgpack::object::with_zone& o,
12986         const type::tuple<>&) const {
12987         o.type = clmdep_msgpack::type::ARRAY;
12988         o.via.array.ptr = nullptr;
12989         o.via.array.size = 0;
12990     }
12991 };
12992 
12993 /// @cond
12994 
12995 template <typename A0>
12996 struct object_with_zone<type::tuple<A0> > {
12997     void operator()(
12998         clmdep_msgpack::object::with_zone& o,
12999         const type::tuple<A0>& v) const {
13000         o.type = clmdep_msgpack::type::ARRAY;
13001         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*1));
13002         o.via.array.size = 1;
13003 
13004         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13005     }
13006 };
13007 
13008 template <typename A0, typename A1>
13009 struct object_with_zone<type::tuple<A0, A1> > {
13010     void operator()(
13011         clmdep_msgpack::object::with_zone& o,
13012         const type::tuple<A0, A1>& v) const {
13013         o.type = clmdep_msgpack::type::ARRAY;
13014         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*2));
13015         o.via.array.size = 2;
13016 
13017         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13018         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13019     }
13020 };
13021 
13022 template <typename A0, typename A1, typename A2>
13023 struct object_with_zone<type::tuple<A0, A1, A2> > {
13024     void operator()(
13025         clmdep_msgpack::object::with_zone& o,
13026         const type::tuple<A0, A1, A2>& v) const {
13027         o.type = clmdep_msgpack::type::ARRAY;
13028         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*3));
13029         o.via.array.size = 3;
13030 
13031         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13032         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13033         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13034     }
13035 };
13036 
13037 template <typename A0, typename A1, typename A2, typename A3>
13038 struct object_with_zone<type::tuple<A0, A1, A2, A3> > {
13039     void operator()(
13040         clmdep_msgpack::object::with_zone& o,
13041         const type::tuple<A0, A1, A2, A3>& v) const {
13042         o.type = clmdep_msgpack::type::ARRAY;
13043         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*4));
13044         o.via.array.size = 4;
13045 
13046         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13047         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13048         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13049         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13050     }
13051 };
13052 
13053 template <typename A0, typename A1, typename A2, typename A3, typename A4>
13054 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4> > {
13055     void operator()(
13056         clmdep_msgpack::object::with_zone& o,
13057         const type::tuple<A0, A1, A2, A3, A4>& v) const {
13058         o.type = clmdep_msgpack::type::ARRAY;
13059         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*5));
13060         o.via.array.size = 5;
13061 
13062         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13063         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13064         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13065         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13066         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13067     }
13068 };
13069 
13070 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
13071 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5> > {
13072     void operator()(
13073         clmdep_msgpack::object::with_zone& o,
13074         const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
13075         o.type = clmdep_msgpack::type::ARRAY;
13076         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*6));
13077         o.via.array.size = 6;
13078 
13079         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13080         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13081         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13082         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13083         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13084         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13085     }
13086 };
13087 
13088 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
13089 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
13090     void operator()(
13091         clmdep_msgpack::object::with_zone& o,
13092         const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
13093         o.type = clmdep_msgpack::type::ARRAY;
13094         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*7));
13095         o.via.array.size = 7;
13096 
13097         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13098         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13099         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13100         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13101         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13102         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13103         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13104     }
13105 };
13106 
13107 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
13108 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
13109     void operator()(
13110         clmdep_msgpack::object::with_zone& o,
13111         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
13112         o.type = clmdep_msgpack::type::ARRAY;
13113         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*8));
13114         o.via.array.size = 8;
13115 
13116         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13117         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13118         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13119         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13120         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13121         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13122         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13123         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13124     }
13125 };
13126 
13127 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
13128 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
13129     void operator()(
13130         clmdep_msgpack::object::with_zone& o,
13131         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
13132         o.type = clmdep_msgpack::type::ARRAY;
13133         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*9));
13134         o.via.array.size = 9;
13135 
13136         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13137         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13138         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13139         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13140         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13141         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13142         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13143         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13144         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13145     }
13146 };
13147 
13148 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
13149 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
13150     void operator()(
13151         clmdep_msgpack::object::with_zone& o,
13152         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
13153         o.type = clmdep_msgpack::type::ARRAY;
13154         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*10));
13155         o.via.array.size = 10;
13156 
13157         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13158         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13159         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13160         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13161         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13162         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13163         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13164         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13165         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13166         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13167     }
13168 };
13169 
13170 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
13171 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> > {
13172     void operator()(
13173         clmdep_msgpack::object::with_zone& o,
13174         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
13175         o.type = clmdep_msgpack::type::ARRAY;
13176         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*11));
13177         o.via.array.size = 11;
13178 
13179         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13180         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13181         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13182         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13183         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13184         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13185         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13186         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13187         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13188         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13189         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13190     }
13191 };
13192 
13193 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
13194 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> > {
13195     void operator()(
13196         clmdep_msgpack::object::with_zone& o,
13197         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
13198         o.type = clmdep_msgpack::type::ARRAY;
13199         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*12));
13200         o.via.array.size = 12;
13201 
13202         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13203         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13204         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13205         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13206         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13207         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13208         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13209         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13210         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13211         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13212         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13213         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13214     }
13215 };
13216 
13217 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
13218 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> > {
13219     void operator()(
13220         clmdep_msgpack::object::with_zone& o,
13221         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
13222         o.type = clmdep_msgpack::type::ARRAY;
13223         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*13));
13224         o.via.array.size = 13;
13225 
13226         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13227         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13228         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13229         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13230         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13231         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13232         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13233         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13234         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13235         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13236         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13237         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13238         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13239     }
13240 };
13241 
13242 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
13243 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> > {
13244     void operator()(
13245         clmdep_msgpack::object::with_zone& o,
13246         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
13247         o.type = clmdep_msgpack::type::ARRAY;
13248         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*14));
13249         o.via.array.size = 14;
13250 
13251         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13252         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13253         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13254         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13255         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13256         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13257         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13258         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13259         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13260         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13261         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13262         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13263         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13264         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13265     }
13266 };
13267 
13268 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
13269 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> > {
13270     void operator()(
13271         clmdep_msgpack::object::with_zone& o,
13272         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
13273         o.type = clmdep_msgpack::type::ARRAY;
13274         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*15));
13275         o.via.array.size = 15;
13276 
13277         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13278         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13279         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13280         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13281         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13282         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13283         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13284         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13285         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13286         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13287         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13288         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13289         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13290         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13291         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13292     }
13293 };
13294 
13295 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
13296 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> > {
13297     void operator()(
13298         clmdep_msgpack::object::with_zone& o,
13299         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
13300         o.type = clmdep_msgpack::type::ARRAY;
13301         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*16));
13302         o.via.array.size = 16;
13303 
13304         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13305         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13306         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13307         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13308         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13309         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13310         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13311         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13312         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13313         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13314         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13315         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13316         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13317         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13318         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13319         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13320     }
13321 };
13322 
13323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
13324 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> > {
13325     void operator()(
13326         clmdep_msgpack::object::with_zone& o,
13327         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
13328         o.type = clmdep_msgpack::type::ARRAY;
13329         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*17));
13330         o.via.array.size = 17;
13331 
13332         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13333         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13334         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13335         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13336         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13337         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13338         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13339         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13340         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13341         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13342         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13343         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13344         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13345         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13346         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13347         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13348         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13349     }
13350 };
13351 
13352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
13353 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> > {
13354     void operator()(
13355         clmdep_msgpack::object::with_zone& o,
13356         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
13357         o.type = clmdep_msgpack::type::ARRAY;
13358         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*18));
13359         o.via.array.size = 18;
13360 
13361         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13362         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13363         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13364         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13365         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13366         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13367         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13368         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13369         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13370         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13371         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13372         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13373         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13374         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13375         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13376         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13377         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13378         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13379     }
13380 };
13381 
13382 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
13383 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> > {
13384     void operator()(
13385         clmdep_msgpack::object::with_zone& o,
13386         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
13387         o.type = clmdep_msgpack::type::ARRAY;
13388         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*19));
13389         o.via.array.size = 19;
13390 
13391         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13392         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13393         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13394         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13395         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13396         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13397         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13398         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13399         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13400         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13401         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13402         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13403         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13404         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13405         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13406         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13407         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13408         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13409         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13410     }
13411 };
13412 
13413 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
13414 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> > {
13415     void operator()(
13416         clmdep_msgpack::object::with_zone& o,
13417         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& v) const {
13418         o.type = clmdep_msgpack::type::ARRAY;
13419         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*20));
13420         o.via.array.size = 20;
13421 
13422         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13423         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13424         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13425         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13426         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13427         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13428         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13429         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13430         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13431         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13432         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13433         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13434         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13435         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13436         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13437         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13438         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13439         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13440         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13441         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13442     }
13443 };
13444 
13445 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
13446 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> > {
13447     void operator()(
13448         clmdep_msgpack::object::with_zone& o,
13449         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& v) const {
13450         o.type = clmdep_msgpack::type::ARRAY;
13451         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*21));
13452         o.via.array.size = 21;
13453 
13454         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13455         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13456         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13457         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13458         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13459         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13460         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13461         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13462         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13463         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13464         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13465         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13466         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13467         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13468         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13469         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13470         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13471         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13472         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13473         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13474         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13475     }
13476 };
13477 
13478 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
13479 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> > {
13480     void operator()(
13481         clmdep_msgpack::object::with_zone& o,
13482         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& v) const {
13483         o.type = clmdep_msgpack::type::ARRAY;
13484         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*22));
13485         o.via.array.size = 22;
13486 
13487         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13488         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13489         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13490         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13491         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13492         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13493         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13494         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13495         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13496         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13497         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13498         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13499         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13500         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13501         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13502         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13503         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13504         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13505         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13506         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13507         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13508         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13509     }
13510 };
13511 
13512 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
13513 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> > {
13514     void operator()(
13515         clmdep_msgpack::object::with_zone& o,
13516         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& v) const {
13517         o.type = clmdep_msgpack::type::ARRAY;
13518         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*23));
13519         o.via.array.size = 23;
13520 
13521         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13522         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13523         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13524         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13525         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13526         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13527         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13528         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13529         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13530         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13531         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13532         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13533         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13534         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13535         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13536         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13537         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13538         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13539         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13540         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13541         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13542         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13543         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13544     }
13545 };
13546 
13547 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
13548 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> > {
13549     void operator()(
13550         clmdep_msgpack::object::with_zone& o,
13551         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& v) const {
13552         o.type = clmdep_msgpack::type::ARRAY;
13553         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*24));
13554         o.via.array.size = 24;
13555 
13556         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13557         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13558         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13559         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13560         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13561         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13562         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13563         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13564         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13565         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13566         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13567         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13568         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13569         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13570         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13571         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13572         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13573         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13574         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13575         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13576         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13577         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13578         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13579         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13580     }
13581 };
13582 
13583 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
13584 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> > {
13585     void operator()(
13586         clmdep_msgpack::object::with_zone& o,
13587         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& v) const {
13588         o.type = clmdep_msgpack::type::ARRAY;
13589         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*25));
13590         o.via.array.size = 25;
13591 
13592         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13593         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13594         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13595         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13596         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13597         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13598         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13599         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13600         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13601         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13602         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13603         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13604         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13605         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13606         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13607         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13608         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13609         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13610         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13611         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13612         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13613         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13614         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13615         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13616         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13617     }
13618 };
13619 
13620 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
13621 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> > {
13622     void operator()(
13623         clmdep_msgpack::object::with_zone& o,
13624         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& v) const {
13625         o.type = clmdep_msgpack::type::ARRAY;
13626         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*26));
13627         o.via.array.size = 26;
13628 
13629         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13630         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13631         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13632         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13633         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13634         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13635         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13636         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13637         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13638         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13639         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13640         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13641         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13642         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13643         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13644         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13645         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13646         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13647         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13648         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13649         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13650         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13651         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13652         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13653         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13654         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13655     }
13656 };
13657 
13658 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
13659 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> > {
13660     void operator()(
13661         clmdep_msgpack::object::with_zone& o,
13662         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& v) const {
13663         o.type = clmdep_msgpack::type::ARRAY;
13664         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*27));
13665         o.via.array.size = 27;
13666 
13667         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13668         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13669         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13670         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13671         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13672         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13673         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13674         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13675         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13676         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13677         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13678         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13679         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13680         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13681         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13682         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13683         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13684         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13685         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13686         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13687         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13688         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13689         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13690         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13691         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13692         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13693         o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone);
13694     }
13695 };
13696 
13697 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
13698 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> > {
13699     void operator()(
13700         clmdep_msgpack::object::with_zone& o,
13701         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& v) const {
13702         o.type = clmdep_msgpack::type::ARRAY;
13703         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*28));
13704         o.via.array.size = 28;
13705 
13706         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13707         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13708         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13709         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13710         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13711         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13712         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13713         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13714         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13715         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13716         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13717         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13718         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13719         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13720         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13721         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13722         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13723         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13724         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13725         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13726         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13727         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13728         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13729         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13730         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13731         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13732         o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone);
13733         o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone);
13734     }
13735 };
13736 
13737 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
13738 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> > {
13739     void operator()(
13740         clmdep_msgpack::object::with_zone& o,
13741         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& v) const {
13742         o.type = clmdep_msgpack::type::ARRAY;
13743         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*29));
13744         o.via.array.size = 29;
13745 
13746         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13747         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13748         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13749         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13750         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13751         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13752         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13753         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13754         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13755         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13756         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13757         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13758         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13759         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13760         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13761         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13762         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13763         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13764         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13765         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13766         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13767         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13768         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13769         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13770         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13771         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13772         o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone);
13773         o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone);
13774         o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone);
13775     }
13776 };
13777 
13778 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
13779 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> > {
13780     void operator()(
13781         clmdep_msgpack::object::with_zone& o,
13782         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& v) const {
13783         o.type = clmdep_msgpack::type::ARRAY;
13784         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*30));
13785         o.via.array.size = 30;
13786 
13787         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13788         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13789         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13790         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13791         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13792         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13793         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13794         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13795         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13796         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13797         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13798         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13799         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13800         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13801         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13802         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13803         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13804         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13805         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13806         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13807         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13808         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13809         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13810         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13811         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13812         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13813         o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone);
13814         o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone);
13815         o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone);
13816         o.via.array.ptr[29] = clmdep_msgpack::object(v.template get<29>(), o.zone);
13817     }
13818 };
13819 
13820 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
13821 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> > {
13822     void operator()(
13823         clmdep_msgpack::object::with_zone& o,
13824         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& v) const {
13825         o.type = clmdep_msgpack::type::ARRAY;
13826         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*31));
13827         o.via.array.size = 31;
13828 
13829         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13830         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13831         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13832         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13833         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13834         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13835         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13836         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13837         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13838         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13839         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13840         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13841         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13842         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13843         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13844         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13845         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13846         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13847         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13848         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13849         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13850         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13851         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13852         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13853         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13854         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13855         o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone);
13856         o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone);
13857         o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone);
13858         o.via.array.ptr[29] = clmdep_msgpack::object(v.template get<29>(), o.zone);
13859         o.via.array.ptr[30] = clmdep_msgpack::object(v.template get<30>(), o.zone);
13860     }
13861 };
13862 
13863 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
13864 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> > {
13865     void operator()(
13866         clmdep_msgpack::object::with_zone& o,
13867         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& v) const {
13868         o.type = clmdep_msgpack::type::ARRAY;
13869         o.via.array.ptr = static_cast<clmdep_msgpack::object*>(o.zone.allocate_align(sizeof(clmdep_msgpack::object)*32));
13870         o.via.array.size = 32;
13871 
13872         o.via.array.ptr[0] = clmdep_msgpack::object(v.template get<0>(), o.zone);
13873         o.via.array.ptr[1] = clmdep_msgpack::object(v.template get<1>(), o.zone);
13874         o.via.array.ptr[2] = clmdep_msgpack::object(v.template get<2>(), o.zone);
13875         o.via.array.ptr[3] = clmdep_msgpack::object(v.template get<3>(), o.zone);
13876         o.via.array.ptr[4] = clmdep_msgpack::object(v.template get<4>(), o.zone);
13877         o.via.array.ptr[5] = clmdep_msgpack::object(v.template get<5>(), o.zone);
13878         o.via.array.ptr[6] = clmdep_msgpack::object(v.template get<6>(), o.zone);
13879         o.via.array.ptr[7] = clmdep_msgpack::object(v.template get<7>(), o.zone);
13880         o.via.array.ptr[8] = clmdep_msgpack::object(v.template get<8>(), o.zone);
13881         o.via.array.ptr[9] = clmdep_msgpack::object(v.template get<9>(), o.zone);
13882         o.via.array.ptr[10] = clmdep_msgpack::object(v.template get<10>(), o.zone);
13883         o.via.array.ptr[11] = clmdep_msgpack::object(v.template get<11>(), o.zone);
13884         o.via.array.ptr[12] = clmdep_msgpack::object(v.template get<12>(), o.zone);
13885         o.via.array.ptr[13] = clmdep_msgpack::object(v.template get<13>(), o.zone);
13886         o.via.array.ptr[14] = clmdep_msgpack::object(v.template get<14>(), o.zone);
13887         o.via.array.ptr[15] = clmdep_msgpack::object(v.template get<15>(), o.zone);
13888         o.via.array.ptr[16] = clmdep_msgpack::object(v.template get<16>(), o.zone);
13889         o.via.array.ptr[17] = clmdep_msgpack::object(v.template get<17>(), o.zone);
13890         o.via.array.ptr[18] = clmdep_msgpack::object(v.template get<18>(), o.zone);
13891         o.via.array.ptr[19] = clmdep_msgpack::object(v.template get<19>(), o.zone);
13892         o.via.array.ptr[20] = clmdep_msgpack::object(v.template get<20>(), o.zone);
13893         o.via.array.ptr[21] = clmdep_msgpack::object(v.template get<21>(), o.zone);
13894         o.via.array.ptr[22] = clmdep_msgpack::object(v.template get<22>(), o.zone);
13895         o.via.array.ptr[23] = clmdep_msgpack::object(v.template get<23>(), o.zone);
13896         o.via.array.ptr[24] = clmdep_msgpack::object(v.template get<24>(), o.zone);
13897         o.via.array.ptr[25] = clmdep_msgpack::object(v.template get<25>(), o.zone);
13898         o.via.array.ptr[26] = clmdep_msgpack::object(v.template get<26>(), o.zone);
13899         o.via.array.ptr[27] = clmdep_msgpack::object(v.template get<27>(), o.zone);
13900         o.via.array.ptr[28] = clmdep_msgpack::object(v.template get<28>(), o.zone);
13901         o.via.array.ptr[29] = clmdep_msgpack::object(v.template get<29>(), o.zone);
13902         o.via.array.ptr[30] = clmdep_msgpack::object(v.template get<30>(), o.zone);
13903         o.via.array.ptr[31] = clmdep_msgpack::object(v.template get<31>(), o.zone);
13904     }
13905 };
13906 
13907 /// @endcond
13908 
13909 } // namespace adaptor
13910 
13911 /// @cond
13912 }  // MSGPACK_API_VERSION_NAMESPACE(v1)
13913 /// @endcond
13914 
13915 }  // namespace clmdep_msgpack
13916 
13917 #endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP
13918