1 //
2 // MessagePack for C++ static resolution routine
3 //
4 // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi
5 //
6 //    Distributed under the Boost Software License, Version 1.0.
7 //    (See accompanying file LICENSE_1_0.txt or copy at
8 //    http://www.boost.org/LICENSE_1_0.txt)
9 //
10 #ifndef MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
11 #define MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
12 
13 #include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp"
14 
15 namespace msgpack {
16 
17 /// @cond
MSGPACK_API_VERSION_NAMESPACE(v1)18 MSGPACK_API_VERSION_NAMESPACE(v1) {
19 /// @endcond
20 
21 namespace type {
22 
23 // FIXME operator==
24 // FIXME operator!=
25 
26 
27 template <typename T>
28 struct tuple_type {
29     typedef T type;
30     typedef T value_type;
31     typedef T& reference;
32     typedef const T& const_reference;
33     typedef const T& transparent_reference;
34 };
35 
36 template <typename T>
37 struct tuple_type<T&> {
38     typedef T type;
39     typedef T& value_type;
40     typedef T& reference;
41     typedef const T& const_reference;
42     typedef T& transparent_reference;
43 };
44 
45 template <typename T>
46 struct tuple_type<const T&> {
47     typedef T type;
48     typedef T& value_type;
49     typedef T& reference;
50     typedef const T& const_reference;
51     typedef const T& transparent_reference;
52 };
53 
54 /// @cond
55 
56 
57 template <typename A0>
58 struct tuple_element<tuple<A0>, 0> : tuple_type<A0> {
59     tuple_element(tuple<A0>& x) : m_x(x.a0) {}
60     typename tuple_type<A0>::reference get() { return m_x; }
61     typename tuple_type<A0>::const_reference get() const { return m_x; }
62 private:
63     typename tuple_type<A0>::reference m_x;
64 };
65 
66 
67 
68 template <typename A0, typename A1>
69 struct tuple_element<tuple<A0, A1>, 0> : tuple_type<A0> {
70     tuple_element(tuple<A0, A1 >& x) : m_x(x.a0) {}
71     typename tuple_type<A0>::reference get() { return m_x; }
72     typename tuple_type<A0>::const_reference get() const { return m_x; }
73 private:
74     typename tuple_type<A0>::reference m_x;
75 };
76 
77 template <typename A0, typename A1>
78 struct tuple_element<tuple<A0, A1>, 1> : tuple_type<A1> {
79     tuple_element(tuple<A0, A1 >& x) : m_x(x.a1) {}
80     typename tuple_type<A1>::reference get() { return m_x; }
81     typename tuple_type<A1>::const_reference get() const { return m_x; }
82 private:
83     typename tuple_type<A1>::reference m_x;
84 };
85 
86 
87 
88 template <typename A0, typename A1, typename A2>
89 struct tuple_element<tuple<A0, A1, A2>, 0> : tuple_type<A0> {
90     tuple_element(tuple<A0, A1 , A2 >& x) : m_x(x.a0) {}
91     typename tuple_type<A0>::reference get() { return m_x; }
92     typename tuple_type<A0>::const_reference get() const { return m_x; }
93 private:
94     typename tuple_type<A0>::reference m_x;
95 };
96 
97 template <typename A0, typename A1, typename A2>
98 struct tuple_element<tuple<A0, A1, A2>, 1> : tuple_type<A1> {
99     tuple_element(tuple<A0, A1 , A2 >& x) : m_x(x.a1) {}
100     typename tuple_type<A1>::reference get() { return m_x; }
101     typename tuple_type<A1>::const_reference get() const { return m_x; }
102 private:
103     typename tuple_type<A1>::reference m_x;
104 };
105 
106 template <typename A0, typename A1, typename A2>
107 struct tuple_element<tuple<A0, A1, A2>, 2> : tuple_type<A2> {
108     tuple_element(tuple<A0, A1 , A2 >& x) : m_x(x.a2) {}
109     typename tuple_type<A2>::reference get() { return m_x; }
110     typename tuple_type<A2>::const_reference get() const { return m_x; }
111 private:
112     typename tuple_type<A2>::reference m_x;
113 };
114 
115 
116 
117 template <typename A0, typename A1, typename A2, typename A3>
118 struct tuple_element<tuple<A0, A1, A2, A3>, 0> : tuple_type<A0> {
119     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a0) {}
120     typename tuple_type<A0>::reference get() { return m_x; }
121     typename tuple_type<A0>::const_reference get() const { return m_x; }
122 private:
123     typename tuple_type<A0>::reference m_x;
124 };
125 
126 template <typename A0, typename A1, typename A2, typename A3>
127 struct tuple_element<tuple<A0, A1, A2, A3>, 1> : tuple_type<A1> {
128     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a1) {}
129     typename tuple_type<A1>::reference get() { return m_x; }
130     typename tuple_type<A1>::const_reference get() const { return m_x; }
131 private:
132     typename tuple_type<A1>::reference m_x;
133 };
134 
135 template <typename A0, typename A1, typename A2, typename A3>
136 struct tuple_element<tuple<A0, A1, A2, A3>, 2> : tuple_type<A2> {
137     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a2) {}
138     typename tuple_type<A2>::reference get() { return m_x; }
139     typename tuple_type<A2>::const_reference get() const { return m_x; }
140 private:
141     typename tuple_type<A2>::reference m_x;
142 };
143 
144 template <typename A0, typename A1, typename A2, typename A3>
145 struct tuple_element<tuple<A0, A1, A2, A3>, 3> : tuple_type<A3> {
146     tuple_element(tuple<A0, A1 , A2 , A3 >& x) : m_x(x.a3) {}
147     typename tuple_type<A3>::reference get() { return m_x; }
148     typename tuple_type<A3>::const_reference get() const { return m_x; }
149 private:
150     typename tuple_type<A3>::reference m_x;
151 };
152 
153 
154 
155 template <typename A0, typename A1, typename A2, typename A3, typename A4>
156 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 0> : tuple_type<A0> {
157     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a0) {}
158     typename tuple_type<A0>::reference get() { return m_x; }
159     typename tuple_type<A0>::const_reference get() const { return m_x; }
160 private:
161     typename tuple_type<A0>::reference m_x;
162 };
163 
164 template <typename A0, typename A1, typename A2, typename A3, typename A4>
165 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 1> : tuple_type<A1> {
166     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a1) {}
167     typename tuple_type<A1>::reference get() { return m_x; }
168     typename tuple_type<A1>::const_reference get() const { return m_x; }
169 private:
170     typename tuple_type<A1>::reference m_x;
171 };
172 
173 template <typename A0, typename A1, typename A2, typename A3, typename A4>
174 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 2> : tuple_type<A2> {
175     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a2) {}
176     typename tuple_type<A2>::reference get() { return m_x; }
177     typename tuple_type<A2>::const_reference get() const { return m_x; }
178 private:
179     typename tuple_type<A2>::reference m_x;
180 };
181 
182 template <typename A0, typename A1, typename A2, typename A3, typename A4>
183 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 3> : tuple_type<A3> {
184     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a3) {}
185     typename tuple_type<A3>::reference get() { return m_x; }
186     typename tuple_type<A3>::const_reference get() const { return m_x; }
187 private:
188     typename tuple_type<A3>::reference m_x;
189 };
190 
191 template <typename A0, typename A1, typename A2, typename A3, typename A4>
192 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 4> : tuple_type<A4> {
193     tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : m_x(x.a4) {}
194     typename tuple_type<A4>::reference get() { return m_x; }
195     typename tuple_type<A4>::const_reference get() const { return m_x; }
196 private:
197     typename tuple_type<A4>::reference m_x;
198 };
199 
200 
201 
202 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
203 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 0> : tuple_type<A0> {
204     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a0) {}
205     typename tuple_type<A0>::reference get() { return m_x; }
206     typename tuple_type<A0>::const_reference get() const { return m_x; }
207 private:
208     typename tuple_type<A0>::reference m_x;
209 };
210 
211 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
212 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 1> : tuple_type<A1> {
213     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a1) {}
214     typename tuple_type<A1>::reference get() { return m_x; }
215     typename tuple_type<A1>::const_reference get() const { return m_x; }
216 private:
217     typename tuple_type<A1>::reference m_x;
218 };
219 
220 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
221 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 2> : tuple_type<A2> {
222     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a2) {}
223     typename tuple_type<A2>::reference get() { return m_x; }
224     typename tuple_type<A2>::const_reference get() const { return m_x; }
225 private:
226     typename tuple_type<A2>::reference m_x;
227 };
228 
229 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
230 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 3> : tuple_type<A3> {
231     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a3) {}
232     typename tuple_type<A3>::reference get() { return m_x; }
233     typename tuple_type<A3>::const_reference get() const { return m_x; }
234 private:
235     typename tuple_type<A3>::reference m_x;
236 };
237 
238 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
239 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 4> : tuple_type<A4> {
240     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a4) {}
241     typename tuple_type<A4>::reference get() { return m_x; }
242     typename tuple_type<A4>::const_reference get() const { return m_x; }
243 private:
244     typename tuple_type<A4>::reference m_x;
245 };
246 
247 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
248 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 5> : tuple_type<A5> {
249     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : m_x(x.a5) {}
250     typename tuple_type<A5>::reference get() { return m_x; }
251     typename tuple_type<A5>::const_reference get() const { return m_x; }
252 private:
253     typename tuple_type<A5>::reference m_x;
254 };
255 
256 
257 
258 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
259 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 0> : tuple_type<A0> {
260     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a0) {}
261     typename tuple_type<A0>::reference get() { return m_x; }
262     typename tuple_type<A0>::const_reference get() const { return m_x; }
263 private:
264     typename tuple_type<A0>::reference m_x;
265 };
266 
267 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
268 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 1> : tuple_type<A1> {
269     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a1) {}
270     typename tuple_type<A1>::reference get() { return m_x; }
271     typename tuple_type<A1>::const_reference get() const { return m_x; }
272 private:
273     typename tuple_type<A1>::reference m_x;
274 };
275 
276 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
277 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 2> : tuple_type<A2> {
278     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a2) {}
279     typename tuple_type<A2>::reference get() { return m_x; }
280     typename tuple_type<A2>::const_reference get() const { return m_x; }
281 private:
282     typename tuple_type<A2>::reference m_x;
283 };
284 
285 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
286 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 3> : tuple_type<A3> {
287     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a3) {}
288     typename tuple_type<A3>::reference get() { return m_x; }
289     typename tuple_type<A3>::const_reference get() const { return m_x; }
290 private:
291     typename tuple_type<A3>::reference m_x;
292 };
293 
294 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
295 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 4> : tuple_type<A4> {
296     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a4) {}
297     typename tuple_type<A4>::reference get() { return m_x; }
298     typename tuple_type<A4>::const_reference get() const { return m_x; }
299 private:
300     typename tuple_type<A4>::reference m_x;
301 };
302 
303 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
304 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 5> : tuple_type<A5> {
305     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a5) {}
306     typename tuple_type<A5>::reference get() { return m_x; }
307     typename tuple_type<A5>::const_reference get() const { return m_x; }
308 private:
309     typename tuple_type<A5>::reference m_x;
310 };
311 
312 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
313 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 6> : tuple_type<A6> {
314     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : m_x(x.a6) {}
315     typename tuple_type<A6>::reference get() { return m_x; }
316     typename tuple_type<A6>::const_reference get() const { return m_x; }
317 private:
318     typename tuple_type<A6>::reference m_x;
319 };
320 
321 
322 
323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
324 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 0> : tuple_type<A0> {
325     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a0) {}
326     typename tuple_type<A0>::reference get() { return m_x; }
327     typename tuple_type<A0>::const_reference get() const { return m_x; }
328 private:
329     typename tuple_type<A0>::reference m_x;
330 };
331 
332 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
333 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 1> : tuple_type<A1> {
334     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a1) {}
335     typename tuple_type<A1>::reference get() { return m_x; }
336     typename tuple_type<A1>::const_reference get() const { return m_x; }
337 private:
338     typename tuple_type<A1>::reference m_x;
339 };
340 
341 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
342 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 2> : tuple_type<A2> {
343     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a2) {}
344     typename tuple_type<A2>::reference get() { return m_x; }
345     typename tuple_type<A2>::const_reference get() const { return m_x; }
346 private:
347     typename tuple_type<A2>::reference m_x;
348 };
349 
350 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
351 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 3> : tuple_type<A3> {
352     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a3) {}
353     typename tuple_type<A3>::reference get() { return m_x; }
354     typename tuple_type<A3>::const_reference get() const { return m_x; }
355 private:
356     typename tuple_type<A3>::reference m_x;
357 };
358 
359 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
360 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 4> : tuple_type<A4> {
361     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a4) {}
362     typename tuple_type<A4>::reference get() { return m_x; }
363     typename tuple_type<A4>::const_reference get() const { return m_x; }
364 private:
365     typename tuple_type<A4>::reference m_x;
366 };
367 
368 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
369 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 5> : tuple_type<A5> {
370     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a5) {}
371     typename tuple_type<A5>::reference get() { return m_x; }
372     typename tuple_type<A5>::const_reference get() const { return m_x; }
373 private:
374     typename tuple_type<A5>::reference m_x;
375 };
376 
377 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
378 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 6> : tuple_type<A6> {
379     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a6) {}
380     typename tuple_type<A6>::reference get() { return m_x; }
381     typename tuple_type<A6>::const_reference get() const { return m_x; }
382 private:
383     typename tuple_type<A6>::reference m_x;
384 };
385 
386 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
387 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 7> : tuple_type<A7> {
388     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : m_x(x.a7) {}
389     typename tuple_type<A7>::reference get() { return m_x; }
390     typename tuple_type<A7>::const_reference get() const { return m_x; }
391 private:
392     typename tuple_type<A7>::reference m_x;
393 };
394 
395 
396 
397 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
398 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 0> : tuple_type<A0> {
399     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a0) {}
400     typename tuple_type<A0>::reference get() { return m_x; }
401     typename tuple_type<A0>::const_reference get() const { return m_x; }
402 private:
403     typename tuple_type<A0>::reference m_x;
404 };
405 
406 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
407 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 1> : tuple_type<A1> {
408     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a1) {}
409     typename tuple_type<A1>::reference get() { return m_x; }
410     typename tuple_type<A1>::const_reference get() const { return m_x; }
411 private:
412     typename tuple_type<A1>::reference m_x;
413 };
414 
415 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
416 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 2> : tuple_type<A2> {
417     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a2) {}
418     typename tuple_type<A2>::reference get() { return m_x; }
419     typename tuple_type<A2>::const_reference get() const { return m_x; }
420 private:
421     typename tuple_type<A2>::reference m_x;
422 };
423 
424 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
425 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 3> : tuple_type<A3> {
426     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a3) {}
427     typename tuple_type<A3>::reference get() { return m_x; }
428     typename tuple_type<A3>::const_reference get() const { return m_x; }
429 private:
430     typename tuple_type<A3>::reference m_x;
431 };
432 
433 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
434 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 4> : tuple_type<A4> {
435     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a4) {}
436     typename tuple_type<A4>::reference get() { return m_x; }
437     typename tuple_type<A4>::const_reference get() const { return m_x; }
438 private:
439     typename tuple_type<A4>::reference m_x;
440 };
441 
442 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
443 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 5> : tuple_type<A5> {
444     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a5) {}
445     typename tuple_type<A5>::reference get() { return m_x; }
446     typename tuple_type<A5>::const_reference get() const { return m_x; }
447 private:
448     typename tuple_type<A5>::reference m_x;
449 };
450 
451 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
452 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 6> : tuple_type<A6> {
453     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a6) {}
454     typename tuple_type<A6>::reference get() { return m_x; }
455     typename tuple_type<A6>::const_reference get() const { return m_x; }
456 private:
457     typename tuple_type<A6>::reference m_x;
458 };
459 
460 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
461 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 7> : tuple_type<A7> {
462     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a7) {}
463     typename tuple_type<A7>::reference get() { return m_x; }
464     typename tuple_type<A7>::const_reference get() const { return m_x; }
465 private:
466     typename tuple_type<A7>::reference m_x;
467 };
468 
469 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
470 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 8> : tuple_type<A8> {
471     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : m_x(x.a8) {}
472     typename tuple_type<A8>::reference get() { return m_x; }
473     typename tuple_type<A8>::const_reference get() const { return m_x; }
474 private:
475     typename tuple_type<A8>::reference m_x;
476 };
477 
478 
479 
480 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
481 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 0> : tuple_type<A0> {
482     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a0) {}
483     typename tuple_type<A0>::reference get() { return m_x; }
484     typename tuple_type<A0>::const_reference get() const { return m_x; }
485 private:
486     typename tuple_type<A0>::reference m_x;
487 };
488 
489 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
490 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 1> : tuple_type<A1> {
491     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a1) {}
492     typename tuple_type<A1>::reference get() { return m_x; }
493     typename tuple_type<A1>::const_reference get() const { return m_x; }
494 private:
495     typename tuple_type<A1>::reference m_x;
496 };
497 
498 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
499 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 2> : tuple_type<A2> {
500     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a2) {}
501     typename tuple_type<A2>::reference get() { return m_x; }
502     typename tuple_type<A2>::const_reference get() const { return m_x; }
503 private:
504     typename tuple_type<A2>::reference m_x;
505 };
506 
507 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
508 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 3> : tuple_type<A3> {
509     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a3) {}
510     typename tuple_type<A3>::reference get() { return m_x; }
511     typename tuple_type<A3>::const_reference get() const { return m_x; }
512 private:
513     typename tuple_type<A3>::reference m_x;
514 };
515 
516 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
517 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 4> : tuple_type<A4> {
518     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a4) {}
519     typename tuple_type<A4>::reference get() { return m_x; }
520     typename tuple_type<A4>::const_reference get() const { return m_x; }
521 private:
522     typename tuple_type<A4>::reference m_x;
523 };
524 
525 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
526 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 5> : tuple_type<A5> {
527     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a5) {}
528     typename tuple_type<A5>::reference get() { return m_x; }
529     typename tuple_type<A5>::const_reference get() const { return m_x; }
530 private:
531     typename tuple_type<A5>::reference m_x;
532 };
533 
534 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
535 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 6> : tuple_type<A6> {
536     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a6) {}
537     typename tuple_type<A6>::reference get() { return m_x; }
538     typename tuple_type<A6>::const_reference get() const { return m_x; }
539 private:
540     typename tuple_type<A6>::reference m_x;
541 };
542 
543 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
544 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 7> : tuple_type<A7> {
545     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a7) {}
546     typename tuple_type<A7>::reference get() { return m_x; }
547     typename tuple_type<A7>::const_reference get() const { return m_x; }
548 private:
549     typename tuple_type<A7>::reference m_x;
550 };
551 
552 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
553 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 8> : tuple_type<A8> {
554     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a8) {}
555     typename tuple_type<A8>::reference get() { return m_x; }
556     typename tuple_type<A8>::const_reference get() const { return m_x; }
557 private:
558     typename tuple_type<A8>::reference m_x;
559 };
560 
561 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
562 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 9> : tuple_type<A9> {
563     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : m_x(x.a9) {}
564     typename tuple_type<A9>::reference get() { return m_x; }
565     typename tuple_type<A9>::const_reference get() const { return m_x; }
566 private:
567     typename tuple_type<A9>::reference m_x;
568 };
569 
570 
571 
572 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
573 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 0> : tuple_type<A0> {
574     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a0) {}
575     typename tuple_type<A0>::reference get() { return m_x; }
576     typename tuple_type<A0>::const_reference get() const { return m_x; }
577 private:
578     typename tuple_type<A0>::reference m_x;
579 };
580 
581 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
582 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 1> : tuple_type<A1> {
583     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a1) {}
584     typename tuple_type<A1>::reference get() { return m_x; }
585     typename tuple_type<A1>::const_reference get() const { return m_x; }
586 private:
587     typename tuple_type<A1>::reference m_x;
588 };
589 
590 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
591 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 2> : tuple_type<A2> {
592     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a2) {}
593     typename tuple_type<A2>::reference get() { return m_x; }
594     typename tuple_type<A2>::const_reference get() const { return m_x; }
595 private:
596     typename tuple_type<A2>::reference m_x;
597 };
598 
599 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
600 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 3> : tuple_type<A3> {
601     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a3) {}
602     typename tuple_type<A3>::reference get() { return m_x; }
603     typename tuple_type<A3>::const_reference get() const { return m_x; }
604 private:
605     typename tuple_type<A3>::reference m_x;
606 };
607 
608 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
609 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 4> : tuple_type<A4> {
610     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a4) {}
611     typename tuple_type<A4>::reference get() { return m_x; }
612     typename tuple_type<A4>::const_reference get() const { return m_x; }
613 private:
614     typename tuple_type<A4>::reference m_x;
615 };
616 
617 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
618 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 5> : tuple_type<A5> {
619     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a5) {}
620     typename tuple_type<A5>::reference get() { return m_x; }
621     typename tuple_type<A5>::const_reference get() const { return m_x; }
622 private:
623     typename tuple_type<A5>::reference m_x;
624 };
625 
626 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
627 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 6> : tuple_type<A6> {
628     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a6) {}
629     typename tuple_type<A6>::reference get() { return m_x; }
630     typename tuple_type<A6>::const_reference get() const { return m_x; }
631 private:
632     typename tuple_type<A6>::reference m_x;
633 };
634 
635 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
636 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 7> : tuple_type<A7> {
637     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a7) {}
638     typename tuple_type<A7>::reference get() { return m_x; }
639     typename tuple_type<A7>::const_reference get() const { return m_x; }
640 private:
641     typename tuple_type<A7>::reference m_x;
642 };
643 
644 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
645 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 8> : tuple_type<A8> {
646     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a8) {}
647     typename tuple_type<A8>::reference get() { return m_x; }
648     typename tuple_type<A8>::const_reference get() const { return m_x; }
649 private:
650     typename tuple_type<A8>::reference m_x;
651 };
652 
653 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
654 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 9> : tuple_type<A9> {
655     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a9) {}
656     typename tuple_type<A9>::reference get() { return m_x; }
657     typename tuple_type<A9>::const_reference get() const { return m_x; }
658 private:
659     typename tuple_type<A9>::reference m_x;
660 };
661 
662 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
663 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 10> : tuple_type<A10> {
664     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : m_x(x.a10) {}
665     typename tuple_type<A10>::reference get() { return m_x; }
666     typename tuple_type<A10>::const_reference get() const { return m_x; }
667 private:
668     typename tuple_type<A10>::reference m_x;
669 };
670 
671 
672 
673 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
674 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 0> : tuple_type<A0> {
675     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a0) {}
676     typename tuple_type<A0>::reference get() { return m_x; }
677     typename tuple_type<A0>::const_reference get() const { return m_x; }
678 private:
679     typename tuple_type<A0>::reference m_x;
680 };
681 
682 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
683 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 1> : tuple_type<A1> {
684     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a1) {}
685     typename tuple_type<A1>::reference get() { return m_x; }
686     typename tuple_type<A1>::const_reference get() const { return m_x; }
687 private:
688     typename tuple_type<A1>::reference m_x;
689 };
690 
691 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
692 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 2> : tuple_type<A2> {
693     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a2) {}
694     typename tuple_type<A2>::reference get() { return m_x; }
695     typename tuple_type<A2>::const_reference get() const { return m_x; }
696 private:
697     typename tuple_type<A2>::reference m_x;
698 };
699 
700 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
701 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 3> : tuple_type<A3> {
702     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a3) {}
703     typename tuple_type<A3>::reference get() { return m_x; }
704     typename tuple_type<A3>::const_reference get() const { return m_x; }
705 private:
706     typename tuple_type<A3>::reference m_x;
707 };
708 
709 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
710 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 4> : tuple_type<A4> {
711     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a4) {}
712     typename tuple_type<A4>::reference get() { return m_x; }
713     typename tuple_type<A4>::const_reference get() const { return m_x; }
714 private:
715     typename tuple_type<A4>::reference m_x;
716 };
717 
718 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
719 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 5> : tuple_type<A5> {
720     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a5) {}
721     typename tuple_type<A5>::reference get() { return m_x; }
722     typename tuple_type<A5>::const_reference get() const { return m_x; }
723 private:
724     typename tuple_type<A5>::reference m_x;
725 };
726 
727 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
728 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 6> : tuple_type<A6> {
729     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a6) {}
730     typename tuple_type<A6>::reference get() { return m_x; }
731     typename tuple_type<A6>::const_reference get() const { return m_x; }
732 private:
733     typename tuple_type<A6>::reference m_x;
734 };
735 
736 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
737 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 7> : tuple_type<A7> {
738     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a7) {}
739     typename tuple_type<A7>::reference get() { return m_x; }
740     typename tuple_type<A7>::const_reference get() const { return m_x; }
741 private:
742     typename tuple_type<A7>::reference m_x;
743 };
744 
745 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
746 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 8> : tuple_type<A8> {
747     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a8) {}
748     typename tuple_type<A8>::reference get() { return m_x; }
749     typename tuple_type<A8>::const_reference get() const { return m_x; }
750 private:
751     typename tuple_type<A8>::reference m_x;
752 };
753 
754 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
755 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 9> : tuple_type<A9> {
756     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a9) {}
757     typename tuple_type<A9>::reference get() { return m_x; }
758     typename tuple_type<A9>::const_reference get() const { return m_x; }
759 private:
760     typename tuple_type<A9>::reference m_x;
761 };
762 
763 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
764 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 10> : tuple_type<A10> {
765     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a10) {}
766     typename tuple_type<A10>::reference get() { return m_x; }
767     typename tuple_type<A10>::const_reference get() const { return m_x; }
768 private:
769     typename tuple_type<A10>::reference m_x;
770 };
771 
772 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
773 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 11> : tuple_type<A11> {
774     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : m_x(x.a11) {}
775     typename tuple_type<A11>::reference get() { return m_x; }
776     typename tuple_type<A11>::const_reference get() const { return m_x; }
777 private:
778     typename tuple_type<A11>::reference m_x;
779 };
780 
781 
782 
783 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
784 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 0> : tuple_type<A0> {
785     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a0) {}
786     typename tuple_type<A0>::reference get() { return m_x; }
787     typename tuple_type<A0>::const_reference get() const { return m_x; }
788 private:
789     typename tuple_type<A0>::reference m_x;
790 };
791 
792 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
793 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 1> : tuple_type<A1> {
794     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a1) {}
795     typename tuple_type<A1>::reference get() { return m_x; }
796     typename tuple_type<A1>::const_reference get() const { return m_x; }
797 private:
798     typename tuple_type<A1>::reference m_x;
799 };
800 
801 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
802 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 2> : tuple_type<A2> {
803     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a2) {}
804     typename tuple_type<A2>::reference get() { return m_x; }
805     typename tuple_type<A2>::const_reference get() const { return m_x; }
806 private:
807     typename tuple_type<A2>::reference m_x;
808 };
809 
810 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
811 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 3> : tuple_type<A3> {
812     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a3) {}
813     typename tuple_type<A3>::reference get() { return m_x; }
814     typename tuple_type<A3>::const_reference get() const { return m_x; }
815 private:
816     typename tuple_type<A3>::reference m_x;
817 };
818 
819 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
820 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 4> : tuple_type<A4> {
821     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a4) {}
822     typename tuple_type<A4>::reference get() { return m_x; }
823     typename tuple_type<A4>::const_reference get() const { return m_x; }
824 private:
825     typename tuple_type<A4>::reference m_x;
826 };
827 
828 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
829 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 5> : tuple_type<A5> {
830     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a5) {}
831     typename tuple_type<A5>::reference get() { return m_x; }
832     typename tuple_type<A5>::const_reference get() const { return m_x; }
833 private:
834     typename tuple_type<A5>::reference m_x;
835 };
836 
837 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
838 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 6> : tuple_type<A6> {
839     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a6) {}
840     typename tuple_type<A6>::reference get() { return m_x; }
841     typename tuple_type<A6>::const_reference get() const { return m_x; }
842 private:
843     typename tuple_type<A6>::reference m_x;
844 };
845 
846 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
847 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 7> : tuple_type<A7> {
848     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a7) {}
849     typename tuple_type<A7>::reference get() { return m_x; }
850     typename tuple_type<A7>::const_reference get() const { return m_x; }
851 private:
852     typename tuple_type<A7>::reference m_x;
853 };
854 
855 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
856 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 8> : tuple_type<A8> {
857     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a8) {}
858     typename tuple_type<A8>::reference get() { return m_x; }
859     typename tuple_type<A8>::const_reference get() const { return m_x; }
860 private:
861     typename tuple_type<A8>::reference m_x;
862 };
863 
864 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
865 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 9> : tuple_type<A9> {
866     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a9) {}
867     typename tuple_type<A9>::reference get() { return m_x; }
868     typename tuple_type<A9>::const_reference get() const { return m_x; }
869 private:
870     typename tuple_type<A9>::reference m_x;
871 };
872 
873 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
874 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 10> : tuple_type<A10> {
875     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a10) {}
876     typename tuple_type<A10>::reference get() { return m_x; }
877     typename tuple_type<A10>::const_reference get() const { return m_x; }
878 private:
879     typename tuple_type<A10>::reference m_x;
880 };
881 
882 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
883 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 11> : tuple_type<A11> {
884     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a11) {}
885     typename tuple_type<A11>::reference get() { return m_x; }
886     typename tuple_type<A11>::const_reference get() const { return m_x; }
887 private:
888     typename tuple_type<A11>::reference m_x;
889 };
890 
891 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
892 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 12> : tuple_type<A12> {
893     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : m_x(x.a12) {}
894     typename tuple_type<A12>::reference get() { return m_x; }
895     typename tuple_type<A12>::const_reference get() const { return m_x; }
896 private:
897     typename tuple_type<A12>::reference m_x;
898 };
899 
900 
901 
902 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
903 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 0> : tuple_type<A0> {
904     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a0) {}
905     typename tuple_type<A0>::reference get() { return m_x; }
906     typename tuple_type<A0>::const_reference get() const { return m_x; }
907 private:
908     typename tuple_type<A0>::reference m_x;
909 };
910 
911 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
912 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 1> : tuple_type<A1> {
913     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a1) {}
914     typename tuple_type<A1>::reference get() { return m_x; }
915     typename tuple_type<A1>::const_reference get() const { return m_x; }
916 private:
917     typename tuple_type<A1>::reference m_x;
918 };
919 
920 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
921 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 2> : tuple_type<A2> {
922     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a2) {}
923     typename tuple_type<A2>::reference get() { return m_x; }
924     typename tuple_type<A2>::const_reference get() const { return m_x; }
925 private:
926     typename tuple_type<A2>::reference m_x;
927 };
928 
929 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
930 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 3> : tuple_type<A3> {
931     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a3) {}
932     typename tuple_type<A3>::reference get() { return m_x; }
933     typename tuple_type<A3>::const_reference get() const { return m_x; }
934 private:
935     typename tuple_type<A3>::reference m_x;
936 };
937 
938 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
939 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 4> : tuple_type<A4> {
940     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a4) {}
941     typename tuple_type<A4>::reference get() { return m_x; }
942     typename tuple_type<A4>::const_reference get() const { return m_x; }
943 private:
944     typename tuple_type<A4>::reference m_x;
945 };
946 
947 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
948 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 5> : tuple_type<A5> {
949     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a5) {}
950     typename tuple_type<A5>::reference get() { return m_x; }
951     typename tuple_type<A5>::const_reference get() const { return m_x; }
952 private:
953     typename tuple_type<A5>::reference m_x;
954 };
955 
956 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
957 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 6> : tuple_type<A6> {
958     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a6) {}
959     typename tuple_type<A6>::reference get() { return m_x; }
960     typename tuple_type<A6>::const_reference get() const { return m_x; }
961 private:
962     typename tuple_type<A6>::reference m_x;
963 };
964 
965 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
966 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 7> : tuple_type<A7> {
967     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a7) {}
968     typename tuple_type<A7>::reference get() { return m_x; }
969     typename tuple_type<A7>::const_reference get() const { return m_x; }
970 private:
971     typename tuple_type<A7>::reference m_x;
972 };
973 
974 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
975 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 8> : tuple_type<A8> {
976     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a8) {}
977     typename tuple_type<A8>::reference get() { return m_x; }
978     typename tuple_type<A8>::const_reference get() const { return m_x; }
979 private:
980     typename tuple_type<A8>::reference m_x;
981 };
982 
983 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
984 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 9> : tuple_type<A9> {
985     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a9) {}
986     typename tuple_type<A9>::reference get() { return m_x; }
987     typename tuple_type<A9>::const_reference get() const { return m_x; }
988 private:
989     typename tuple_type<A9>::reference m_x;
990 };
991 
992 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
993 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 10> : tuple_type<A10> {
994     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a10) {}
995     typename tuple_type<A10>::reference get() { return m_x; }
996     typename tuple_type<A10>::const_reference get() const { return m_x; }
997 private:
998     typename tuple_type<A10>::reference m_x;
999 };
1000 
1001 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1002 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 11> : tuple_type<A11> {
1003     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a11) {}
1004     typename tuple_type<A11>::reference get() { return m_x; }
1005     typename tuple_type<A11>::const_reference get() const { return m_x; }
1006 private:
1007     typename tuple_type<A11>::reference m_x;
1008 };
1009 
1010 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1011 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 12> : tuple_type<A12> {
1012     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a12) {}
1013     typename tuple_type<A12>::reference get() { return m_x; }
1014     typename tuple_type<A12>::const_reference get() const { return m_x; }
1015 private:
1016     typename tuple_type<A12>::reference m_x;
1017 };
1018 
1019 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
1020 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 13> : tuple_type<A13> {
1021     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : m_x(x.a13) {}
1022     typename tuple_type<A13>::reference get() { return m_x; }
1023     typename tuple_type<A13>::const_reference get() const { return m_x; }
1024 private:
1025     typename tuple_type<A13>::reference m_x;
1026 };
1027 
1028 
1029 
1030 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1031 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 0> : tuple_type<A0> {
1032     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a0) {}
1033     typename tuple_type<A0>::reference get() { return m_x; }
1034     typename tuple_type<A0>::const_reference get() const { return m_x; }
1035 private:
1036     typename tuple_type<A0>::reference m_x;
1037 };
1038 
1039 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1040 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 1> : tuple_type<A1> {
1041     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a1) {}
1042     typename tuple_type<A1>::reference get() { return m_x; }
1043     typename tuple_type<A1>::const_reference get() const { return m_x; }
1044 private:
1045     typename tuple_type<A1>::reference m_x;
1046 };
1047 
1048 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1049 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 2> : tuple_type<A2> {
1050     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a2) {}
1051     typename tuple_type<A2>::reference get() { return m_x; }
1052     typename tuple_type<A2>::const_reference get() const { return m_x; }
1053 private:
1054     typename tuple_type<A2>::reference m_x;
1055 };
1056 
1057 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1058 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 3> : tuple_type<A3> {
1059     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a3) {}
1060     typename tuple_type<A3>::reference get() { return m_x; }
1061     typename tuple_type<A3>::const_reference get() const { return m_x; }
1062 private:
1063     typename tuple_type<A3>::reference m_x;
1064 };
1065 
1066 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1067 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 4> : tuple_type<A4> {
1068     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a4) {}
1069     typename tuple_type<A4>::reference get() { return m_x; }
1070     typename tuple_type<A4>::const_reference get() const { return m_x; }
1071 private:
1072     typename tuple_type<A4>::reference m_x;
1073 };
1074 
1075 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1076 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 5> : tuple_type<A5> {
1077     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a5) {}
1078     typename tuple_type<A5>::reference get() { return m_x; }
1079     typename tuple_type<A5>::const_reference get() const { return m_x; }
1080 private:
1081     typename tuple_type<A5>::reference m_x;
1082 };
1083 
1084 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1085 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 6> : tuple_type<A6> {
1086     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a6) {}
1087     typename tuple_type<A6>::reference get() { return m_x; }
1088     typename tuple_type<A6>::const_reference get() const { return m_x; }
1089 private:
1090     typename tuple_type<A6>::reference m_x;
1091 };
1092 
1093 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1094 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 7> : tuple_type<A7> {
1095     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a7) {}
1096     typename tuple_type<A7>::reference get() { return m_x; }
1097     typename tuple_type<A7>::const_reference get() const { return m_x; }
1098 private:
1099     typename tuple_type<A7>::reference m_x;
1100 };
1101 
1102 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1103 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 8> : tuple_type<A8> {
1104     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a8) {}
1105     typename tuple_type<A8>::reference get() { return m_x; }
1106     typename tuple_type<A8>::const_reference get() const { return m_x; }
1107 private:
1108     typename tuple_type<A8>::reference m_x;
1109 };
1110 
1111 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1112 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 9> : tuple_type<A9> {
1113     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a9) {}
1114     typename tuple_type<A9>::reference get() { return m_x; }
1115     typename tuple_type<A9>::const_reference get() const { return m_x; }
1116 private:
1117     typename tuple_type<A9>::reference m_x;
1118 };
1119 
1120 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1121 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 10> : tuple_type<A10> {
1122     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a10) {}
1123     typename tuple_type<A10>::reference get() { return m_x; }
1124     typename tuple_type<A10>::const_reference get() const { return m_x; }
1125 private:
1126     typename tuple_type<A10>::reference m_x;
1127 };
1128 
1129 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1130 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 11> : tuple_type<A11> {
1131     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a11) {}
1132     typename tuple_type<A11>::reference get() { return m_x; }
1133     typename tuple_type<A11>::const_reference get() const { return m_x; }
1134 private:
1135     typename tuple_type<A11>::reference m_x;
1136 };
1137 
1138 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1139 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 12> : tuple_type<A12> {
1140     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a12) {}
1141     typename tuple_type<A12>::reference get() { return m_x; }
1142     typename tuple_type<A12>::const_reference get() const { return m_x; }
1143 private:
1144     typename tuple_type<A12>::reference m_x;
1145 };
1146 
1147 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1148 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 13> : tuple_type<A13> {
1149     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a13) {}
1150     typename tuple_type<A13>::reference get() { return m_x; }
1151     typename tuple_type<A13>::const_reference get() const { return m_x; }
1152 private:
1153     typename tuple_type<A13>::reference m_x;
1154 };
1155 
1156 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
1157 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 14> : tuple_type<A14> {
1158     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : m_x(x.a14) {}
1159     typename tuple_type<A14>::reference get() { return m_x; }
1160     typename tuple_type<A14>::const_reference get() const { return m_x; }
1161 private:
1162     typename tuple_type<A14>::reference m_x;
1163 };
1164 
1165 
1166 
1167 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1168 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 0> : tuple_type<A0> {
1169     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a0) {}
1170     typename tuple_type<A0>::reference get() { return m_x; }
1171     typename tuple_type<A0>::const_reference get() const { return m_x; }
1172 private:
1173     typename tuple_type<A0>::reference m_x;
1174 };
1175 
1176 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1177 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 1> : tuple_type<A1> {
1178     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a1) {}
1179     typename tuple_type<A1>::reference get() { return m_x; }
1180     typename tuple_type<A1>::const_reference get() const { return m_x; }
1181 private:
1182     typename tuple_type<A1>::reference m_x;
1183 };
1184 
1185 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1186 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 2> : tuple_type<A2> {
1187     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a2) {}
1188     typename tuple_type<A2>::reference get() { return m_x; }
1189     typename tuple_type<A2>::const_reference get() const { return m_x; }
1190 private:
1191     typename tuple_type<A2>::reference m_x;
1192 };
1193 
1194 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1195 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 3> : tuple_type<A3> {
1196     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a3) {}
1197     typename tuple_type<A3>::reference get() { return m_x; }
1198     typename tuple_type<A3>::const_reference get() const { return m_x; }
1199 private:
1200     typename tuple_type<A3>::reference m_x;
1201 };
1202 
1203 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1204 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 4> : tuple_type<A4> {
1205     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a4) {}
1206     typename tuple_type<A4>::reference get() { return m_x; }
1207     typename tuple_type<A4>::const_reference get() const { return m_x; }
1208 private:
1209     typename tuple_type<A4>::reference m_x;
1210 };
1211 
1212 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1213 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 5> : tuple_type<A5> {
1214     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a5) {}
1215     typename tuple_type<A5>::reference get() { return m_x; }
1216     typename tuple_type<A5>::const_reference get() const { return m_x; }
1217 private:
1218     typename tuple_type<A5>::reference m_x;
1219 };
1220 
1221 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1222 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 6> : tuple_type<A6> {
1223     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a6) {}
1224     typename tuple_type<A6>::reference get() { return m_x; }
1225     typename tuple_type<A6>::const_reference get() const { return m_x; }
1226 private:
1227     typename tuple_type<A6>::reference m_x;
1228 };
1229 
1230 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1231 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 7> : tuple_type<A7> {
1232     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a7) {}
1233     typename tuple_type<A7>::reference get() { return m_x; }
1234     typename tuple_type<A7>::const_reference get() const { return m_x; }
1235 private:
1236     typename tuple_type<A7>::reference m_x;
1237 };
1238 
1239 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1240 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 8> : tuple_type<A8> {
1241     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a8) {}
1242     typename tuple_type<A8>::reference get() { return m_x; }
1243     typename tuple_type<A8>::const_reference get() const { return m_x; }
1244 private:
1245     typename tuple_type<A8>::reference m_x;
1246 };
1247 
1248 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1249 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 9> : tuple_type<A9> {
1250     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a9) {}
1251     typename tuple_type<A9>::reference get() { return m_x; }
1252     typename tuple_type<A9>::const_reference get() const { return m_x; }
1253 private:
1254     typename tuple_type<A9>::reference m_x;
1255 };
1256 
1257 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1258 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 10> : tuple_type<A10> {
1259     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a10) {}
1260     typename tuple_type<A10>::reference get() { return m_x; }
1261     typename tuple_type<A10>::const_reference get() const { return m_x; }
1262 private:
1263     typename tuple_type<A10>::reference m_x;
1264 };
1265 
1266 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1267 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 11> : tuple_type<A11> {
1268     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a11) {}
1269     typename tuple_type<A11>::reference get() { return m_x; }
1270     typename tuple_type<A11>::const_reference get() const { return m_x; }
1271 private:
1272     typename tuple_type<A11>::reference m_x;
1273 };
1274 
1275 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1276 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 12> : tuple_type<A12> {
1277     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a12) {}
1278     typename tuple_type<A12>::reference get() { return m_x; }
1279     typename tuple_type<A12>::const_reference get() const { return m_x; }
1280 private:
1281     typename tuple_type<A12>::reference m_x;
1282 };
1283 
1284 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1285 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 13> : tuple_type<A13> {
1286     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a13) {}
1287     typename tuple_type<A13>::reference get() { return m_x; }
1288     typename tuple_type<A13>::const_reference get() const { return m_x; }
1289 private:
1290     typename tuple_type<A13>::reference m_x;
1291 };
1292 
1293 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1294 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 14> : tuple_type<A14> {
1295     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a14) {}
1296     typename tuple_type<A14>::reference get() { return m_x; }
1297     typename tuple_type<A14>::const_reference get() const { return m_x; }
1298 private:
1299     typename tuple_type<A14>::reference m_x;
1300 };
1301 
1302 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
1303 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 15> : tuple_type<A15> {
1304     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : m_x(x.a15) {}
1305     typename tuple_type<A15>::reference get() { return m_x; }
1306     typename tuple_type<A15>::const_reference get() const { return m_x; }
1307 private:
1308     typename tuple_type<A15>::reference m_x;
1309 };
1310 
1311 
1312 
1313 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1314 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> {
1315     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) {}
1316     typename tuple_type<A0>::reference get() { return m_x; }
1317     typename tuple_type<A0>::const_reference get() const { return m_x; }
1318 private:
1319     typename tuple_type<A0>::reference m_x;
1320 };
1321 
1322 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1323 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> {
1324     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) {}
1325     typename tuple_type<A1>::reference get() { return m_x; }
1326     typename tuple_type<A1>::const_reference get() const { return m_x; }
1327 private:
1328     typename tuple_type<A1>::reference m_x;
1329 };
1330 
1331 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1332 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> {
1333     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) {}
1334     typename tuple_type<A2>::reference get() { return m_x; }
1335     typename tuple_type<A2>::const_reference get() const { return m_x; }
1336 private:
1337     typename tuple_type<A2>::reference m_x;
1338 };
1339 
1340 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1341 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> {
1342     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) {}
1343     typename tuple_type<A3>::reference get() { return m_x; }
1344     typename tuple_type<A3>::const_reference get() const { return m_x; }
1345 private:
1346     typename tuple_type<A3>::reference m_x;
1347 };
1348 
1349 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1350 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> {
1351     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) {}
1352     typename tuple_type<A4>::reference get() { return m_x; }
1353     typename tuple_type<A4>::const_reference get() const { return m_x; }
1354 private:
1355     typename tuple_type<A4>::reference m_x;
1356 };
1357 
1358 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1359 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> {
1360     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) {}
1361     typename tuple_type<A5>::reference get() { return m_x; }
1362     typename tuple_type<A5>::const_reference get() const { return m_x; }
1363 private:
1364     typename tuple_type<A5>::reference m_x;
1365 };
1366 
1367 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1368 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> {
1369     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) {}
1370     typename tuple_type<A6>::reference get() { return m_x; }
1371     typename tuple_type<A6>::const_reference get() const { return m_x; }
1372 private:
1373     typename tuple_type<A6>::reference m_x;
1374 };
1375 
1376 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1377 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> {
1378     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) {}
1379     typename tuple_type<A7>::reference get() { return m_x; }
1380     typename tuple_type<A7>::const_reference get() const { return m_x; }
1381 private:
1382     typename tuple_type<A7>::reference m_x;
1383 };
1384 
1385 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1386 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> {
1387     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) {}
1388     typename tuple_type<A8>::reference get() { return m_x; }
1389     typename tuple_type<A8>::const_reference get() const { return m_x; }
1390 private:
1391     typename tuple_type<A8>::reference m_x;
1392 };
1393 
1394 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1395 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> {
1396     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) {}
1397     typename tuple_type<A9>::reference get() { return m_x; }
1398     typename tuple_type<A9>::const_reference get() const { return m_x; }
1399 private:
1400     typename tuple_type<A9>::reference m_x;
1401 };
1402 
1403 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1404 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> {
1405     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) {}
1406     typename tuple_type<A10>::reference get() { return m_x; }
1407     typename tuple_type<A10>::const_reference get() const { return m_x; }
1408 private:
1409     typename tuple_type<A10>::reference m_x;
1410 };
1411 
1412 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1413 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> {
1414     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) {}
1415     typename tuple_type<A11>::reference get() { return m_x; }
1416     typename tuple_type<A11>::const_reference get() const { return m_x; }
1417 private:
1418     typename tuple_type<A11>::reference m_x;
1419 };
1420 
1421 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1422 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> {
1423     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) {}
1424     typename tuple_type<A12>::reference get() { return m_x; }
1425     typename tuple_type<A12>::const_reference get() const { return m_x; }
1426 private:
1427     typename tuple_type<A12>::reference m_x;
1428 };
1429 
1430 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1431 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> {
1432     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) {}
1433     typename tuple_type<A13>::reference get() { return m_x; }
1434     typename tuple_type<A13>::const_reference get() const { return m_x; }
1435 private:
1436     typename tuple_type<A13>::reference m_x;
1437 };
1438 
1439 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1440 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> {
1441     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) {}
1442     typename tuple_type<A14>::reference get() { return m_x; }
1443     typename tuple_type<A14>::const_reference get() const { return m_x; }
1444 private:
1445     typename tuple_type<A14>::reference m_x;
1446 };
1447 
1448 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1449 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> {
1450     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) {}
1451     typename tuple_type<A15>::reference get() { return m_x; }
1452     typename tuple_type<A15>::const_reference get() const { return m_x; }
1453 private:
1454     typename tuple_type<A15>::reference m_x;
1455 };
1456 
1457 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
1458 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> {
1459     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) {}
1460     typename tuple_type<A16>::reference get() { return m_x; }
1461     typename tuple_type<A16>::const_reference get() const { return m_x; }
1462 private:
1463     typename tuple_type<A16>::reference m_x;
1464 };
1465 
1466 
1467 
1468 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1469 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> {
1470     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) {}
1471     typename tuple_type<A0>::reference get() { return m_x; }
1472     typename tuple_type<A0>::const_reference get() const { return m_x; }
1473 private:
1474     typename tuple_type<A0>::reference m_x;
1475 };
1476 
1477 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1478 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> {
1479     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) {}
1480     typename tuple_type<A1>::reference get() { return m_x; }
1481     typename tuple_type<A1>::const_reference get() const { return m_x; }
1482 private:
1483     typename tuple_type<A1>::reference m_x;
1484 };
1485 
1486 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1487 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> {
1488     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) {}
1489     typename tuple_type<A2>::reference get() { return m_x; }
1490     typename tuple_type<A2>::const_reference get() const { return m_x; }
1491 private:
1492     typename tuple_type<A2>::reference m_x;
1493 };
1494 
1495 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1496 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> {
1497     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) {}
1498     typename tuple_type<A3>::reference get() { return m_x; }
1499     typename tuple_type<A3>::const_reference get() const { return m_x; }
1500 private:
1501     typename tuple_type<A3>::reference m_x;
1502 };
1503 
1504 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1505 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> {
1506     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) {}
1507     typename tuple_type<A4>::reference get() { return m_x; }
1508     typename tuple_type<A4>::const_reference get() const { return m_x; }
1509 private:
1510     typename tuple_type<A4>::reference m_x;
1511 };
1512 
1513 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1514 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> {
1515     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) {}
1516     typename tuple_type<A5>::reference get() { return m_x; }
1517     typename tuple_type<A5>::const_reference get() const { return m_x; }
1518 private:
1519     typename tuple_type<A5>::reference m_x;
1520 };
1521 
1522 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1523 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> {
1524     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) {}
1525     typename tuple_type<A6>::reference get() { return m_x; }
1526     typename tuple_type<A6>::const_reference get() const { return m_x; }
1527 private:
1528     typename tuple_type<A6>::reference m_x;
1529 };
1530 
1531 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1532 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> {
1533     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) {}
1534     typename tuple_type<A7>::reference get() { return m_x; }
1535     typename tuple_type<A7>::const_reference get() const { return m_x; }
1536 private:
1537     typename tuple_type<A7>::reference m_x;
1538 };
1539 
1540 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1541 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> {
1542     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) {}
1543     typename tuple_type<A8>::reference get() { return m_x; }
1544     typename tuple_type<A8>::const_reference get() const { return m_x; }
1545 private:
1546     typename tuple_type<A8>::reference m_x;
1547 };
1548 
1549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1550 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> {
1551     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) {}
1552     typename tuple_type<A9>::reference get() { return m_x; }
1553     typename tuple_type<A9>::const_reference get() const { return m_x; }
1554 private:
1555     typename tuple_type<A9>::reference m_x;
1556 };
1557 
1558 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1559 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> {
1560     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) {}
1561     typename tuple_type<A10>::reference get() { return m_x; }
1562     typename tuple_type<A10>::const_reference get() const { return m_x; }
1563 private:
1564     typename tuple_type<A10>::reference m_x;
1565 };
1566 
1567 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1568 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> {
1569     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) {}
1570     typename tuple_type<A11>::reference get() { return m_x; }
1571     typename tuple_type<A11>::const_reference get() const { return m_x; }
1572 private:
1573     typename tuple_type<A11>::reference m_x;
1574 };
1575 
1576 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1577 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> {
1578     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) {}
1579     typename tuple_type<A12>::reference get() { return m_x; }
1580     typename tuple_type<A12>::const_reference get() const { return m_x; }
1581 private:
1582     typename tuple_type<A12>::reference m_x;
1583 };
1584 
1585 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1586 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> {
1587     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) {}
1588     typename tuple_type<A13>::reference get() { return m_x; }
1589     typename tuple_type<A13>::const_reference get() const { return m_x; }
1590 private:
1591     typename tuple_type<A13>::reference m_x;
1592 };
1593 
1594 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1595 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> {
1596     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) {}
1597     typename tuple_type<A14>::reference get() { return m_x; }
1598     typename tuple_type<A14>::const_reference get() const { return m_x; }
1599 private:
1600     typename tuple_type<A14>::reference m_x;
1601 };
1602 
1603 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1604 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> {
1605     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) {}
1606     typename tuple_type<A15>::reference get() { return m_x; }
1607     typename tuple_type<A15>::const_reference get() const { return m_x; }
1608 private:
1609     typename tuple_type<A15>::reference m_x;
1610 };
1611 
1612 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1613 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> {
1614     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) {}
1615     typename tuple_type<A16>::reference get() { return m_x; }
1616     typename tuple_type<A16>::const_reference get() const { return m_x; }
1617 private:
1618     typename tuple_type<A16>::reference m_x;
1619 };
1620 
1621 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
1622 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> {
1623     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) {}
1624     typename tuple_type<A17>::reference get() { return m_x; }
1625     typename tuple_type<A17>::const_reference get() const { return m_x; }
1626 private:
1627     typename tuple_type<A17>::reference m_x;
1628 };
1629 
1630 
1631 
1632 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1633 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> {
1634     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) {}
1635     typename tuple_type<A0>::reference get() { return m_x; }
1636     typename tuple_type<A0>::const_reference get() const { return m_x; }
1637 private:
1638     typename tuple_type<A0>::reference m_x;
1639 };
1640 
1641 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1642 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> {
1643     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) {}
1644     typename tuple_type<A1>::reference get() { return m_x; }
1645     typename tuple_type<A1>::const_reference get() const { return m_x; }
1646 private:
1647     typename tuple_type<A1>::reference m_x;
1648 };
1649 
1650 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1651 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> {
1652     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) {}
1653     typename tuple_type<A2>::reference get() { return m_x; }
1654     typename tuple_type<A2>::const_reference get() const { return m_x; }
1655 private:
1656     typename tuple_type<A2>::reference m_x;
1657 };
1658 
1659 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1660 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> {
1661     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) {}
1662     typename tuple_type<A3>::reference get() { return m_x; }
1663     typename tuple_type<A3>::const_reference get() const { return m_x; }
1664 private:
1665     typename tuple_type<A3>::reference m_x;
1666 };
1667 
1668 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1669 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> {
1670     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) {}
1671     typename tuple_type<A4>::reference get() { return m_x; }
1672     typename tuple_type<A4>::const_reference get() const { return m_x; }
1673 private:
1674     typename tuple_type<A4>::reference m_x;
1675 };
1676 
1677 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1678 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> {
1679     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) {}
1680     typename tuple_type<A5>::reference get() { return m_x; }
1681     typename tuple_type<A5>::const_reference get() const { return m_x; }
1682 private:
1683     typename tuple_type<A5>::reference m_x;
1684 };
1685 
1686 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1687 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> {
1688     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) {}
1689     typename tuple_type<A6>::reference get() { return m_x; }
1690     typename tuple_type<A6>::const_reference get() const { return m_x; }
1691 private:
1692     typename tuple_type<A6>::reference m_x;
1693 };
1694 
1695 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1696 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> {
1697     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) {}
1698     typename tuple_type<A7>::reference get() { return m_x; }
1699     typename tuple_type<A7>::const_reference get() const { return m_x; }
1700 private:
1701     typename tuple_type<A7>::reference m_x;
1702 };
1703 
1704 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1705 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> {
1706     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) {}
1707     typename tuple_type<A8>::reference get() { return m_x; }
1708     typename tuple_type<A8>::const_reference get() const { return m_x; }
1709 private:
1710     typename tuple_type<A8>::reference m_x;
1711 };
1712 
1713 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1714 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> {
1715     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) {}
1716     typename tuple_type<A9>::reference get() { return m_x; }
1717     typename tuple_type<A9>::const_reference get() const { return m_x; }
1718 private:
1719     typename tuple_type<A9>::reference m_x;
1720 };
1721 
1722 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1723 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> {
1724     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) {}
1725     typename tuple_type<A10>::reference get() { return m_x; }
1726     typename tuple_type<A10>::const_reference get() const { return m_x; }
1727 private:
1728     typename tuple_type<A10>::reference m_x;
1729 };
1730 
1731 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1732 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> {
1733     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) {}
1734     typename tuple_type<A11>::reference get() { return m_x; }
1735     typename tuple_type<A11>::const_reference get() const { return m_x; }
1736 private:
1737     typename tuple_type<A11>::reference m_x;
1738 };
1739 
1740 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1741 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> {
1742     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) {}
1743     typename tuple_type<A12>::reference get() { return m_x; }
1744     typename tuple_type<A12>::const_reference get() const { return m_x; }
1745 private:
1746     typename tuple_type<A12>::reference m_x;
1747 };
1748 
1749 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1750 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> {
1751     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) {}
1752     typename tuple_type<A13>::reference get() { return m_x; }
1753     typename tuple_type<A13>::const_reference get() const { return m_x; }
1754 private:
1755     typename tuple_type<A13>::reference m_x;
1756 };
1757 
1758 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1759 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> {
1760     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) {}
1761     typename tuple_type<A14>::reference get() { return m_x; }
1762     typename tuple_type<A14>::const_reference get() const { return m_x; }
1763 private:
1764     typename tuple_type<A14>::reference m_x;
1765 };
1766 
1767 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1768 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> {
1769     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) {}
1770     typename tuple_type<A15>::reference get() { return m_x; }
1771     typename tuple_type<A15>::const_reference get() const { return m_x; }
1772 private:
1773     typename tuple_type<A15>::reference m_x;
1774 };
1775 
1776 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1777 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> {
1778     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) {}
1779     typename tuple_type<A16>::reference get() { return m_x; }
1780     typename tuple_type<A16>::const_reference get() const { return m_x; }
1781 private:
1782     typename tuple_type<A16>::reference m_x;
1783 };
1784 
1785 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1786 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> {
1787     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) {}
1788     typename tuple_type<A17>::reference get() { return m_x; }
1789     typename tuple_type<A17>::const_reference get() const { return m_x; }
1790 private:
1791     typename tuple_type<A17>::reference m_x;
1792 };
1793 
1794 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
1795 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> {
1796     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) {}
1797     typename tuple_type<A18>::reference get() { return m_x; }
1798     typename tuple_type<A18>::const_reference get() const { return m_x; }
1799 private:
1800     typename tuple_type<A18>::reference m_x;
1801 };
1802 
1803 
1804 
1805 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1806 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> {
1807     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) {}
1808     typename tuple_type<A0>::reference get() { return m_x; }
1809     typename tuple_type<A0>::const_reference get() const { return m_x; }
1810 private:
1811     typename tuple_type<A0>::reference m_x;
1812 };
1813 
1814 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1815 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> {
1816     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) {}
1817     typename tuple_type<A1>::reference get() { return m_x; }
1818     typename tuple_type<A1>::const_reference get() const { return m_x; }
1819 private:
1820     typename tuple_type<A1>::reference m_x;
1821 };
1822 
1823 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1824 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> {
1825     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) {}
1826     typename tuple_type<A2>::reference get() { return m_x; }
1827     typename tuple_type<A2>::const_reference get() const { return m_x; }
1828 private:
1829     typename tuple_type<A2>::reference m_x;
1830 };
1831 
1832 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1833 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> {
1834     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) {}
1835     typename tuple_type<A3>::reference get() { return m_x; }
1836     typename tuple_type<A3>::const_reference get() const { return m_x; }
1837 private:
1838     typename tuple_type<A3>::reference m_x;
1839 };
1840 
1841 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1842 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> {
1843     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) {}
1844     typename tuple_type<A4>::reference get() { return m_x; }
1845     typename tuple_type<A4>::const_reference get() const { return m_x; }
1846 private:
1847     typename tuple_type<A4>::reference m_x;
1848 };
1849 
1850 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1851 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> {
1852     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) {}
1853     typename tuple_type<A5>::reference get() { return m_x; }
1854     typename tuple_type<A5>::const_reference get() const { return m_x; }
1855 private:
1856     typename tuple_type<A5>::reference m_x;
1857 };
1858 
1859 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1860 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> {
1861     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) {}
1862     typename tuple_type<A6>::reference get() { return m_x; }
1863     typename tuple_type<A6>::const_reference get() const { return m_x; }
1864 private:
1865     typename tuple_type<A6>::reference m_x;
1866 };
1867 
1868 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1869 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> {
1870     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) {}
1871     typename tuple_type<A7>::reference get() { return m_x; }
1872     typename tuple_type<A7>::const_reference get() const { return m_x; }
1873 private:
1874     typename tuple_type<A7>::reference m_x;
1875 };
1876 
1877 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1878 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> {
1879     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) {}
1880     typename tuple_type<A8>::reference get() { return m_x; }
1881     typename tuple_type<A8>::const_reference get() const { return m_x; }
1882 private:
1883     typename tuple_type<A8>::reference m_x;
1884 };
1885 
1886 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1887 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> {
1888     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) {}
1889     typename tuple_type<A9>::reference get() { return m_x; }
1890     typename tuple_type<A9>::const_reference get() const { return m_x; }
1891 private:
1892     typename tuple_type<A9>::reference m_x;
1893 };
1894 
1895 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1896 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> {
1897     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) {}
1898     typename tuple_type<A10>::reference get() { return m_x; }
1899     typename tuple_type<A10>::const_reference get() const { return m_x; }
1900 private:
1901     typename tuple_type<A10>::reference m_x;
1902 };
1903 
1904 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1905 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> {
1906     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) {}
1907     typename tuple_type<A11>::reference get() { return m_x; }
1908     typename tuple_type<A11>::const_reference get() const { return m_x; }
1909 private:
1910     typename tuple_type<A11>::reference m_x;
1911 };
1912 
1913 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1914 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> {
1915     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) {}
1916     typename tuple_type<A12>::reference get() { return m_x; }
1917     typename tuple_type<A12>::const_reference get() const { return m_x; }
1918 private:
1919     typename tuple_type<A12>::reference m_x;
1920 };
1921 
1922 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1923 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> {
1924     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) {}
1925     typename tuple_type<A13>::reference get() { return m_x; }
1926     typename tuple_type<A13>::const_reference get() const { return m_x; }
1927 private:
1928     typename tuple_type<A13>::reference m_x;
1929 };
1930 
1931 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1932 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> {
1933     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) {}
1934     typename tuple_type<A14>::reference get() { return m_x; }
1935     typename tuple_type<A14>::const_reference get() const { return m_x; }
1936 private:
1937     typename tuple_type<A14>::reference m_x;
1938 };
1939 
1940 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1941 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> {
1942     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) {}
1943     typename tuple_type<A15>::reference get() { return m_x; }
1944     typename tuple_type<A15>::const_reference get() const { return m_x; }
1945 private:
1946     typename tuple_type<A15>::reference m_x;
1947 };
1948 
1949 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1950 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> {
1951     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) {}
1952     typename tuple_type<A16>::reference get() { return m_x; }
1953     typename tuple_type<A16>::const_reference get() const { return m_x; }
1954 private:
1955     typename tuple_type<A16>::reference m_x;
1956 };
1957 
1958 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1959 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> {
1960     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) {}
1961     typename tuple_type<A17>::reference get() { return m_x; }
1962     typename tuple_type<A17>::const_reference get() const { return m_x; }
1963 private:
1964     typename tuple_type<A17>::reference m_x;
1965 };
1966 
1967 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1968 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> {
1969     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) {}
1970     typename tuple_type<A18>::reference get() { return m_x; }
1971     typename tuple_type<A18>::const_reference get() const { return m_x; }
1972 private:
1973     typename tuple_type<A18>::reference m_x;
1974 };
1975 
1976 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
1977 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> {
1978     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) {}
1979     typename tuple_type<A19>::reference get() { return m_x; }
1980     typename tuple_type<A19>::const_reference get() const { return m_x; }
1981 private:
1982     typename tuple_type<A19>::reference m_x;
1983 };
1984 
1985 
1986 
1987 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
1988 struct 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> {
1989     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) {}
1990     typename tuple_type<A0>::reference get() { return m_x; }
1991     typename tuple_type<A0>::const_reference get() const { return m_x; }
1992 private:
1993     typename tuple_type<A0>::reference m_x;
1994 };
1995 
1996 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
1997 struct 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> {
1998     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) {}
1999     typename tuple_type<A1>::reference get() { return m_x; }
2000     typename tuple_type<A1>::const_reference get() const { return m_x; }
2001 private:
2002     typename tuple_type<A1>::reference m_x;
2003 };
2004 
2005 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2006 struct 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> {
2007     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) {}
2008     typename tuple_type<A2>::reference get() { return m_x; }
2009     typename tuple_type<A2>::const_reference get() const { return m_x; }
2010 private:
2011     typename tuple_type<A2>::reference m_x;
2012 };
2013 
2014 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2015 struct 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> {
2016     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) {}
2017     typename tuple_type<A3>::reference get() { return m_x; }
2018     typename tuple_type<A3>::const_reference get() const { return m_x; }
2019 private:
2020     typename tuple_type<A3>::reference m_x;
2021 };
2022 
2023 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2024 struct 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> {
2025     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) {}
2026     typename tuple_type<A4>::reference get() { return m_x; }
2027     typename tuple_type<A4>::const_reference get() const { return m_x; }
2028 private:
2029     typename tuple_type<A4>::reference m_x;
2030 };
2031 
2032 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2033 struct 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> {
2034     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) {}
2035     typename tuple_type<A5>::reference get() { return m_x; }
2036     typename tuple_type<A5>::const_reference get() const { return m_x; }
2037 private:
2038     typename tuple_type<A5>::reference m_x;
2039 };
2040 
2041 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2042 struct 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> {
2043     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) {}
2044     typename tuple_type<A6>::reference get() { return m_x; }
2045     typename tuple_type<A6>::const_reference get() const { return m_x; }
2046 private:
2047     typename tuple_type<A6>::reference m_x;
2048 };
2049 
2050 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2051 struct 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> {
2052     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) {}
2053     typename tuple_type<A7>::reference get() { return m_x; }
2054     typename tuple_type<A7>::const_reference get() const { return m_x; }
2055 private:
2056     typename tuple_type<A7>::reference m_x;
2057 };
2058 
2059 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2060 struct 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> {
2061     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) {}
2062     typename tuple_type<A8>::reference get() { return m_x; }
2063     typename tuple_type<A8>::const_reference get() const { return m_x; }
2064 private:
2065     typename tuple_type<A8>::reference m_x;
2066 };
2067 
2068 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2069 struct 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> {
2070     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) {}
2071     typename tuple_type<A9>::reference get() { return m_x; }
2072     typename tuple_type<A9>::const_reference get() const { return m_x; }
2073 private:
2074     typename tuple_type<A9>::reference m_x;
2075 };
2076 
2077 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2078 struct 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> {
2079     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) {}
2080     typename tuple_type<A10>::reference get() { return m_x; }
2081     typename tuple_type<A10>::const_reference get() const { return m_x; }
2082 private:
2083     typename tuple_type<A10>::reference m_x;
2084 };
2085 
2086 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2087 struct 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> {
2088     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) {}
2089     typename tuple_type<A11>::reference get() { return m_x; }
2090     typename tuple_type<A11>::const_reference get() const { return m_x; }
2091 private:
2092     typename tuple_type<A11>::reference m_x;
2093 };
2094 
2095 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2096 struct 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> {
2097     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) {}
2098     typename tuple_type<A12>::reference get() { return m_x; }
2099     typename tuple_type<A12>::const_reference get() const { return m_x; }
2100 private:
2101     typename tuple_type<A12>::reference m_x;
2102 };
2103 
2104 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2105 struct 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> {
2106     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) {}
2107     typename tuple_type<A13>::reference get() { return m_x; }
2108     typename tuple_type<A13>::const_reference get() const { return m_x; }
2109 private:
2110     typename tuple_type<A13>::reference m_x;
2111 };
2112 
2113 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2114 struct 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> {
2115     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) {}
2116     typename tuple_type<A14>::reference get() { return m_x; }
2117     typename tuple_type<A14>::const_reference get() const { return m_x; }
2118 private:
2119     typename tuple_type<A14>::reference m_x;
2120 };
2121 
2122 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2123 struct 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> {
2124     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) {}
2125     typename tuple_type<A15>::reference get() { return m_x; }
2126     typename tuple_type<A15>::const_reference get() const { return m_x; }
2127 private:
2128     typename tuple_type<A15>::reference m_x;
2129 };
2130 
2131 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2132 struct 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> {
2133     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) {}
2134     typename tuple_type<A16>::reference get() { return m_x; }
2135     typename tuple_type<A16>::const_reference get() const { return m_x; }
2136 private:
2137     typename tuple_type<A16>::reference m_x;
2138 };
2139 
2140 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2141 struct 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> {
2142     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) {}
2143     typename tuple_type<A17>::reference get() { return m_x; }
2144     typename tuple_type<A17>::const_reference get() const { return m_x; }
2145 private:
2146     typename tuple_type<A17>::reference m_x;
2147 };
2148 
2149 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2150 struct 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> {
2151     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) {}
2152     typename tuple_type<A18>::reference get() { return m_x; }
2153     typename tuple_type<A18>::const_reference get() const { return m_x; }
2154 private:
2155     typename tuple_type<A18>::reference m_x;
2156 };
2157 
2158 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2159 struct 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> {
2160     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) {}
2161     typename tuple_type<A19>::reference get() { return m_x; }
2162     typename tuple_type<A19>::const_reference get() const { return m_x; }
2163 private:
2164     typename tuple_type<A19>::reference m_x;
2165 };
2166 
2167 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
2168 struct 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> {
2169     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) {}
2170     typename tuple_type<A20>::reference get() { return m_x; }
2171     typename tuple_type<A20>::const_reference get() const { return m_x; }
2172 private:
2173     typename tuple_type<A20>::reference m_x;
2174 };
2175 
2176 
2177 
2178 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2179 struct tuple_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> {
2180     tuple_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) {}
2181     typename tuple_type<A0>::reference get() { return m_x; }
2182     typename tuple_type<A0>::const_reference get() const { return m_x; }
2183 private:
2184     typename tuple_type<A0>::reference m_x;
2185 };
2186 
2187 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2188 struct tuple_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> {
2189     tuple_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) {}
2190     typename tuple_type<A1>::reference get() { return m_x; }
2191     typename tuple_type<A1>::const_reference get() const { return m_x; }
2192 private:
2193     typename tuple_type<A1>::reference m_x;
2194 };
2195 
2196 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2197 struct tuple_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> {
2198     tuple_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) {}
2199     typename tuple_type<A2>::reference get() { return m_x; }
2200     typename tuple_type<A2>::const_reference get() const { return m_x; }
2201 private:
2202     typename tuple_type<A2>::reference m_x;
2203 };
2204 
2205 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2206 struct tuple_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> {
2207     tuple_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) {}
2208     typename tuple_type<A3>::reference get() { return m_x; }
2209     typename tuple_type<A3>::const_reference get() const { return m_x; }
2210 private:
2211     typename tuple_type<A3>::reference m_x;
2212 };
2213 
2214 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2215 struct tuple_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> {
2216     tuple_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) {}
2217     typename tuple_type<A4>::reference get() { return m_x; }
2218     typename tuple_type<A4>::const_reference get() const { return m_x; }
2219 private:
2220     typename tuple_type<A4>::reference m_x;
2221 };
2222 
2223 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2224 struct tuple_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> {
2225     tuple_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) {}
2226     typename tuple_type<A5>::reference get() { return m_x; }
2227     typename tuple_type<A5>::const_reference get() const { return m_x; }
2228 private:
2229     typename tuple_type<A5>::reference m_x;
2230 };
2231 
2232 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2233 struct tuple_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> {
2234     tuple_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) {}
2235     typename tuple_type<A6>::reference get() { return m_x; }
2236     typename tuple_type<A6>::const_reference get() const { return m_x; }
2237 private:
2238     typename tuple_type<A6>::reference m_x;
2239 };
2240 
2241 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2242 struct tuple_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> {
2243     tuple_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) {}
2244     typename tuple_type<A7>::reference get() { return m_x; }
2245     typename tuple_type<A7>::const_reference get() const { return m_x; }
2246 private:
2247     typename tuple_type<A7>::reference m_x;
2248 };
2249 
2250 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2251 struct tuple_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> {
2252     tuple_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) {}
2253     typename tuple_type<A8>::reference get() { return m_x; }
2254     typename tuple_type<A8>::const_reference get() const { return m_x; }
2255 private:
2256     typename tuple_type<A8>::reference m_x;
2257 };
2258 
2259 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2260 struct tuple_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> {
2261     tuple_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) {}
2262     typename tuple_type<A9>::reference get() { return m_x; }
2263     typename tuple_type<A9>::const_reference get() const { return m_x; }
2264 private:
2265     typename tuple_type<A9>::reference m_x;
2266 };
2267 
2268 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2269 struct tuple_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> {
2270     tuple_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) {}
2271     typename tuple_type<A10>::reference get() { return m_x; }
2272     typename tuple_type<A10>::const_reference get() const { return m_x; }
2273 private:
2274     typename tuple_type<A10>::reference m_x;
2275 };
2276 
2277 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2278 struct tuple_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> {
2279     tuple_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) {}
2280     typename tuple_type<A11>::reference get() { return m_x; }
2281     typename tuple_type<A11>::const_reference get() const { return m_x; }
2282 private:
2283     typename tuple_type<A11>::reference m_x;
2284 };
2285 
2286 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2287 struct tuple_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> {
2288     tuple_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) {}
2289     typename tuple_type<A12>::reference get() { return m_x; }
2290     typename tuple_type<A12>::const_reference get() const { return m_x; }
2291 private:
2292     typename tuple_type<A12>::reference m_x;
2293 };
2294 
2295 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2296 struct tuple_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> {
2297     tuple_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) {}
2298     typename tuple_type<A13>::reference get() { return m_x; }
2299     typename tuple_type<A13>::const_reference get() const { return m_x; }
2300 private:
2301     typename tuple_type<A13>::reference m_x;
2302 };
2303 
2304 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2305 struct tuple_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> {
2306     tuple_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) {}
2307     typename tuple_type<A14>::reference get() { return m_x; }
2308     typename tuple_type<A14>::const_reference get() const { return m_x; }
2309 private:
2310     typename tuple_type<A14>::reference m_x;
2311 };
2312 
2313 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2314 struct tuple_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> {
2315     tuple_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) {}
2316     typename tuple_type<A15>::reference get() { return m_x; }
2317     typename tuple_type<A15>::const_reference get() const { return m_x; }
2318 private:
2319     typename tuple_type<A15>::reference m_x;
2320 };
2321 
2322 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2323 struct tuple_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> {
2324     tuple_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) {}
2325     typename tuple_type<A16>::reference get() { return m_x; }
2326     typename tuple_type<A16>::const_reference get() const { return m_x; }
2327 private:
2328     typename tuple_type<A16>::reference m_x;
2329 };
2330 
2331 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2332 struct tuple_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> {
2333     tuple_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) {}
2334     typename tuple_type<A17>::reference get() { return m_x; }
2335     typename tuple_type<A17>::const_reference get() const { return m_x; }
2336 private:
2337     typename tuple_type<A17>::reference m_x;
2338 };
2339 
2340 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2341 struct tuple_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> {
2342     tuple_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) {}
2343     typename tuple_type<A18>::reference get() { return m_x; }
2344     typename tuple_type<A18>::const_reference get() const { return m_x; }
2345 private:
2346     typename tuple_type<A18>::reference m_x;
2347 };
2348 
2349 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2350 struct tuple_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> {
2351     tuple_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) {}
2352     typename tuple_type<A19>::reference get() { return m_x; }
2353     typename tuple_type<A19>::const_reference get() const { return m_x; }
2354 private:
2355     typename tuple_type<A19>::reference m_x;
2356 };
2357 
2358 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2359 struct tuple_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> {
2360     tuple_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) {}
2361     typename tuple_type<A20>::reference get() { return m_x; }
2362     typename tuple_type<A20>::const_reference get() const { return m_x; }
2363 private:
2364     typename tuple_type<A20>::reference m_x;
2365 };
2366 
2367 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
2368 struct tuple_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> {
2369     tuple_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) {}
2370     typename tuple_type<A21>::reference get() { return m_x; }
2371     typename tuple_type<A21>::const_reference get() const { return m_x; }
2372 private:
2373     typename tuple_type<A21>::reference m_x;
2374 };
2375 
2376 
2377 
2378 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2379 struct tuple_element<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> {
2380     tuple_element(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) {}
2381     typename tuple_type<A0>::reference get() { return m_x; }
2382     typename tuple_type<A0>::const_reference get() const { return m_x; }
2383 private:
2384     typename tuple_type<A0>::reference m_x;
2385 };
2386 
2387 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2388 struct tuple_element<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> {
2389     tuple_element(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) {}
2390     typename tuple_type<A1>::reference get() { return m_x; }
2391     typename tuple_type<A1>::const_reference get() const { return m_x; }
2392 private:
2393     typename tuple_type<A1>::reference m_x;
2394 };
2395 
2396 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2397 struct tuple_element<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> {
2398     tuple_element(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) {}
2399     typename tuple_type<A2>::reference get() { return m_x; }
2400     typename tuple_type<A2>::const_reference get() const { return m_x; }
2401 private:
2402     typename tuple_type<A2>::reference m_x;
2403 };
2404 
2405 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2406 struct tuple_element<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> {
2407     tuple_element(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) {}
2408     typename tuple_type<A3>::reference get() { return m_x; }
2409     typename tuple_type<A3>::const_reference get() const { return m_x; }
2410 private:
2411     typename tuple_type<A3>::reference m_x;
2412 };
2413 
2414 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2415 struct tuple_element<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> {
2416     tuple_element(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) {}
2417     typename tuple_type<A4>::reference get() { return m_x; }
2418     typename tuple_type<A4>::const_reference get() const { return m_x; }
2419 private:
2420     typename tuple_type<A4>::reference m_x;
2421 };
2422 
2423 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2424 struct tuple_element<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> {
2425     tuple_element(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) {}
2426     typename tuple_type<A5>::reference get() { return m_x; }
2427     typename tuple_type<A5>::const_reference get() const { return m_x; }
2428 private:
2429     typename tuple_type<A5>::reference m_x;
2430 };
2431 
2432 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2433 struct tuple_element<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> {
2434     tuple_element(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) {}
2435     typename tuple_type<A6>::reference get() { return m_x; }
2436     typename tuple_type<A6>::const_reference get() const { return m_x; }
2437 private:
2438     typename tuple_type<A6>::reference m_x;
2439 };
2440 
2441 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2442 struct tuple_element<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> {
2443     tuple_element(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) {}
2444     typename tuple_type<A7>::reference get() { return m_x; }
2445     typename tuple_type<A7>::const_reference get() const { return m_x; }
2446 private:
2447     typename tuple_type<A7>::reference m_x;
2448 };
2449 
2450 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2451 struct tuple_element<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> {
2452     tuple_element(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) {}
2453     typename tuple_type<A8>::reference get() { return m_x; }
2454     typename tuple_type<A8>::const_reference get() const { return m_x; }
2455 private:
2456     typename tuple_type<A8>::reference m_x;
2457 };
2458 
2459 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2460 struct tuple_element<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> {
2461     tuple_element(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) {}
2462     typename tuple_type<A9>::reference get() { return m_x; }
2463     typename tuple_type<A9>::const_reference get() const { return m_x; }
2464 private:
2465     typename tuple_type<A9>::reference m_x;
2466 };
2467 
2468 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2469 struct tuple_element<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> {
2470     tuple_element(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) {}
2471     typename tuple_type<A10>::reference get() { return m_x; }
2472     typename tuple_type<A10>::const_reference get() const { return m_x; }
2473 private:
2474     typename tuple_type<A10>::reference m_x;
2475 };
2476 
2477 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2478 struct tuple_element<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> {
2479     tuple_element(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) {}
2480     typename tuple_type<A11>::reference get() { return m_x; }
2481     typename tuple_type<A11>::const_reference get() const { return m_x; }
2482 private:
2483     typename tuple_type<A11>::reference m_x;
2484 };
2485 
2486 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2487 struct tuple_element<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> {
2488     tuple_element(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) {}
2489     typename tuple_type<A12>::reference get() { return m_x; }
2490     typename tuple_type<A12>::const_reference get() const { return m_x; }
2491 private:
2492     typename tuple_type<A12>::reference m_x;
2493 };
2494 
2495 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2496 struct tuple_element<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> {
2497     tuple_element(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) {}
2498     typename tuple_type<A13>::reference get() { return m_x; }
2499     typename tuple_type<A13>::const_reference get() const { return m_x; }
2500 private:
2501     typename tuple_type<A13>::reference m_x;
2502 };
2503 
2504 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2505 struct tuple_element<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> {
2506     tuple_element(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) {}
2507     typename tuple_type<A14>::reference get() { return m_x; }
2508     typename tuple_type<A14>::const_reference get() const { return m_x; }
2509 private:
2510     typename tuple_type<A14>::reference m_x;
2511 };
2512 
2513 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2514 struct tuple_element<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> {
2515     tuple_element(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) {}
2516     typename tuple_type<A15>::reference get() { return m_x; }
2517     typename tuple_type<A15>::const_reference get() const { return m_x; }
2518 private:
2519     typename tuple_type<A15>::reference m_x;
2520 };
2521 
2522 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2523 struct tuple_element<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> {
2524     tuple_element(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) {}
2525     typename tuple_type<A16>::reference get() { return m_x; }
2526     typename tuple_type<A16>::const_reference get() const { return m_x; }
2527 private:
2528     typename tuple_type<A16>::reference m_x;
2529 };
2530 
2531 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2532 struct tuple_element<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> {
2533     tuple_element(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) {}
2534     typename tuple_type<A17>::reference get() { return m_x; }
2535     typename tuple_type<A17>::const_reference get() const { return m_x; }
2536 private:
2537     typename tuple_type<A17>::reference m_x;
2538 };
2539 
2540 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2541 struct tuple_element<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> {
2542     tuple_element(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) {}
2543     typename tuple_type<A18>::reference get() { return m_x; }
2544     typename tuple_type<A18>::const_reference get() const { return m_x; }
2545 private:
2546     typename tuple_type<A18>::reference m_x;
2547 };
2548 
2549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2550 struct tuple_element<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> {
2551     tuple_element(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) {}
2552     typename tuple_type<A19>::reference get() { return m_x; }
2553     typename tuple_type<A19>::const_reference get() const { return m_x; }
2554 private:
2555     typename tuple_type<A19>::reference m_x;
2556 };
2557 
2558 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2559 struct tuple_element<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> {
2560     tuple_element(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) {}
2561     typename tuple_type<A20>::reference get() { return m_x; }
2562     typename tuple_type<A20>::const_reference get() const { return m_x; }
2563 private:
2564     typename tuple_type<A20>::reference m_x;
2565 };
2566 
2567 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2568 struct tuple_element<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> {
2569     tuple_element(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) {}
2570     typename tuple_type<A21>::reference get() { return m_x; }
2571     typename tuple_type<A21>::const_reference get() const { return m_x; }
2572 private:
2573     typename tuple_type<A21>::reference m_x;
2574 };
2575 
2576 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
2577 struct tuple_element<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> {
2578     tuple_element(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) {}
2579     typename tuple_type<A22>::reference get() { return m_x; }
2580     typename tuple_type<A22>::const_reference get() const { return m_x; }
2581 private:
2582     typename tuple_type<A22>::reference m_x;
2583 };
2584 
2585 
2586 
2587 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2588 struct tuple_element<tuple<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> {
2589     tuple_element(tuple<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) {}
2590     typename tuple_type<A0>::reference get() { return m_x; }
2591     typename tuple_type<A0>::const_reference get() const { return m_x; }
2592 private:
2593     typename tuple_type<A0>::reference m_x;
2594 };
2595 
2596 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2597 struct tuple_element<tuple<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> {
2598     tuple_element(tuple<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) {}
2599     typename tuple_type<A1>::reference get() { return m_x; }
2600     typename tuple_type<A1>::const_reference get() const { return m_x; }
2601 private:
2602     typename tuple_type<A1>::reference m_x;
2603 };
2604 
2605 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2606 struct tuple_element<tuple<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> {
2607     tuple_element(tuple<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) {}
2608     typename tuple_type<A2>::reference get() { return m_x; }
2609     typename tuple_type<A2>::const_reference get() const { return m_x; }
2610 private:
2611     typename tuple_type<A2>::reference m_x;
2612 };
2613 
2614 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2615 struct tuple_element<tuple<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> {
2616     tuple_element(tuple<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) {}
2617     typename tuple_type<A3>::reference get() { return m_x; }
2618     typename tuple_type<A3>::const_reference get() const { return m_x; }
2619 private:
2620     typename tuple_type<A3>::reference m_x;
2621 };
2622 
2623 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2624 struct tuple_element<tuple<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> {
2625     tuple_element(tuple<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) {}
2626     typename tuple_type<A4>::reference get() { return m_x; }
2627     typename tuple_type<A4>::const_reference get() const { return m_x; }
2628 private:
2629     typename tuple_type<A4>::reference m_x;
2630 };
2631 
2632 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2633 struct tuple_element<tuple<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> {
2634     tuple_element(tuple<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) {}
2635     typename tuple_type<A5>::reference get() { return m_x; }
2636     typename tuple_type<A5>::const_reference get() const { return m_x; }
2637 private:
2638     typename tuple_type<A5>::reference m_x;
2639 };
2640 
2641 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2642 struct tuple_element<tuple<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> {
2643     tuple_element(tuple<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) {}
2644     typename tuple_type<A6>::reference get() { return m_x; }
2645     typename tuple_type<A6>::const_reference get() const { return m_x; }
2646 private:
2647     typename tuple_type<A6>::reference m_x;
2648 };
2649 
2650 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2651 struct tuple_element<tuple<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> {
2652     tuple_element(tuple<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) {}
2653     typename tuple_type<A7>::reference get() { return m_x; }
2654     typename tuple_type<A7>::const_reference get() const { return m_x; }
2655 private:
2656     typename tuple_type<A7>::reference m_x;
2657 };
2658 
2659 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2660 struct tuple_element<tuple<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> {
2661     tuple_element(tuple<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) {}
2662     typename tuple_type<A8>::reference get() { return m_x; }
2663     typename tuple_type<A8>::const_reference get() const { return m_x; }
2664 private:
2665     typename tuple_type<A8>::reference m_x;
2666 };
2667 
2668 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2669 struct tuple_element<tuple<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> {
2670     tuple_element(tuple<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) {}
2671     typename tuple_type<A9>::reference get() { return m_x; }
2672     typename tuple_type<A9>::const_reference get() const { return m_x; }
2673 private:
2674     typename tuple_type<A9>::reference m_x;
2675 };
2676 
2677 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2678 struct tuple_element<tuple<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> {
2679     tuple_element(tuple<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) {}
2680     typename tuple_type<A10>::reference get() { return m_x; }
2681     typename tuple_type<A10>::const_reference get() const { return m_x; }
2682 private:
2683     typename tuple_type<A10>::reference m_x;
2684 };
2685 
2686 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2687 struct tuple_element<tuple<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> {
2688     tuple_element(tuple<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) {}
2689     typename tuple_type<A11>::reference get() { return m_x; }
2690     typename tuple_type<A11>::const_reference get() const { return m_x; }
2691 private:
2692     typename tuple_type<A11>::reference m_x;
2693 };
2694 
2695 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2696 struct tuple_element<tuple<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> {
2697     tuple_element(tuple<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) {}
2698     typename tuple_type<A12>::reference get() { return m_x; }
2699     typename tuple_type<A12>::const_reference get() const { return m_x; }
2700 private:
2701     typename tuple_type<A12>::reference m_x;
2702 };
2703 
2704 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2705 struct tuple_element<tuple<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> {
2706     tuple_element(tuple<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) {}
2707     typename tuple_type<A13>::reference get() { return m_x; }
2708     typename tuple_type<A13>::const_reference get() const { return m_x; }
2709 private:
2710     typename tuple_type<A13>::reference m_x;
2711 };
2712 
2713 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2714 struct tuple_element<tuple<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> {
2715     tuple_element(tuple<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) {}
2716     typename tuple_type<A14>::reference get() { return m_x; }
2717     typename tuple_type<A14>::const_reference get() const { return m_x; }
2718 private:
2719     typename tuple_type<A14>::reference m_x;
2720 };
2721 
2722 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2723 struct tuple_element<tuple<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> {
2724     tuple_element(tuple<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) {}
2725     typename tuple_type<A15>::reference get() { return m_x; }
2726     typename tuple_type<A15>::const_reference get() const { return m_x; }
2727 private:
2728     typename tuple_type<A15>::reference m_x;
2729 };
2730 
2731 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2732 struct tuple_element<tuple<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> {
2733     tuple_element(tuple<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) {}
2734     typename tuple_type<A16>::reference get() { return m_x; }
2735     typename tuple_type<A16>::const_reference get() const { return m_x; }
2736 private:
2737     typename tuple_type<A16>::reference m_x;
2738 };
2739 
2740 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2741 struct tuple_element<tuple<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> {
2742     tuple_element(tuple<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) {}
2743     typename tuple_type<A17>::reference get() { return m_x; }
2744     typename tuple_type<A17>::const_reference get() const { return m_x; }
2745 private:
2746     typename tuple_type<A17>::reference m_x;
2747 };
2748 
2749 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2750 struct tuple_element<tuple<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> {
2751     tuple_element(tuple<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) {}
2752     typename tuple_type<A18>::reference get() { return m_x; }
2753     typename tuple_type<A18>::const_reference get() const { return m_x; }
2754 private:
2755     typename tuple_type<A18>::reference m_x;
2756 };
2757 
2758 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2759 struct tuple_element<tuple<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> {
2760     tuple_element(tuple<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) {}
2761     typename tuple_type<A19>::reference get() { return m_x; }
2762     typename tuple_type<A19>::const_reference get() const { return m_x; }
2763 private:
2764     typename tuple_type<A19>::reference m_x;
2765 };
2766 
2767 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2768 struct tuple_element<tuple<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> {
2769     tuple_element(tuple<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) {}
2770     typename tuple_type<A20>::reference get() { return m_x; }
2771     typename tuple_type<A20>::const_reference get() const { return m_x; }
2772 private:
2773     typename tuple_type<A20>::reference m_x;
2774 };
2775 
2776 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2777 struct tuple_element<tuple<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> {
2778     tuple_element(tuple<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) {}
2779     typename tuple_type<A21>::reference get() { return m_x; }
2780     typename tuple_type<A21>::const_reference get() const { return m_x; }
2781 private:
2782     typename tuple_type<A21>::reference m_x;
2783 };
2784 
2785 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2786 struct tuple_element<tuple<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> {
2787     tuple_element(tuple<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) {}
2788     typename tuple_type<A22>::reference get() { return m_x; }
2789     typename tuple_type<A22>::const_reference get() const { return m_x; }
2790 private:
2791     typename tuple_type<A22>::reference m_x;
2792 };
2793 
2794 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
2795 struct tuple_element<tuple<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> {
2796     tuple_element(tuple<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) {}
2797     typename tuple_type<A23>::reference get() { return m_x; }
2798     typename tuple_type<A23>::const_reference get() const { return m_x; }
2799 private:
2800     typename tuple_type<A23>::reference m_x;
2801 };
2802 
2803 
2804 
2805 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2806 struct tuple_element<tuple<A0, 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> {
2807     tuple_element(tuple<A0, 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) {}
2808     typename tuple_type<A0>::reference get() { return m_x; }
2809     typename tuple_type<A0>::const_reference get() const { return m_x; }
2810 private:
2811     typename tuple_type<A0>::reference m_x;
2812 };
2813 
2814 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2815 struct tuple_element<tuple<A0, 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> {
2816     tuple_element(tuple<A0, 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) {}
2817     typename tuple_type<A1>::reference get() { return m_x; }
2818     typename tuple_type<A1>::const_reference get() const { return m_x; }
2819 private:
2820     typename tuple_type<A1>::reference m_x;
2821 };
2822 
2823 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2824 struct tuple_element<tuple<A0, 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> {
2825     tuple_element(tuple<A0, 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) {}
2826     typename tuple_type<A2>::reference get() { return m_x; }
2827     typename tuple_type<A2>::const_reference get() const { return m_x; }
2828 private:
2829     typename tuple_type<A2>::reference m_x;
2830 };
2831 
2832 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2833 struct tuple_element<tuple<A0, 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> {
2834     tuple_element(tuple<A0, 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) {}
2835     typename tuple_type<A3>::reference get() { return m_x; }
2836     typename tuple_type<A3>::const_reference get() const { return m_x; }
2837 private:
2838     typename tuple_type<A3>::reference m_x;
2839 };
2840 
2841 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2842 struct tuple_element<tuple<A0, 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> {
2843     tuple_element(tuple<A0, 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) {}
2844     typename tuple_type<A4>::reference get() { return m_x; }
2845     typename tuple_type<A4>::const_reference get() const { return m_x; }
2846 private:
2847     typename tuple_type<A4>::reference m_x;
2848 };
2849 
2850 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2851 struct tuple_element<tuple<A0, 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> {
2852     tuple_element(tuple<A0, 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) {}
2853     typename tuple_type<A5>::reference get() { return m_x; }
2854     typename tuple_type<A5>::const_reference get() const { return m_x; }
2855 private:
2856     typename tuple_type<A5>::reference m_x;
2857 };
2858 
2859 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2860 struct tuple_element<tuple<A0, 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> {
2861     tuple_element(tuple<A0, 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) {}
2862     typename tuple_type<A6>::reference get() { return m_x; }
2863     typename tuple_type<A6>::const_reference get() const { return m_x; }
2864 private:
2865     typename tuple_type<A6>::reference m_x;
2866 };
2867 
2868 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2869 struct tuple_element<tuple<A0, 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> {
2870     tuple_element(tuple<A0, 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) {}
2871     typename tuple_type<A7>::reference get() { return m_x; }
2872     typename tuple_type<A7>::const_reference get() const { return m_x; }
2873 private:
2874     typename tuple_type<A7>::reference m_x;
2875 };
2876 
2877 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2878 struct tuple_element<tuple<A0, 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> {
2879     tuple_element(tuple<A0, 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) {}
2880     typename tuple_type<A8>::reference get() { return m_x; }
2881     typename tuple_type<A8>::const_reference get() const { return m_x; }
2882 private:
2883     typename tuple_type<A8>::reference m_x;
2884 };
2885 
2886 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2887 struct tuple_element<tuple<A0, 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> {
2888     tuple_element(tuple<A0, 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) {}
2889     typename tuple_type<A9>::reference get() { return m_x; }
2890     typename tuple_type<A9>::const_reference get() const { return m_x; }
2891 private:
2892     typename tuple_type<A9>::reference m_x;
2893 };
2894 
2895 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2896 struct tuple_element<tuple<A0, 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> {
2897     tuple_element(tuple<A0, 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) {}
2898     typename tuple_type<A10>::reference get() { return m_x; }
2899     typename tuple_type<A10>::const_reference get() const { return m_x; }
2900 private:
2901     typename tuple_type<A10>::reference m_x;
2902 };
2903 
2904 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2905 struct tuple_element<tuple<A0, 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> {
2906     tuple_element(tuple<A0, 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) {}
2907     typename tuple_type<A11>::reference get() { return m_x; }
2908     typename tuple_type<A11>::const_reference get() const { return m_x; }
2909 private:
2910     typename tuple_type<A11>::reference m_x;
2911 };
2912 
2913 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2914 struct tuple_element<tuple<A0, 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> {
2915     tuple_element(tuple<A0, 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) {}
2916     typename tuple_type<A12>::reference get() { return m_x; }
2917     typename tuple_type<A12>::const_reference get() const { return m_x; }
2918 private:
2919     typename tuple_type<A12>::reference m_x;
2920 };
2921 
2922 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2923 struct tuple_element<tuple<A0, 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> {
2924     tuple_element(tuple<A0, 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) {}
2925     typename tuple_type<A13>::reference get() { return m_x; }
2926     typename tuple_type<A13>::const_reference get() const { return m_x; }
2927 private:
2928     typename tuple_type<A13>::reference m_x;
2929 };
2930 
2931 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2932 struct tuple_element<tuple<A0, 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> {
2933     tuple_element(tuple<A0, 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) {}
2934     typename tuple_type<A14>::reference get() { return m_x; }
2935     typename tuple_type<A14>::const_reference get() const { return m_x; }
2936 private:
2937     typename tuple_type<A14>::reference m_x;
2938 };
2939 
2940 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2941 struct tuple_element<tuple<A0, 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> {
2942     tuple_element(tuple<A0, 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) {}
2943     typename tuple_type<A15>::reference get() { return m_x; }
2944     typename tuple_type<A15>::const_reference get() const { return m_x; }
2945 private:
2946     typename tuple_type<A15>::reference m_x;
2947 };
2948 
2949 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2950 struct tuple_element<tuple<A0, 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> {
2951     tuple_element(tuple<A0, 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) {}
2952     typename tuple_type<A16>::reference get() { return m_x; }
2953     typename tuple_type<A16>::const_reference get() const { return m_x; }
2954 private:
2955     typename tuple_type<A16>::reference m_x;
2956 };
2957 
2958 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2959 struct tuple_element<tuple<A0, 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> {
2960     tuple_element(tuple<A0, 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) {}
2961     typename tuple_type<A17>::reference get() { return m_x; }
2962     typename tuple_type<A17>::const_reference get() const { return m_x; }
2963 private:
2964     typename tuple_type<A17>::reference m_x;
2965 };
2966 
2967 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2968 struct tuple_element<tuple<A0, 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> {
2969     tuple_element(tuple<A0, 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) {}
2970     typename tuple_type<A18>::reference get() { return m_x; }
2971     typename tuple_type<A18>::const_reference get() const { return m_x; }
2972 private:
2973     typename tuple_type<A18>::reference m_x;
2974 };
2975 
2976 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2977 struct tuple_element<tuple<A0, 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> {
2978     tuple_element(tuple<A0, 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) {}
2979     typename tuple_type<A19>::reference get() { return m_x; }
2980     typename tuple_type<A19>::const_reference get() const { return m_x; }
2981 private:
2982     typename tuple_type<A19>::reference m_x;
2983 };
2984 
2985 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2986 struct tuple_element<tuple<A0, 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> {
2987     tuple_element(tuple<A0, 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) {}
2988     typename tuple_type<A20>::reference get() { return m_x; }
2989     typename tuple_type<A20>::const_reference get() const { return m_x; }
2990 private:
2991     typename tuple_type<A20>::reference m_x;
2992 };
2993 
2994 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
2995 struct tuple_element<tuple<A0, 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> {
2996     tuple_element(tuple<A0, 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) {}
2997     typename tuple_type<A21>::reference get() { return m_x; }
2998     typename tuple_type<A21>::const_reference get() const { return m_x; }
2999 private:
3000     typename tuple_type<A21>::reference m_x;
3001 };
3002 
3003 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3004 struct tuple_element<tuple<A0, 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> {
3005     tuple_element(tuple<A0, 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) {}
3006     typename tuple_type<A22>::reference get() { return m_x; }
3007     typename tuple_type<A22>::const_reference get() const { return m_x; }
3008 private:
3009     typename tuple_type<A22>::reference m_x;
3010 };
3011 
3012 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3013 struct tuple_element<tuple<A0, 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> {
3014     tuple_element(tuple<A0, 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) {}
3015     typename tuple_type<A23>::reference get() { return m_x; }
3016     typename tuple_type<A23>::const_reference get() const { return m_x; }
3017 private:
3018     typename tuple_type<A23>::reference m_x;
3019 };
3020 
3021 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
3022 struct tuple_element<tuple<A0, 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> {
3023     tuple_element(tuple<A0, 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) {}
3024     typename tuple_type<A24>::reference get() { return m_x; }
3025     typename tuple_type<A24>::const_reference get() const { return m_x; }
3026 private:
3027     typename tuple_type<A24>::reference m_x;
3028 };
3029 
3030 
3031 
3032 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3033 struct tuple_element<tuple<A0, A1, 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> {
3034     tuple_element(tuple<A0, A1 , 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) {}
3035     typename tuple_type<A0>::reference get() { return m_x; }
3036     typename tuple_type<A0>::const_reference get() const { return m_x; }
3037 private:
3038     typename tuple_type<A0>::reference m_x;
3039 };
3040 
3041 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3042 struct tuple_element<tuple<A0, A1, 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> {
3043     tuple_element(tuple<A0, A1 , 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) {}
3044     typename tuple_type<A1>::reference get() { return m_x; }
3045     typename tuple_type<A1>::const_reference get() const { return m_x; }
3046 private:
3047     typename tuple_type<A1>::reference m_x;
3048 };
3049 
3050 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3051 struct tuple_element<tuple<A0, A1, 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> {
3052     tuple_element(tuple<A0, A1 , 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) {}
3053     typename tuple_type<A2>::reference get() { return m_x; }
3054     typename tuple_type<A2>::const_reference get() const { return m_x; }
3055 private:
3056     typename tuple_type<A2>::reference m_x;
3057 };
3058 
3059 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3060 struct tuple_element<tuple<A0, A1, 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> {
3061     tuple_element(tuple<A0, A1 , 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) {}
3062     typename tuple_type<A3>::reference get() { return m_x; }
3063     typename tuple_type<A3>::const_reference get() const { return m_x; }
3064 private:
3065     typename tuple_type<A3>::reference m_x;
3066 };
3067 
3068 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3069 struct tuple_element<tuple<A0, A1, 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> {
3070     tuple_element(tuple<A0, A1 , 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) {}
3071     typename tuple_type<A4>::reference get() { return m_x; }
3072     typename tuple_type<A4>::const_reference get() const { return m_x; }
3073 private:
3074     typename tuple_type<A4>::reference m_x;
3075 };
3076 
3077 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3078 struct tuple_element<tuple<A0, A1, 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> {
3079     tuple_element(tuple<A0, A1 , 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) {}
3080     typename tuple_type<A5>::reference get() { return m_x; }
3081     typename tuple_type<A5>::const_reference get() const { return m_x; }
3082 private:
3083     typename tuple_type<A5>::reference m_x;
3084 };
3085 
3086 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3087 struct tuple_element<tuple<A0, A1, 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> {
3088     tuple_element(tuple<A0, A1 , 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) {}
3089     typename tuple_type<A6>::reference get() { return m_x; }
3090     typename tuple_type<A6>::const_reference get() const { return m_x; }
3091 private:
3092     typename tuple_type<A6>::reference m_x;
3093 };
3094 
3095 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3096 struct tuple_element<tuple<A0, A1, 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> {
3097     tuple_element(tuple<A0, A1 , 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) {}
3098     typename tuple_type<A7>::reference get() { return m_x; }
3099     typename tuple_type<A7>::const_reference get() const { return m_x; }
3100 private:
3101     typename tuple_type<A7>::reference m_x;
3102 };
3103 
3104 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3105 struct tuple_element<tuple<A0, A1, 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> {
3106     tuple_element(tuple<A0, A1 , 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) {}
3107     typename tuple_type<A8>::reference get() { return m_x; }
3108     typename tuple_type<A8>::const_reference get() const { return m_x; }
3109 private:
3110     typename tuple_type<A8>::reference m_x;
3111 };
3112 
3113 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3114 struct tuple_element<tuple<A0, A1, 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> {
3115     tuple_element(tuple<A0, A1 , 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) {}
3116     typename tuple_type<A9>::reference get() { return m_x; }
3117     typename tuple_type<A9>::const_reference get() const { return m_x; }
3118 private:
3119     typename tuple_type<A9>::reference m_x;
3120 };
3121 
3122 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3123 struct tuple_element<tuple<A0, A1, 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> {
3124     tuple_element(tuple<A0, A1 , 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) {}
3125     typename tuple_type<A10>::reference get() { return m_x; }
3126     typename tuple_type<A10>::const_reference get() const { return m_x; }
3127 private:
3128     typename tuple_type<A10>::reference m_x;
3129 };
3130 
3131 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3132 struct tuple_element<tuple<A0, A1, 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> {
3133     tuple_element(tuple<A0, A1 , 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) {}
3134     typename tuple_type<A11>::reference get() { return m_x; }
3135     typename tuple_type<A11>::const_reference get() const { return m_x; }
3136 private:
3137     typename tuple_type<A11>::reference m_x;
3138 };
3139 
3140 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3141 struct tuple_element<tuple<A0, A1, 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> {
3142     tuple_element(tuple<A0, A1 , 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) {}
3143     typename tuple_type<A12>::reference get() { return m_x; }
3144     typename tuple_type<A12>::const_reference get() const { return m_x; }
3145 private:
3146     typename tuple_type<A12>::reference m_x;
3147 };
3148 
3149 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3150 struct tuple_element<tuple<A0, A1, 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> {
3151     tuple_element(tuple<A0, A1 , 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) {}
3152     typename tuple_type<A13>::reference get() { return m_x; }
3153     typename tuple_type<A13>::const_reference get() const { return m_x; }
3154 private:
3155     typename tuple_type<A13>::reference m_x;
3156 };
3157 
3158 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3159 struct tuple_element<tuple<A0, A1, 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> {
3160     tuple_element(tuple<A0, A1 , 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) {}
3161     typename tuple_type<A14>::reference get() { return m_x; }
3162     typename tuple_type<A14>::const_reference get() const { return m_x; }
3163 private:
3164     typename tuple_type<A14>::reference m_x;
3165 };
3166 
3167 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3168 struct tuple_element<tuple<A0, A1, 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> {
3169     tuple_element(tuple<A0, A1 , 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) {}
3170     typename tuple_type<A15>::reference get() { return m_x; }
3171     typename tuple_type<A15>::const_reference get() const { return m_x; }
3172 private:
3173     typename tuple_type<A15>::reference m_x;
3174 };
3175 
3176 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3177 struct tuple_element<tuple<A0, A1, 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> {
3178     tuple_element(tuple<A0, A1 , 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) {}
3179     typename tuple_type<A16>::reference get() { return m_x; }
3180     typename tuple_type<A16>::const_reference get() const { return m_x; }
3181 private:
3182     typename tuple_type<A16>::reference m_x;
3183 };
3184 
3185 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3186 struct tuple_element<tuple<A0, A1, 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> {
3187     tuple_element(tuple<A0, A1 , 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) {}
3188     typename tuple_type<A17>::reference get() { return m_x; }
3189     typename tuple_type<A17>::const_reference get() const { return m_x; }
3190 private:
3191     typename tuple_type<A17>::reference m_x;
3192 };
3193 
3194 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3195 struct tuple_element<tuple<A0, A1, 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> {
3196     tuple_element(tuple<A0, A1 , 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) {}
3197     typename tuple_type<A18>::reference get() { return m_x; }
3198     typename tuple_type<A18>::const_reference get() const { return m_x; }
3199 private:
3200     typename tuple_type<A18>::reference m_x;
3201 };
3202 
3203 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3204 struct tuple_element<tuple<A0, A1, 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> {
3205     tuple_element(tuple<A0, A1 , 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) {}
3206     typename tuple_type<A19>::reference get() { return m_x; }
3207     typename tuple_type<A19>::const_reference get() const { return m_x; }
3208 private:
3209     typename tuple_type<A19>::reference m_x;
3210 };
3211 
3212 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3213 struct tuple_element<tuple<A0, A1, 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> {
3214     tuple_element(tuple<A0, A1 , 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) {}
3215     typename tuple_type<A20>::reference get() { return m_x; }
3216     typename tuple_type<A20>::const_reference get() const { return m_x; }
3217 private:
3218     typename tuple_type<A20>::reference m_x;
3219 };
3220 
3221 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3222 struct tuple_element<tuple<A0, A1, 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> {
3223     tuple_element(tuple<A0, A1 , 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) {}
3224     typename tuple_type<A21>::reference get() { return m_x; }
3225     typename tuple_type<A21>::const_reference get() const { return m_x; }
3226 private:
3227     typename tuple_type<A21>::reference m_x;
3228 };
3229 
3230 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3231 struct tuple_element<tuple<A0, A1, 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> {
3232     tuple_element(tuple<A0, A1 , 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) {}
3233     typename tuple_type<A22>::reference get() { return m_x; }
3234     typename tuple_type<A22>::const_reference get() const { return m_x; }
3235 private:
3236     typename tuple_type<A22>::reference m_x;
3237 };
3238 
3239 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3240 struct tuple_element<tuple<A0, A1, 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> {
3241     tuple_element(tuple<A0, A1 , 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) {}
3242     typename tuple_type<A23>::reference get() { return m_x; }
3243     typename tuple_type<A23>::const_reference get() const { return m_x; }
3244 private:
3245     typename tuple_type<A23>::reference m_x;
3246 };
3247 
3248 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3249 struct tuple_element<tuple<A0, A1, 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> {
3250     tuple_element(tuple<A0, A1 , 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) {}
3251     typename tuple_type<A24>::reference get() { return m_x; }
3252     typename tuple_type<A24>::const_reference get() const { return m_x; }
3253 private:
3254     typename tuple_type<A24>::reference m_x;
3255 };
3256 
3257 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
3258 struct tuple_element<tuple<A0, A1, 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> {
3259     tuple_element(tuple<A0, A1 , 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) {}
3260     typename tuple_type<A25>::reference get() { return m_x; }
3261     typename tuple_type<A25>::const_reference get() const { return m_x; }
3262 private:
3263     typename tuple_type<A25>::reference m_x;
3264 };
3265 
3266 
3267 
3268 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3269 struct tuple_element<tuple<A0, A1, A2, 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> {
3270     tuple_element(tuple<A0, A1 , A2 , 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) {}
3271     typename tuple_type<A0>::reference get() { return m_x; }
3272     typename tuple_type<A0>::const_reference get() const { return m_x; }
3273 private:
3274     typename tuple_type<A0>::reference m_x;
3275 };
3276 
3277 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3278 struct tuple_element<tuple<A0, A1, A2, 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> {
3279     tuple_element(tuple<A0, A1 , A2 , 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) {}
3280     typename tuple_type<A1>::reference get() { return m_x; }
3281     typename tuple_type<A1>::const_reference get() const { return m_x; }
3282 private:
3283     typename tuple_type<A1>::reference m_x;
3284 };
3285 
3286 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3287 struct tuple_element<tuple<A0, A1, A2, 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> {
3288     tuple_element(tuple<A0, A1 , A2 , 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) {}
3289     typename tuple_type<A2>::reference get() { return m_x; }
3290     typename tuple_type<A2>::const_reference get() const { return m_x; }
3291 private:
3292     typename tuple_type<A2>::reference m_x;
3293 };
3294 
3295 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3296 struct tuple_element<tuple<A0, A1, A2, 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> {
3297     tuple_element(tuple<A0, A1 , A2 , 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) {}
3298     typename tuple_type<A3>::reference get() { return m_x; }
3299     typename tuple_type<A3>::const_reference get() const { return m_x; }
3300 private:
3301     typename tuple_type<A3>::reference m_x;
3302 };
3303 
3304 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3305 struct tuple_element<tuple<A0, A1, A2, 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> {
3306     tuple_element(tuple<A0, A1 , A2 , 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) {}
3307     typename tuple_type<A4>::reference get() { return m_x; }
3308     typename tuple_type<A4>::const_reference get() const { return m_x; }
3309 private:
3310     typename tuple_type<A4>::reference m_x;
3311 };
3312 
3313 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3314 struct tuple_element<tuple<A0, A1, A2, 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> {
3315     tuple_element(tuple<A0, A1 , A2 , 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) {}
3316     typename tuple_type<A5>::reference get() { return m_x; }
3317     typename tuple_type<A5>::const_reference get() const { return m_x; }
3318 private:
3319     typename tuple_type<A5>::reference m_x;
3320 };
3321 
3322 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3323 struct tuple_element<tuple<A0, A1, A2, 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> {
3324     tuple_element(tuple<A0, A1 , A2 , 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) {}
3325     typename tuple_type<A6>::reference get() { return m_x; }
3326     typename tuple_type<A6>::const_reference get() const { return m_x; }
3327 private:
3328     typename tuple_type<A6>::reference m_x;
3329 };
3330 
3331 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3332 struct tuple_element<tuple<A0, A1, A2, 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> {
3333     tuple_element(tuple<A0, A1 , A2 , 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) {}
3334     typename tuple_type<A7>::reference get() { return m_x; }
3335     typename tuple_type<A7>::const_reference get() const { return m_x; }
3336 private:
3337     typename tuple_type<A7>::reference m_x;
3338 };
3339 
3340 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3341 struct tuple_element<tuple<A0, A1, A2, 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> {
3342     tuple_element(tuple<A0, A1 , A2 , 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) {}
3343     typename tuple_type<A8>::reference get() { return m_x; }
3344     typename tuple_type<A8>::const_reference get() const { return m_x; }
3345 private:
3346     typename tuple_type<A8>::reference m_x;
3347 };
3348 
3349 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3350 struct tuple_element<tuple<A0, A1, A2, 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> {
3351     tuple_element(tuple<A0, A1 , A2 , 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) {}
3352     typename tuple_type<A9>::reference get() { return m_x; }
3353     typename tuple_type<A9>::const_reference get() const { return m_x; }
3354 private:
3355     typename tuple_type<A9>::reference m_x;
3356 };
3357 
3358 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3359 struct tuple_element<tuple<A0, A1, A2, 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> {
3360     tuple_element(tuple<A0, A1 , A2 , 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) {}
3361     typename tuple_type<A10>::reference get() { return m_x; }
3362     typename tuple_type<A10>::const_reference get() const { return m_x; }
3363 private:
3364     typename tuple_type<A10>::reference m_x;
3365 };
3366 
3367 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3368 struct tuple_element<tuple<A0, A1, A2, 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> {
3369     tuple_element(tuple<A0, A1 , A2 , 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) {}
3370     typename tuple_type<A11>::reference get() { return m_x; }
3371     typename tuple_type<A11>::const_reference get() const { return m_x; }
3372 private:
3373     typename tuple_type<A11>::reference m_x;
3374 };
3375 
3376 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3377 struct tuple_element<tuple<A0, A1, A2, 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> {
3378     tuple_element(tuple<A0, A1 , A2 , 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) {}
3379     typename tuple_type<A12>::reference get() { return m_x; }
3380     typename tuple_type<A12>::const_reference get() const { return m_x; }
3381 private:
3382     typename tuple_type<A12>::reference m_x;
3383 };
3384 
3385 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3386 struct tuple_element<tuple<A0, A1, A2, 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> {
3387     tuple_element(tuple<A0, A1 , A2 , 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) {}
3388     typename tuple_type<A13>::reference get() { return m_x; }
3389     typename tuple_type<A13>::const_reference get() const { return m_x; }
3390 private:
3391     typename tuple_type<A13>::reference m_x;
3392 };
3393 
3394 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3395 struct tuple_element<tuple<A0, A1, A2, 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> {
3396     tuple_element(tuple<A0, A1 , A2 , 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) {}
3397     typename tuple_type<A14>::reference get() { return m_x; }
3398     typename tuple_type<A14>::const_reference get() const { return m_x; }
3399 private:
3400     typename tuple_type<A14>::reference m_x;
3401 };
3402 
3403 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3404 struct tuple_element<tuple<A0, A1, A2, 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> {
3405     tuple_element(tuple<A0, A1 , A2 , 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) {}
3406     typename tuple_type<A15>::reference get() { return m_x; }
3407     typename tuple_type<A15>::const_reference get() const { return m_x; }
3408 private:
3409     typename tuple_type<A15>::reference m_x;
3410 };
3411 
3412 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3413 struct tuple_element<tuple<A0, A1, A2, 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> {
3414     tuple_element(tuple<A0, A1 , A2 , 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) {}
3415     typename tuple_type<A16>::reference get() { return m_x; }
3416     typename tuple_type<A16>::const_reference get() const { return m_x; }
3417 private:
3418     typename tuple_type<A16>::reference m_x;
3419 };
3420 
3421 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3422 struct tuple_element<tuple<A0, A1, A2, 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> {
3423     tuple_element(tuple<A0, A1 , A2 , 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) {}
3424     typename tuple_type<A17>::reference get() { return m_x; }
3425     typename tuple_type<A17>::const_reference get() const { return m_x; }
3426 private:
3427     typename tuple_type<A17>::reference m_x;
3428 };
3429 
3430 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3431 struct tuple_element<tuple<A0, A1, A2, 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> {
3432     tuple_element(tuple<A0, A1 , A2 , 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) {}
3433     typename tuple_type<A18>::reference get() { return m_x; }
3434     typename tuple_type<A18>::const_reference get() const { return m_x; }
3435 private:
3436     typename tuple_type<A18>::reference m_x;
3437 };
3438 
3439 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3440 struct tuple_element<tuple<A0, A1, A2, 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> {
3441     tuple_element(tuple<A0, A1 , A2 , 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) {}
3442     typename tuple_type<A19>::reference get() { return m_x; }
3443     typename tuple_type<A19>::const_reference get() const { return m_x; }
3444 private:
3445     typename tuple_type<A19>::reference m_x;
3446 };
3447 
3448 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3449 struct tuple_element<tuple<A0, A1, A2, 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> {
3450     tuple_element(tuple<A0, A1 , A2 , 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) {}
3451     typename tuple_type<A20>::reference get() { return m_x; }
3452     typename tuple_type<A20>::const_reference get() const { return m_x; }
3453 private:
3454     typename tuple_type<A20>::reference m_x;
3455 };
3456 
3457 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3458 struct tuple_element<tuple<A0, A1, A2, 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> {
3459     tuple_element(tuple<A0, A1 , A2 , 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) {}
3460     typename tuple_type<A21>::reference get() { return m_x; }
3461     typename tuple_type<A21>::const_reference get() const { return m_x; }
3462 private:
3463     typename tuple_type<A21>::reference m_x;
3464 };
3465 
3466 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3467 struct tuple_element<tuple<A0, A1, A2, 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> {
3468     tuple_element(tuple<A0, A1 , A2 , 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) {}
3469     typename tuple_type<A22>::reference get() { return m_x; }
3470     typename tuple_type<A22>::const_reference get() const { return m_x; }
3471 private:
3472     typename tuple_type<A22>::reference m_x;
3473 };
3474 
3475 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3476 struct tuple_element<tuple<A0, A1, A2, 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> {
3477     tuple_element(tuple<A0, A1 , A2 , 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) {}
3478     typename tuple_type<A23>::reference get() { return m_x; }
3479     typename tuple_type<A23>::const_reference get() const { return m_x; }
3480 private:
3481     typename tuple_type<A23>::reference m_x;
3482 };
3483 
3484 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3485 struct tuple_element<tuple<A0, A1, A2, 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> {
3486     tuple_element(tuple<A0, A1 , A2 , 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) {}
3487     typename tuple_type<A24>::reference get() { return m_x; }
3488     typename tuple_type<A24>::const_reference get() const { return m_x; }
3489 private:
3490     typename tuple_type<A24>::reference m_x;
3491 };
3492 
3493 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3494 struct tuple_element<tuple<A0, A1, A2, 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> {
3495     tuple_element(tuple<A0, A1 , A2 , 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) {}
3496     typename tuple_type<A25>::reference get() { return m_x; }
3497     typename tuple_type<A25>::const_reference get() const { return m_x; }
3498 private:
3499     typename tuple_type<A25>::reference m_x;
3500 };
3501 
3502 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
3503 struct tuple_element<tuple<A0, A1, A2, 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> {
3504     tuple_element(tuple<A0, A1 , A2 , 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) {}
3505     typename tuple_type<A26>::reference get() { return m_x; }
3506     typename tuple_type<A26>::const_reference get() const { return m_x; }
3507 private:
3508     typename tuple_type<A26>::reference m_x;
3509 };
3510 
3511 
3512 
3513 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3514 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3515     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3516     typename tuple_type<A0>::reference get() { return m_x; }
3517     typename tuple_type<A0>::const_reference get() const { return m_x; }
3518 private:
3519     typename tuple_type<A0>::reference m_x;
3520 };
3521 
3522 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3523 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3524     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3525     typename tuple_type<A1>::reference get() { return m_x; }
3526     typename tuple_type<A1>::const_reference get() const { return m_x; }
3527 private:
3528     typename tuple_type<A1>::reference m_x;
3529 };
3530 
3531 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3532 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3533     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3534     typename tuple_type<A2>::reference get() { return m_x; }
3535     typename tuple_type<A2>::const_reference get() const { return m_x; }
3536 private:
3537     typename tuple_type<A2>::reference m_x;
3538 };
3539 
3540 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3541 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3542     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3543     typename tuple_type<A3>::reference get() { return m_x; }
3544     typename tuple_type<A3>::const_reference get() const { return m_x; }
3545 private:
3546     typename tuple_type<A3>::reference m_x;
3547 };
3548 
3549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3550 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3551     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3552     typename tuple_type<A4>::reference get() { return m_x; }
3553     typename tuple_type<A4>::const_reference get() const { return m_x; }
3554 private:
3555     typename tuple_type<A4>::reference m_x;
3556 };
3557 
3558 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3559 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3560     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3561     typename tuple_type<A5>::reference get() { return m_x; }
3562     typename tuple_type<A5>::const_reference get() const { return m_x; }
3563 private:
3564     typename tuple_type<A5>::reference m_x;
3565 };
3566 
3567 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3568 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3569     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3570     typename tuple_type<A6>::reference get() { return m_x; }
3571     typename tuple_type<A6>::const_reference get() const { return m_x; }
3572 private:
3573     typename tuple_type<A6>::reference m_x;
3574 };
3575 
3576 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3577 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3578     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3579     typename tuple_type<A7>::reference get() { return m_x; }
3580     typename tuple_type<A7>::const_reference get() const { return m_x; }
3581 private:
3582     typename tuple_type<A7>::reference m_x;
3583 };
3584 
3585 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3586 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3587     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3588     typename tuple_type<A8>::reference get() { return m_x; }
3589     typename tuple_type<A8>::const_reference get() const { return m_x; }
3590 private:
3591     typename tuple_type<A8>::reference m_x;
3592 };
3593 
3594 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3595 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3596     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3597     typename tuple_type<A9>::reference get() { return m_x; }
3598     typename tuple_type<A9>::const_reference get() const { return m_x; }
3599 private:
3600     typename tuple_type<A9>::reference m_x;
3601 };
3602 
3603 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3604 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3605     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3606     typename tuple_type<A10>::reference get() { return m_x; }
3607     typename tuple_type<A10>::const_reference get() const { return m_x; }
3608 private:
3609     typename tuple_type<A10>::reference m_x;
3610 };
3611 
3612 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3613 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3614     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3615     typename tuple_type<A11>::reference get() { return m_x; }
3616     typename tuple_type<A11>::const_reference get() const { return m_x; }
3617 private:
3618     typename tuple_type<A11>::reference m_x;
3619 };
3620 
3621 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3622 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3623     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3624     typename tuple_type<A12>::reference get() { return m_x; }
3625     typename tuple_type<A12>::const_reference get() const { return m_x; }
3626 private:
3627     typename tuple_type<A12>::reference m_x;
3628 };
3629 
3630 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3631 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3632     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3633     typename tuple_type<A13>::reference get() { return m_x; }
3634     typename tuple_type<A13>::const_reference get() const { return m_x; }
3635 private:
3636     typename tuple_type<A13>::reference m_x;
3637 };
3638 
3639 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3640 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3641     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3642     typename tuple_type<A14>::reference get() { return m_x; }
3643     typename tuple_type<A14>::const_reference get() const { return m_x; }
3644 private:
3645     typename tuple_type<A14>::reference m_x;
3646 };
3647 
3648 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3649 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3650     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3651     typename tuple_type<A15>::reference get() { return m_x; }
3652     typename tuple_type<A15>::const_reference get() const { return m_x; }
3653 private:
3654     typename tuple_type<A15>::reference m_x;
3655 };
3656 
3657 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3658 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3659     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3660     typename tuple_type<A16>::reference get() { return m_x; }
3661     typename tuple_type<A16>::const_reference get() const { return m_x; }
3662 private:
3663     typename tuple_type<A16>::reference m_x;
3664 };
3665 
3666 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3667 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3668     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3669     typename tuple_type<A17>::reference get() { return m_x; }
3670     typename tuple_type<A17>::const_reference get() const { return m_x; }
3671 private:
3672     typename tuple_type<A17>::reference m_x;
3673 };
3674 
3675 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3676 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3677     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3678     typename tuple_type<A18>::reference get() { return m_x; }
3679     typename tuple_type<A18>::const_reference get() const { return m_x; }
3680 private:
3681     typename tuple_type<A18>::reference m_x;
3682 };
3683 
3684 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3685 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3686     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3687     typename tuple_type<A19>::reference get() { return m_x; }
3688     typename tuple_type<A19>::const_reference get() const { return m_x; }
3689 private:
3690     typename tuple_type<A19>::reference m_x;
3691 };
3692 
3693 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3694 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3695     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3696     typename tuple_type<A20>::reference get() { return m_x; }
3697     typename tuple_type<A20>::const_reference get() const { return m_x; }
3698 private:
3699     typename tuple_type<A20>::reference m_x;
3700 };
3701 
3702 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3703 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3704     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3705     typename tuple_type<A21>::reference get() { return m_x; }
3706     typename tuple_type<A21>::const_reference get() const { return m_x; }
3707 private:
3708     typename tuple_type<A21>::reference m_x;
3709 };
3710 
3711 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3712 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3713     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3714     typename tuple_type<A22>::reference get() { return m_x; }
3715     typename tuple_type<A22>::const_reference get() const { return m_x; }
3716 private:
3717     typename tuple_type<A22>::reference m_x;
3718 };
3719 
3720 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3721 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3722     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3723     typename tuple_type<A23>::reference get() { return m_x; }
3724     typename tuple_type<A23>::const_reference get() const { return m_x; }
3725 private:
3726     typename tuple_type<A23>::reference m_x;
3727 };
3728 
3729 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3730 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3731     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3732     typename tuple_type<A24>::reference get() { return m_x; }
3733     typename tuple_type<A24>::const_reference get() const { return m_x; }
3734 private:
3735     typename tuple_type<A24>::reference m_x;
3736 };
3737 
3738 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3739 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3740     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3741     typename tuple_type<A25>::reference get() { return m_x; }
3742     typename tuple_type<A25>::const_reference get() const { return m_x; }
3743 private:
3744     typename tuple_type<A25>::reference m_x;
3745 };
3746 
3747 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3748 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3749     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3750     typename tuple_type<A26>::reference get() { return m_x; }
3751     typename tuple_type<A26>::const_reference get() const { return m_x; }
3752 private:
3753     typename tuple_type<A26>::reference m_x;
3754 };
3755 
3756 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
3757 struct tuple_element<tuple<A0, A1, A2, A3, 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> {
3758     tuple_element(tuple<A0, A1 , A2 , A3 , 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) {}
3759     typename tuple_type<A27>::reference get() { return m_x; }
3760     typename tuple_type<A27>::const_reference get() const { return m_x; }
3761 private:
3762     typename tuple_type<A27>::reference m_x;
3763 };
3764 
3765 
3766 
3767 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3768 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3769     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3770     typename tuple_type<A0>::reference get() { return m_x; }
3771     typename tuple_type<A0>::const_reference get() const { return m_x; }
3772 private:
3773     typename tuple_type<A0>::reference m_x;
3774 };
3775 
3776 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3777 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3778     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3779     typename tuple_type<A1>::reference get() { return m_x; }
3780     typename tuple_type<A1>::const_reference get() const { return m_x; }
3781 private:
3782     typename tuple_type<A1>::reference m_x;
3783 };
3784 
3785 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3786 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3787     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3788     typename tuple_type<A2>::reference get() { return m_x; }
3789     typename tuple_type<A2>::const_reference get() const { return m_x; }
3790 private:
3791     typename tuple_type<A2>::reference m_x;
3792 };
3793 
3794 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3795 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3796     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3797     typename tuple_type<A3>::reference get() { return m_x; }
3798     typename tuple_type<A3>::const_reference get() const { return m_x; }
3799 private:
3800     typename tuple_type<A3>::reference m_x;
3801 };
3802 
3803 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3804 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3805     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3806     typename tuple_type<A4>::reference get() { return m_x; }
3807     typename tuple_type<A4>::const_reference get() const { return m_x; }
3808 private:
3809     typename tuple_type<A4>::reference m_x;
3810 };
3811 
3812 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3813 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3814     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3815     typename tuple_type<A5>::reference get() { return m_x; }
3816     typename tuple_type<A5>::const_reference get() const { return m_x; }
3817 private:
3818     typename tuple_type<A5>::reference m_x;
3819 };
3820 
3821 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3822 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3823     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3824     typename tuple_type<A6>::reference get() { return m_x; }
3825     typename tuple_type<A6>::const_reference get() const { return m_x; }
3826 private:
3827     typename tuple_type<A6>::reference m_x;
3828 };
3829 
3830 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3831 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3832     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3833     typename tuple_type<A7>::reference get() { return m_x; }
3834     typename tuple_type<A7>::const_reference get() const { return m_x; }
3835 private:
3836     typename tuple_type<A7>::reference m_x;
3837 };
3838 
3839 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3840 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3841     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3842     typename tuple_type<A8>::reference get() { return m_x; }
3843     typename tuple_type<A8>::const_reference get() const { return m_x; }
3844 private:
3845     typename tuple_type<A8>::reference m_x;
3846 };
3847 
3848 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3849 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3850     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3851     typename tuple_type<A9>::reference get() { return m_x; }
3852     typename tuple_type<A9>::const_reference get() const { return m_x; }
3853 private:
3854     typename tuple_type<A9>::reference m_x;
3855 };
3856 
3857 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3858 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3859     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3860     typename tuple_type<A10>::reference get() { return m_x; }
3861     typename tuple_type<A10>::const_reference get() const { return m_x; }
3862 private:
3863     typename tuple_type<A10>::reference m_x;
3864 };
3865 
3866 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3867 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3868     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3869     typename tuple_type<A11>::reference get() { return m_x; }
3870     typename tuple_type<A11>::const_reference get() const { return m_x; }
3871 private:
3872     typename tuple_type<A11>::reference m_x;
3873 };
3874 
3875 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3876 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3877     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3878     typename tuple_type<A12>::reference get() { return m_x; }
3879     typename tuple_type<A12>::const_reference get() const { return m_x; }
3880 private:
3881     typename tuple_type<A12>::reference m_x;
3882 };
3883 
3884 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3885 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3886     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3887     typename tuple_type<A13>::reference get() { return m_x; }
3888     typename tuple_type<A13>::const_reference get() const { return m_x; }
3889 private:
3890     typename tuple_type<A13>::reference m_x;
3891 };
3892 
3893 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3894 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3895     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3896     typename tuple_type<A14>::reference get() { return m_x; }
3897     typename tuple_type<A14>::const_reference get() const { return m_x; }
3898 private:
3899     typename tuple_type<A14>::reference m_x;
3900 };
3901 
3902 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3903 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3904     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3905     typename tuple_type<A15>::reference get() { return m_x; }
3906     typename tuple_type<A15>::const_reference get() const { return m_x; }
3907 private:
3908     typename tuple_type<A15>::reference m_x;
3909 };
3910 
3911 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3912 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3913     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3914     typename tuple_type<A16>::reference get() { return m_x; }
3915     typename tuple_type<A16>::const_reference get() const { return m_x; }
3916 private:
3917     typename tuple_type<A16>::reference m_x;
3918 };
3919 
3920 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3921 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3922     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3923     typename tuple_type<A17>::reference get() { return m_x; }
3924     typename tuple_type<A17>::const_reference get() const { return m_x; }
3925 private:
3926     typename tuple_type<A17>::reference m_x;
3927 };
3928 
3929 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3930 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3931     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3932     typename tuple_type<A18>::reference get() { return m_x; }
3933     typename tuple_type<A18>::const_reference get() const { return m_x; }
3934 private:
3935     typename tuple_type<A18>::reference m_x;
3936 };
3937 
3938 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3939 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3940     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3941     typename tuple_type<A19>::reference get() { return m_x; }
3942     typename tuple_type<A19>::const_reference get() const { return m_x; }
3943 private:
3944     typename tuple_type<A19>::reference m_x;
3945 };
3946 
3947 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3948 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3949     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3950     typename tuple_type<A20>::reference get() { return m_x; }
3951     typename tuple_type<A20>::const_reference get() const { return m_x; }
3952 private:
3953     typename tuple_type<A20>::reference m_x;
3954 };
3955 
3956 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3957 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3958     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3959     typename tuple_type<A21>::reference get() { return m_x; }
3960     typename tuple_type<A21>::const_reference get() const { return m_x; }
3961 private:
3962     typename tuple_type<A21>::reference m_x;
3963 };
3964 
3965 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3966 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3967     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3968     typename tuple_type<A22>::reference get() { return m_x; }
3969     typename tuple_type<A22>::const_reference get() const { return m_x; }
3970 private:
3971     typename tuple_type<A22>::reference m_x;
3972 };
3973 
3974 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3975 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3976     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3977     typename tuple_type<A23>::reference get() { return m_x; }
3978     typename tuple_type<A23>::const_reference get() const { return m_x; }
3979 private:
3980     typename tuple_type<A23>::reference m_x;
3981 };
3982 
3983 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3984 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3985     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3986     typename tuple_type<A24>::reference get() { return m_x; }
3987     typename tuple_type<A24>::const_reference get() const { return m_x; }
3988 private:
3989     typename tuple_type<A24>::reference m_x;
3990 };
3991 
3992 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
3993 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
3994     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
3995     typename tuple_type<A25>::reference get() { return m_x; }
3996     typename tuple_type<A25>::const_reference get() const { return m_x; }
3997 private:
3998     typename tuple_type<A25>::reference m_x;
3999 };
4000 
4001 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4002 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
4003     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
4004     typename tuple_type<A26>::reference get() { return m_x; }
4005     typename tuple_type<A26>::const_reference get() const { return m_x; }
4006 private:
4007     typename tuple_type<A26>::reference m_x;
4008 };
4009 
4010 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4011 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
4012     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
4013     typename tuple_type<A27>::reference get() { return m_x; }
4014     typename tuple_type<A27>::const_reference get() const { return m_x; }
4015 private:
4016     typename tuple_type<A27>::reference m_x;
4017 };
4018 
4019 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
4020 struct tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
4021     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , 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) {}
4022     typename tuple_type<A28>::reference get() { return m_x; }
4023     typename tuple_type<A28>::const_reference get() const { return m_x; }
4024 private:
4025     typename tuple_type<A28>::reference m_x;
4026 };
4027 
4028 
4029 
4030 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4031 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4032     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4033     typename tuple_type<A0>::reference get() { return m_x; }
4034     typename tuple_type<A0>::const_reference get() const { return m_x; }
4035 private:
4036     typename tuple_type<A0>::reference m_x;
4037 };
4038 
4039 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4040 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4041     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4042     typename tuple_type<A1>::reference get() { return m_x; }
4043     typename tuple_type<A1>::const_reference get() const { return m_x; }
4044 private:
4045     typename tuple_type<A1>::reference m_x;
4046 };
4047 
4048 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4049 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4050     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4051     typename tuple_type<A2>::reference get() { return m_x; }
4052     typename tuple_type<A2>::const_reference get() const { return m_x; }
4053 private:
4054     typename tuple_type<A2>::reference m_x;
4055 };
4056 
4057 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4058 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4059     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4060     typename tuple_type<A3>::reference get() { return m_x; }
4061     typename tuple_type<A3>::const_reference get() const { return m_x; }
4062 private:
4063     typename tuple_type<A3>::reference m_x;
4064 };
4065 
4066 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4067 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4068     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4069     typename tuple_type<A4>::reference get() { return m_x; }
4070     typename tuple_type<A4>::const_reference get() const { return m_x; }
4071 private:
4072     typename tuple_type<A4>::reference m_x;
4073 };
4074 
4075 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4076 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4077     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4078     typename tuple_type<A5>::reference get() { return m_x; }
4079     typename tuple_type<A5>::const_reference get() const { return m_x; }
4080 private:
4081     typename tuple_type<A5>::reference m_x;
4082 };
4083 
4084 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4085 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4086     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4087     typename tuple_type<A6>::reference get() { return m_x; }
4088     typename tuple_type<A6>::const_reference get() const { return m_x; }
4089 private:
4090     typename tuple_type<A6>::reference m_x;
4091 };
4092 
4093 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4094 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4095     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4096     typename tuple_type<A7>::reference get() { return m_x; }
4097     typename tuple_type<A7>::const_reference get() const { return m_x; }
4098 private:
4099     typename tuple_type<A7>::reference m_x;
4100 };
4101 
4102 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4103 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4104     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4105     typename tuple_type<A8>::reference get() { return m_x; }
4106     typename tuple_type<A8>::const_reference get() const { return m_x; }
4107 private:
4108     typename tuple_type<A8>::reference m_x;
4109 };
4110 
4111 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4112 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4113     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4114     typename tuple_type<A9>::reference get() { return m_x; }
4115     typename tuple_type<A9>::const_reference get() const { return m_x; }
4116 private:
4117     typename tuple_type<A9>::reference m_x;
4118 };
4119 
4120 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4121 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4122     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4123     typename tuple_type<A10>::reference get() { return m_x; }
4124     typename tuple_type<A10>::const_reference get() const { return m_x; }
4125 private:
4126     typename tuple_type<A10>::reference m_x;
4127 };
4128 
4129 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4130 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4131     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4132     typename tuple_type<A11>::reference get() { return m_x; }
4133     typename tuple_type<A11>::const_reference get() const { return m_x; }
4134 private:
4135     typename tuple_type<A11>::reference m_x;
4136 };
4137 
4138 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4139 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4140     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4141     typename tuple_type<A12>::reference get() { return m_x; }
4142     typename tuple_type<A12>::const_reference get() const { return m_x; }
4143 private:
4144     typename tuple_type<A12>::reference m_x;
4145 };
4146 
4147 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4148 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4149     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4150     typename tuple_type<A13>::reference get() { return m_x; }
4151     typename tuple_type<A13>::const_reference get() const { return m_x; }
4152 private:
4153     typename tuple_type<A13>::reference m_x;
4154 };
4155 
4156 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4157 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4158     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4159     typename tuple_type<A14>::reference get() { return m_x; }
4160     typename tuple_type<A14>::const_reference get() const { return m_x; }
4161 private:
4162     typename tuple_type<A14>::reference m_x;
4163 };
4164 
4165 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4166 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4167     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4168     typename tuple_type<A15>::reference get() { return m_x; }
4169     typename tuple_type<A15>::const_reference get() const { return m_x; }
4170 private:
4171     typename tuple_type<A15>::reference m_x;
4172 };
4173 
4174 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4175 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4176     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4177     typename tuple_type<A16>::reference get() { return m_x; }
4178     typename tuple_type<A16>::const_reference get() const { return m_x; }
4179 private:
4180     typename tuple_type<A16>::reference m_x;
4181 };
4182 
4183 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4184 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4185     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4186     typename tuple_type<A17>::reference get() { return m_x; }
4187     typename tuple_type<A17>::const_reference get() const { return m_x; }
4188 private:
4189     typename tuple_type<A17>::reference m_x;
4190 };
4191 
4192 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4193 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4194     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4195     typename tuple_type<A18>::reference get() { return m_x; }
4196     typename tuple_type<A18>::const_reference get() const { return m_x; }
4197 private:
4198     typename tuple_type<A18>::reference m_x;
4199 };
4200 
4201 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4202 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4203     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4204     typename tuple_type<A19>::reference get() { return m_x; }
4205     typename tuple_type<A19>::const_reference get() const { return m_x; }
4206 private:
4207     typename tuple_type<A19>::reference m_x;
4208 };
4209 
4210 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4211 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4212     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4213     typename tuple_type<A20>::reference get() { return m_x; }
4214     typename tuple_type<A20>::const_reference get() const { return m_x; }
4215 private:
4216     typename tuple_type<A20>::reference m_x;
4217 };
4218 
4219 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4220 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4221     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4222     typename tuple_type<A21>::reference get() { return m_x; }
4223     typename tuple_type<A21>::const_reference get() const { return m_x; }
4224 private:
4225     typename tuple_type<A21>::reference m_x;
4226 };
4227 
4228 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4229 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4230     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4231     typename tuple_type<A22>::reference get() { return m_x; }
4232     typename tuple_type<A22>::const_reference get() const { return m_x; }
4233 private:
4234     typename tuple_type<A22>::reference m_x;
4235 };
4236 
4237 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4238 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4239     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4240     typename tuple_type<A23>::reference get() { return m_x; }
4241     typename tuple_type<A23>::const_reference get() const { return m_x; }
4242 private:
4243     typename tuple_type<A23>::reference m_x;
4244 };
4245 
4246 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4247 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4248     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4249     typename tuple_type<A24>::reference get() { return m_x; }
4250     typename tuple_type<A24>::const_reference get() const { return m_x; }
4251 private:
4252     typename tuple_type<A24>::reference m_x;
4253 };
4254 
4255 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4256 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4257     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4258     typename tuple_type<A25>::reference get() { return m_x; }
4259     typename tuple_type<A25>::const_reference get() const { return m_x; }
4260 private:
4261     typename tuple_type<A25>::reference m_x;
4262 };
4263 
4264 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4265 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4266     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4267     typename tuple_type<A26>::reference get() { return m_x; }
4268     typename tuple_type<A26>::const_reference get() const { return m_x; }
4269 private:
4270     typename tuple_type<A26>::reference m_x;
4271 };
4272 
4273 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4274 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4275     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4276     typename tuple_type<A27>::reference get() { return m_x; }
4277     typename tuple_type<A27>::const_reference get() const { return m_x; }
4278 private:
4279     typename tuple_type<A27>::reference m_x;
4280 };
4281 
4282 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4283 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4284     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4285     typename tuple_type<A28>::reference get() { return m_x; }
4286     typename tuple_type<A28>::const_reference get() const { return m_x; }
4287 private:
4288     typename tuple_type<A28>::reference m_x;
4289 };
4290 
4291 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4292 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
4293     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , 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) {}
4294     typename tuple_type<A29>::reference get() { return m_x; }
4295     typename tuple_type<A29>::const_reference get() const { return m_x; }
4296 private:
4297     typename tuple_type<A29>::reference m_x;
4298 };
4299 
4300 
4301 
4302 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4303 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4304     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4305     typename tuple_type<A0>::reference get() { return m_x; }
4306     typename tuple_type<A0>::const_reference get() const { return m_x; }
4307 private:
4308     typename tuple_type<A0>::reference m_x;
4309 };
4310 
4311 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4312 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4313     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4314     typename tuple_type<A1>::reference get() { return m_x; }
4315     typename tuple_type<A1>::const_reference get() const { return m_x; }
4316 private:
4317     typename tuple_type<A1>::reference m_x;
4318 };
4319 
4320 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4321 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4322     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4323     typename tuple_type<A2>::reference get() { return m_x; }
4324     typename tuple_type<A2>::const_reference get() const { return m_x; }
4325 private:
4326     typename tuple_type<A2>::reference m_x;
4327 };
4328 
4329 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4330 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4331     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4332     typename tuple_type<A3>::reference get() { return m_x; }
4333     typename tuple_type<A3>::const_reference get() const { return m_x; }
4334 private:
4335     typename tuple_type<A3>::reference m_x;
4336 };
4337 
4338 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4339 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4340     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4341     typename tuple_type<A4>::reference get() { return m_x; }
4342     typename tuple_type<A4>::const_reference get() const { return m_x; }
4343 private:
4344     typename tuple_type<A4>::reference m_x;
4345 };
4346 
4347 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4348 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4349     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4350     typename tuple_type<A5>::reference get() { return m_x; }
4351     typename tuple_type<A5>::const_reference get() const { return m_x; }
4352 private:
4353     typename tuple_type<A5>::reference m_x;
4354 };
4355 
4356 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4357 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4358     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4359     typename tuple_type<A6>::reference get() { return m_x; }
4360     typename tuple_type<A6>::const_reference get() const { return m_x; }
4361 private:
4362     typename tuple_type<A6>::reference m_x;
4363 };
4364 
4365 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4366 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4367     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4368     typename tuple_type<A7>::reference get() { return m_x; }
4369     typename tuple_type<A7>::const_reference get() const { return m_x; }
4370 private:
4371     typename tuple_type<A7>::reference m_x;
4372 };
4373 
4374 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4375 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4376     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4377     typename tuple_type<A8>::reference get() { return m_x; }
4378     typename tuple_type<A8>::const_reference get() const { return m_x; }
4379 private:
4380     typename tuple_type<A8>::reference m_x;
4381 };
4382 
4383 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4384 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4385     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4386     typename tuple_type<A9>::reference get() { return m_x; }
4387     typename tuple_type<A9>::const_reference get() const { return m_x; }
4388 private:
4389     typename tuple_type<A9>::reference m_x;
4390 };
4391 
4392 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4393 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4394     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4395     typename tuple_type<A10>::reference get() { return m_x; }
4396     typename tuple_type<A10>::const_reference get() const { return m_x; }
4397 private:
4398     typename tuple_type<A10>::reference m_x;
4399 };
4400 
4401 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4402 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4403     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4404     typename tuple_type<A11>::reference get() { return m_x; }
4405     typename tuple_type<A11>::const_reference get() const { return m_x; }
4406 private:
4407     typename tuple_type<A11>::reference m_x;
4408 };
4409 
4410 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4411 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4412     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4413     typename tuple_type<A12>::reference get() { return m_x; }
4414     typename tuple_type<A12>::const_reference get() const { return m_x; }
4415 private:
4416     typename tuple_type<A12>::reference m_x;
4417 };
4418 
4419 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4420 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4421     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4422     typename tuple_type<A13>::reference get() { return m_x; }
4423     typename tuple_type<A13>::const_reference get() const { return m_x; }
4424 private:
4425     typename tuple_type<A13>::reference m_x;
4426 };
4427 
4428 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4429 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4430     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4431     typename tuple_type<A14>::reference get() { return m_x; }
4432     typename tuple_type<A14>::const_reference get() const { return m_x; }
4433 private:
4434     typename tuple_type<A14>::reference m_x;
4435 };
4436 
4437 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4438 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4439     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4440     typename tuple_type<A15>::reference get() { return m_x; }
4441     typename tuple_type<A15>::const_reference get() const { return m_x; }
4442 private:
4443     typename tuple_type<A15>::reference m_x;
4444 };
4445 
4446 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4447 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4448     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4449     typename tuple_type<A16>::reference get() { return m_x; }
4450     typename tuple_type<A16>::const_reference get() const { return m_x; }
4451 private:
4452     typename tuple_type<A16>::reference m_x;
4453 };
4454 
4455 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4456 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4457     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4458     typename tuple_type<A17>::reference get() { return m_x; }
4459     typename tuple_type<A17>::const_reference get() const { return m_x; }
4460 private:
4461     typename tuple_type<A17>::reference m_x;
4462 };
4463 
4464 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4465 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4466     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4467     typename tuple_type<A18>::reference get() { return m_x; }
4468     typename tuple_type<A18>::const_reference get() const { return m_x; }
4469 private:
4470     typename tuple_type<A18>::reference m_x;
4471 };
4472 
4473 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4474 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4475     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4476     typename tuple_type<A19>::reference get() { return m_x; }
4477     typename tuple_type<A19>::const_reference get() const { return m_x; }
4478 private:
4479     typename tuple_type<A19>::reference m_x;
4480 };
4481 
4482 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4483 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4484     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4485     typename tuple_type<A20>::reference get() { return m_x; }
4486     typename tuple_type<A20>::const_reference get() const { return m_x; }
4487 private:
4488     typename tuple_type<A20>::reference m_x;
4489 };
4490 
4491 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4492 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4493     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4494     typename tuple_type<A21>::reference get() { return m_x; }
4495     typename tuple_type<A21>::const_reference get() const { return m_x; }
4496 private:
4497     typename tuple_type<A21>::reference m_x;
4498 };
4499 
4500 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4501 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4502     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4503     typename tuple_type<A22>::reference get() { return m_x; }
4504     typename tuple_type<A22>::const_reference get() const { return m_x; }
4505 private:
4506     typename tuple_type<A22>::reference m_x;
4507 };
4508 
4509 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4510 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4511     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4512     typename tuple_type<A23>::reference get() { return m_x; }
4513     typename tuple_type<A23>::const_reference get() const { return m_x; }
4514 private:
4515     typename tuple_type<A23>::reference m_x;
4516 };
4517 
4518 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4519 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4520     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4521     typename tuple_type<A24>::reference get() { return m_x; }
4522     typename tuple_type<A24>::const_reference get() const { return m_x; }
4523 private:
4524     typename tuple_type<A24>::reference m_x;
4525 };
4526 
4527 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4528 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4529     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4530     typename tuple_type<A25>::reference get() { return m_x; }
4531     typename tuple_type<A25>::const_reference get() const { return m_x; }
4532 private:
4533     typename tuple_type<A25>::reference m_x;
4534 };
4535 
4536 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4537 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4538     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4539     typename tuple_type<A26>::reference get() { return m_x; }
4540     typename tuple_type<A26>::const_reference get() const { return m_x; }
4541 private:
4542     typename tuple_type<A26>::reference m_x;
4543 };
4544 
4545 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4546 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4547     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4548     typename tuple_type<A27>::reference get() { return m_x; }
4549     typename tuple_type<A27>::const_reference get() const { return m_x; }
4550 private:
4551     typename tuple_type<A27>::reference m_x;
4552 };
4553 
4554 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4555 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4556     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4557     typename tuple_type<A28>::reference get() { return m_x; }
4558     typename tuple_type<A28>::const_reference get() const { return m_x; }
4559 private:
4560     typename tuple_type<A28>::reference m_x;
4561 };
4562 
4563 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4564 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4565     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4566     typename tuple_type<A29>::reference get() { return m_x; }
4567     typename tuple_type<A29>::const_reference get() const { return m_x; }
4568 private:
4569     typename tuple_type<A29>::reference m_x;
4570 };
4571 
4572 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4573 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4574     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4575     typename tuple_type<A30>::reference get() { return m_x; }
4576     typename tuple_type<A30>::const_reference get() const { return m_x; }
4577 private:
4578     typename tuple_type<A30>::reference m_x;
4579 };
4580 
4581 
4582 
4583 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4584 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4585     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4586     typename tuple_type<A0>::reference get() { return m_x; }
4587     typename tuple_type<A0>::const_reference get() const { return m_x; }
4588 private:
4589     typename tuple_type<A0>::reference m_x;
4590 };
4591 
4592 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4593 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4594     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4595     typename tuple_type<A1>::reference get() { return m_x; }
4596     typename tuple_type<A1>::const_reference get() const { return m_x; }
4597 private:
4598     typename tuple_type<A1>::reference m_x;
4599 };
4600 
4601 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4602 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4603     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4604     typename tuple_type<A2>::reference get() { return m_x; }
4605     typename tuple_type<A2>::const_reference get() const { return m_x; }
4606 private:
4607     typename tuple_type<A2>::reference m_x;
4608 };
4609 
4610 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4611 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4612     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4613     typename tuple_type<A3>::reference get() { return m_x; }
4614     typename tuple_type<A3>::const_reference get() const { return m_x; }
4615 private:
4616     typename tuple_type<A3>::reference m_x;
4617 };
4618 
4619 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4620 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4621     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4622     typename tuple_type<A4>::reference get() { return m_x; }
4623     typename tuple_type<A4>::const_reference get() const { return m_x; }
4624 private:
4625     typename tuple_type<A4>::reference m_x;
4626 };
4627 
4628 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4629 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4630     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4631     typename tuple_type<A5>::reference get() { return m_x; }
4632     typename tuple_type<A5>::const_reference get() const { return m_x; }
4633 private:
4634     typename tuple_type<A5>::reference m_x;
4635 };
4636 
4637 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4638 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4639     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4640     typename tuple_type<A6>::reference get() { return m_x; }
4641     typename tuple_type<A6>::const_reference get() const { return m_x; }
4642 private:
4643     typename tuple_type<A6>::reference m_x;
4644 };
4645 
4646 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4647 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4648     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4649     typename tuple_type<A7>::reference get() { return m_x; }
4650     typename tuple_type<A7>::const_reference get() const { return m_x; }
4651 private:
4652     typename tuple_type<A7>::reference m_x;
4653 };
4654 
4655 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4656 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4657     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4658     typename tuple_type<A8>::reference get() { return m_x; }
4659     typename tuple_type<A8>::const_reference get() const { return m_x; }
4660 private:
4661     typename tuple_type<A8>::reference m_x;
4662 };
4663 
4664 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4665 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4666     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4667     typename tuple_type<A9>::reference get() { return m_x; }
4668     typename tuple_type<A9>::const_reference get() const { return m_x; }
4669 private:
4670     typename tuple_type<A9>::reference m_x;
4671 };
4672 
4673 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4674 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4675     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4676     typename tuple_type<A10>::reference get() { return m_x; }
4677     typename tuple_type<A10>::const_reference get() const { return m_x; }
4678 private:
4679     typename tuple_type<A10>::reference m_x;
4680 };
4681 
4682 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4683 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4684     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4685     typename tuple_type<A11>::reference get() { return m_x; }
4686     typename tuple_type<A11>::const_reference get() const { return m_x; }
4687 private:
4688     typename tuple_type<A11>::reference m_x;
4689 };
4690 
4691 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4692 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4693     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4694     typename tuple_type<A12>::reference get() { return m_x; }
4695     typename tuple_type<A12>::const_reference get() const { return m_x; }
4696 private:
4697     typename tuple_type<A12>::reference m_x;
4698 };
4699 
4700 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4701 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4702     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4703     typename tuple_type<A13>::reference get() { return m_x; }
4704     typename tuple_type<A13>::const_reference get() const { return m_x; }
4705 private:
4706     typename tuple_type<A13>::reference m_x;
4707 };
4708 
4709 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4710 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4711     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4712     typename tuple_type<A14>::reference get() { return m_x; }
4713     typename tuple_type<A14>::const_reference get() const { return m_x; }
4714 private:
4715     typename tuple_type<A14>::reference m_x;
4716 };
4717 
4718 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4719 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4720     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4721     typename tuple_type<A15>::reference get() { return m_x; }
4722     typename tuple_type<A15>::const_reference get() const { return m_x; }
4723 private:
4724     typename tuple_type<A15>::reference m_x;
4725 };
4726 
4727 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4728 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4729     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4730     typename tuple_type<A16>::reference get() { return m_x; }
4731     typename tuple_type<A16>::const_reference get() const { return m_x; }
4732 private:
4733     typename tuple_type<A16>::reference m_x;
4734 };
4735 
4736 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4737 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4738     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4739     typename tuple_type<A17>::reference get() { return m_x; }
4740     typename tuple_type<A17>::const_reference get() const { return m_x; }
4741 private:
4742     typename tuple_type<A17>::reference m_x;
4743 };
4744 
4745 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4746 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4747     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4748     typename tuple_type<A18>::reference get() { return m_x; }
4749     typename tuple_type<A18>::const_reference get() const { return m_x; }
4750 private:
4751     typename tuple_type<A18>::reference m_x;
4752 };
4753 
4754 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4755 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4756     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4757     typename tuple_type<A19>::reference get() { return m_x; }
4758     typename tuple_type<A19>::const_reference get() const { return m_x; }
4759 private:
4760     typename tuple_type<A19>::reference m_x;
4761 };
4762 
4763 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4764 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4765     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4766     typename tuple_type<A20>::reference get() { return m_x; }
4767     typename tuple_type<A20>::const_reference get() const { return m_x; }
4768 private:
4769     typename tuple_type<A20>::reference m_x;
4770 };
4771 
4772 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4773 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4774     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4775     typename tuple_type<A21>::reference get() { return m_x; }
4776     typename tuple_type<A21>::const_reference get() const { return m_x; }
4777 private:
4778     typename tuple_type<A21>::reference m_x;
4779 };
4780 
4781 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4782 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4783     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4784     typename tuple_type<A22>::reference get() { return m_x; }
4785     typename tuple_type<A22>::const_reference get() const { return m_x; }
4786 private:
4787     typename tuple_type<A22>::reference m_x;
4788 };
4789 
4790 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4791 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4792     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4793     typename tuple_type<A23>::reference get() { return m_x; }
4794     typename tuple_type<A23>::const_reference get() const { return m_x; }
4795 private:
4796     typename tuple_type<A23>::reference m_x;
4797 };
4798 
4799 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4800 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4801     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4802     typename tuple_type<A24>::reference get() { return m_x; }
4803     typename tuple_type<A24>::const_reference get() const { return m_x; }
4804 private:
4805     typename tuple_type<A24>::reference m_x;
4806 };
4807 
4808 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4809 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4810     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4811     typename tuple_type<A25>::reference get() { return m_x; }
4812     typename tuple_type<A25>::const_reference get() const { return m_x; }
4813 private:
4814     typename tuple_type<A25>::reference m_x;
4815 };
4816 
4817 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4818 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4819     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4820     typename tuple_type<A26>::reference get() { return m_x; }
4821     typename tuple_type<A26>::const_reference get() const { return m_x; }
4822 private:
4823     typename tuple_type<A26>::reference m_x;
4824 };
4825 
4826 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4827 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4828     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4829     typename tuple_type<A27>::reference get() { return m_x; }
4830     typename tuple_type<A27>::const_reference get() const { return m_x; }
4831 private:
4832     typename tuple_type<A27>::reference m_x;
4833 };
4834 
4835 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4836 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4837     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4838     typename tuple_type<A28>::reference get() { return m_x; }
4839     typename tuple_type<A28>::const_reference get() const { return m_x; }
4840 private:
4841     typename tuple_type<A28>::reference m_x;
4842 };
4843 
4844 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4845 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4846     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4847     typename tuple_type<A29>::reference get() { return m_x; }
4848     typename tuple_type<A29>::const_reference get() const { return m_x; }
4849 private:
4850     typename tuple_type<A29>::reference m_x;
4851 };
4852 
4853 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4854 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4855     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4856     typename tuple_type<A30>::reference get() { return m_x; }
4857     typename tuple_type<A30>::const_reference get() const { return m_x; }
4858 private:
4859     typename tuple_type<A30>::reference m_x;
4860 };
4861 
4862 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
4863 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
4864     tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , 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) {}
4865     typename tuple_type<A31>::reference get() { return m_x; }
4866     typename tuple_type<A31>::const_reference get() const { return m_x; }
4867 private:
4868     typename tuple_type<A31>::reference m_x;
4869 };
4870 
4871 
4872 
4873 
4874 
4875 template <typename A0>
4876 struct const_tuple_element<tuple<A0>, 0> : tuple_type<A0> {
4877     const_tuple_element(const tuple<A0>& x) : m_x(x.a0) {}
4878     typename tuple_type<A0>::const_reference get() const { return m_x; }
4879 private:
4880     typename tuple_type<A0>::const_reference m_x;
4881 };
4882 
4883 
4884 
4885 template <typename A0, typename A1>
4886 struct const_tuple_element<tuple<A0, A1>, 0> : tuple_type<A0> {
4887     const_tuple_element(const tuple<A0, A1>& x) : m_x(x.a0) {}
4888     typename tuple_type<A0>::const_reference get() const { return m_x; }
4889 private:
4890     typename tuple_type<A0>::const_reference m_x;
4891 };
4892 
4893 template <typename A0, typename A1>
4894 struct const_tuple_element<tuple<A0, A1>, 1> : tuple_type<A1> {
4895     const_tuple_element(const tuple<A0, A1>& x) : m_x(x.a1) {}
4896     typename tuple_type<A1>::const_reference get() const { return m_x; }
4897 private:
4898     typename tuple_type<A1>::const_reference m_x;
4899 };
4900 
4901 
4902 
4903 template <typename A0, typename A1, typename A2>
4904 struct const_tuple_element<tuple<A0, A1, A2>, 0> : tuple_type<A0> {
4905     const_tuple_element(const tuple<A0, A1, A2>& x) : m_x(x.a0) {}
4906     typename tuple_type<A0>::const_reference get() const { return m_x; }
4907 private:
4908     typename tuple_type<A0>::const_reference m_x;
4909 };
4910 
4911 template <typename A0, typename A1, typename A2>
4912 struct const_tuple_element<tuple<A0, A1, A2>, 1> : tuple_type<A1> {
4913     const_tuple_element(const tuple<A0, A1, A2>& x) : m_x(x.a1) {}
4914     typename tuple_type<A1>::const_reference get() const { return m_x; }
4915 private:
4916     typename tuple_type<A1>::const_reference m_x;
4917 };
4918 
4919 template <typename A0, typename A1, typename A2>
4920 struct const_tuple_element<tuple<A0, A1, A2>, 2> : tuple_type<A2> {
4921     const_tuple_element(const tuple<A0, A1, A2>& x) : m_x(x.a2) {}
4922     typename tuple_type<A2>::const_reference get() const { return m_x; }
4923 private:
4924     typename tuple_type<A2>::const_reference m_x;
4925 };
4926 
4927 
4928 
4929 template <typename A0, typename A1, typename A2, typename A3>
4930 struct const_tuple_element<tuple<A0, A1, A2, A3>, 0> : tuple_type<A0> {
4931     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a0) {}
4932     typename tuple_type<A0>::const_reference get() const { return m_x; }
4933 private:
4934     typename tuple_type<A0>::const_reference m_x;
4935 };
4936 
4937 template <typename A0, typename A1, typename A2, typename A3>
4938 struct const_tuple_element<tuple<A0, A1, A2, A3>, 1> : tuple_type<A1> {
4939     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a1) {}
4940     typename tuple_type<A1>::const_reference get() const { return m_x; }
4941 private:
4942     typename tuple_type<A1>::const_reference m_x;
4943 };
4944 
4945 template <typename A0, typename A1, typename A2, typename A3>
4946 struct const_tuple_element<tuple<A0, A1, A2, A3>, 2> : tuple_type<A2> {
4947     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a2) {}
4948     typename tuple_type<A2>::const_reference get() const { return m_x; }
4949 private:
4950     typename tuple_type<A2>::const_reference m_x;
4951 };
4952 
4953 template <typename A0, typename A1, typename A2, typename A3>
4954 struct const_tuple_element<tuple<A0, A1, A2, A3>, 3> : tuple_type<A3> {
4955     const_tuple_element(const tuple<A0, A1, A2, A3>& x) : m_x(x.a3) {}
4956     typename tuple_type<A3>::const_reference get() const { return m_x; }
4957 private:
4958     typename tuple_type<A3>::const_reference m_x;
4959 };
4960 
4961 
4962 
4963 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4964 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 0> : tuple_type<A0> {
4965     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a0) {}
4966     typename tuple_type<A0>::const_reference get() const { return m_x; }
4967 private:
4968     typename tuple_type<A0>::const_reference m_x;
4969 };
4970 
4971 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4972 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 1> : tuple_type<A1> {
4973     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a1) {}
4974     typename tuple_type<A1>::const_reference get() const { return m_x; }
4975 private:
4976     typename tuple_type<A1>::const_reference m_x;
4977 };
4978 
4979 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4980 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 2> : tuple_type<A2> {
4981     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a2) {}
4982     typename tuple_type<A2>::const_reference get() const { return m_x; }
4983 private:
4984     typename tuple_type<A2>::const_reference m_x;
4985 };
4986 
4987 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4988 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 3> : tuple_type<A3> {
4989     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a3) {}
4990     typename tuple_type<A3>::const_reference get() const { return m_x; }
4991 private:
4992     typename tuple_type<A3>::const_reference m_x;
4993 };
4994 
4995 template <typename A0, typename A1, typename A2, typename A3, typename A4>
4996 struct const_tuple_element<tuple<A0, A1, A2, A3, A4>, 4> : tuple_type<A4> {
4997     const_tuple_element(const tuple<A0, A1, A2, A3, A4>& x) : m_x(x.a4) {}
4998     typename tuple_type<A4>::const_reference get() const { return m_x; }
4999 private:
5000     typename tuple_type<A4>::const_reference m_x;
5001 };
5002 
5003 
5004 
5005 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5006 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 0> : tuple_type<A0> {
5007     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a0) {}
5008     typename tuple_type<A0>::const_reference get() const { return m_x; }
5009 private:
5010     typename tuple_type<A0>::const_reference m_x;
5011 };
5012 
5013 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5014 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 1> : tuple_type<A1> {
5015     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a1) {}
5016     typename tuple_type<A1>::const_reference get() const { return m_x; }
5017 private:
5018     typename tuple_type<A1>::const_reference m_x;
5019 };
5020 
5021 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5022 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 2> : tuple_type<A2> {
5023     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a2) {}
5024     typename tuple_type<A2>::const_reference get() const { return m_x; }
5025 private:
5026     typename tuple_type<A2>::const_reference m_x;
5027 };
5028 
5029 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5030 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 3> : tuple_type<A3> {
5031     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a3) {}
5032     typename tuple_type<A3>::const_reference get() const { return m_x; }
5033 private:
5034     typename tuple_type<A3>::const_reference m_x;
5035 };
5036 
5037 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5038 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 4> : tuple_type<A4> {
5039     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a4) {}
5040     typename tuple_type<A4>::const_reference get() const { return m_x; }
5041 private:
5042     typename tuple_type<A4>::const_reference m_x;
5043 };
5044 
5045 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
5046 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 5> : tuple_type<A5> {
5047     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5>& x) : m_x(x.a5) {}
5048     typename tuple_type<A5>::const_reference get() const { return m_x; }
5049 private:
5050     typename tuple_type<A5>::const_reference m_x;
5051 };
5052 
5053 
5054 
5055 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5056 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 0> : tuple_type<A0> {
5057     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a0) {}
5058     typename tuple_type<A0>::const_reference get() const { return m_x; }
5059 private:
5060     typename tuple_type<A0>::const_reference m_x;
5061 };
5062 
5063 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5064 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 1> : tuple_type<A1> {
5065     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a1) {}
5066     typename tuple_type<A1>::const_reference get() const { return m_x; }
5067 private:
5068     typename tuple_type<A1>::const_reference m_x;
5069 };
5070 
5071 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5072 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 2> : tuple_type<A2> {
5073     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a2) {}
5074     typename tuple_type<A2>::const_reference get() const { return m_x; }
5075 private:
5076     typename tuple_type<A2>::const_reference m_x;
5077 };
5078 
5079 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5080 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 3> : tuple_type<A3> {
5081     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a3) {}
5082     typename tuple_type<A3>::const_reference get() const { return m_x; }
5083 private:
5084     typename tuple_type<A3>::const_reference m_x;
5085 };
5086 
5087 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5088 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 4> : tuple_type<A4> {
5089     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a4) {}
5090     typename tuple_type<A4>::const_reference get() const { return m_x; }
5091 private:
5092     typename tuple_type<A4>::const_reference m_x;
5093 };
5094 
5095 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5096 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 5> : tuple_type<A5> {
5097     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a5) {}
5098     typename tuple_type<A5>::const_reference get() const { return m_x; }
5099 private:
5100     typename tuple_type<A5>::const_reference m_x;
5101 };
5102 
5103 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
5104 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 6> : tuple_type<A6> {
5105     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6>& x) : m_x(x.a6) {}
5106     typename tuple_type<A6>::const_reference get() const { return m_x; }
5107 private:
5108     typename tuple_type<A6>::const_reference m_x;
5109 };
5110 
5111 
5112 
5113 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5114 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 0> : tuple_type<A0> {
5115     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a0) {}
5116     typename tuple_type<A0>::const_reference get() const { return m_x; }
5117 private:
5118     typename tuple_type<A0>::const_reference m_x;
5119 };
5120 
5121 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5122 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 1> : tuple_type<A1> {
5123     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a1) {}
5124     typename tuple_type<A1>::const_reference get() const { return m_x; }
5125 private:
5126     typename tuple_type<A1>::const_reference m_x;
5127 };
5128 
5129 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5130 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 2> : tuple_type<A2> {
5131     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a2) {}
5132     typename tuple_type<A2>::const_reference get() const { return m_x; }
5133 private:
5134     typename tuple_type<A2>::const_reference m_x;
5135 };
5136 
5137 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5138 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 3> : tuple_type<A3> {
5139     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a3) {}
5140     typename tuple_type<A3>::const_reference get() const { return m_x; }
5141 private:
5142     typename tuple_type<A3>::const_reference m_x;
5143 };
5144 
5145 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5146 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 4> : tuple_type<A4> {
5147     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a4) {}
5148     typename tuple_type<A4>::const_reference get() const { return m_x; }
5149 private:
5150     typename tuple_type<A4>::const_reference m_x;
5151 };
5152 
5153 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5154 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 5> : tuple_type<A5> {
5155     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a5) {}
5156     typename tuple_type<A5>::const_reference get() const { return m_x; }
5157 private:
5158     typename tuple_type<A5>::const_reference m_x;
5159 };
5160 
5161 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5162 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 6> : tuple_type<A6> {
5163     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a6) {}
5164     typename tuple_type<A6>::const_reference get() const { return m_x; }
5165 private:
5166     typename tuple_type<A6>::const_reference m_x;
5167 };
5168 
5169 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
5170 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 7> : tuple_type<A7> {
5171     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7>& x) : m_x(x.a7) {}
5172     typename tuple_type<A7>::const_reference get() const { return m_x; }
5173 private:
5174     typename tuple_type<A7>::const_reference m_x;
5175 };
5176 
5177 
5178 
5179 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5180 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 0> : tuple_type<A0> {
5181     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a0) {}
5182     typename tuple_type<A0>::const_reference get() const { return m_x; }
5183 private:
5184     typename tuple_type<A0>::const_reference m_x;
5185 };
5186 
5187 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5188 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 1> : tuple_type<A1> {
5189     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a1) {}
5190     typename tuple_type<A1>::const_reference get() const { return m_x; }
5191 private:
5192     typename tuple_type<A1>::const_reference m_x;
5193 };
5194 
5195 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5196 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 2> : tuple_type<A2> {
5197     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a2) {}
5198     typename tuple_type<A2>::const_reference get() const { return m_x; }
5199 private:
5200     typename tuple_type<A2>::const_reference m_x;
5201 };
5202 
5203 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5204 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 3> : tuple_type<A3> {
5205     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a3) {}
5206     typename tuple_type<A3>::const_reference get() const { return m_x; }
5207 private:
5208     typename tuple_type<A3>::const_reference m_x;
5209 };
5210 
5211 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5212 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 4> : tuple_type<A4> {
5213     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a4) {}
5214     typename tuple_type<A4>::const_reference get() const { return m_x; }
5215 private:
5216     typename tuple_type<A4>::const_reference m_x;
5217 };
5218 
5219 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5220 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 5> : tuple_type<A5> {
5221     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a5) {}
5222     typename tuple_type<A5>::const_reference get() const { return m_x; }
5223 private:
5224     typename tuple_type<A5>::const_reference m_x;
5225 };
5226 
5227 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5228 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 6> : tuple_type<A6> {
5229     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a6) {}
5230     typename tuple_type<A6>::const_reference get() const { return m_x; }
5231 private:
5232     typename tuple_type<A6>::const_reference m_x;
5233 };
5234 
5235 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5236 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 7> : tuple_type<A7> {
5237     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a7) {}
5238     typename tuple_type<A7>::const_reference get() const { return m_x; }
5239 private:
5240     typename tuple_type<A7>::const_reference m_x;
5241 };
5242 
5243 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
5244 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 8> : tuple_type<A8> {
5245     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& x) : m_x(x.a8) {}
5246     typename tuple_type<A8>::const_reference get() const { return m_x; }
5247 private:
5248     typename tuple_type<A8>::const_reference m_x;
5249 };
5250 
5251 
5252 
5253 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5254 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 0> : tuple_type<A0> {
5255     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a0) {}
5256     typename tuple_type<A0>::const_reference get() const { return m_x; }
5257 private:
5258     typename tuple_type<A0>::const_reference m_x;
5259 };
5260 
5261 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5262 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 1> : tuple_type<A1> {
5263     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a1) {}
5264     typename tuple_type<A1>::const_reference get() const { return m_x; }
5265 private:
5266     typename tuple_type<A1>::const_reference m_x;
5267 };
5268 
5269 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5270 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 2> : tuple_type<A2> {
5271     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a2) {}
5272     typename tuple_type<A2>::const_reference get() const { return m_x; }
5273 private:
5274     typename tuple_type<A2>::const_reference m_x;
5275 };
5276 
5277 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5278 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 3> : tuple_type<A3> {
5279     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a3) {}
5280     typename tuple_type<A3>::const_reference get() const { return m_x; }
5281 private:
5282     typename tuple_type<A3>::const_reference m_x;
5283 };
5284 
5285 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5286 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 4> : tuple_type<A4> {
5287     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a4) {}
5288     typename tuple_type<A4>::const_reference get() const { return m_x; }
5289 private:
5290     typename tuple_type<A4>::const_reference m_x;
5291 };
5292 
5293 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5294 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 5> : tuple_type<A5> {
5295     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a5) {}
5296     typename tuple_type<A5>::const_reference get() const { return m_x; }
5297 private:
5298     typename tuple_type<A5>::const_reference m_x;
5299 };
5300 
5301 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5302 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 6> : tuple_type<A6> {
5303     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a6) {}
5304     typename tuple_type<A6>::const_reference get() const { return m_x; }
5305 private:
5306     typename tuple_type<A6>::const_reference m_x;
5307 };
5308 
5309 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5310 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 7> : tuple_type<A7> {
5311     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a7) {}
5312     typename tuple_type<A7>::const_reference get() const { return m_x; }
5313 private:
5314     typename tuple_type<A7>::const_reference m_x;
5315 };
5316 
5317 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5318 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 8> : tuple_type<A8> {
5319     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a8) {}
5320     typename tuple_type<A8>::const_reference get() const { return m_x; }
5321 private:
5322     typename tuple_type<A8>::const_reference m_x;
5323 };
5324 
5325 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
5326 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 9> : tuple_type<A9> {
5327     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& x) : m_x(x.a9) {}
5328     typename tuple_type<A9>::const_reference get() const { return m_x; }
5329 private:
5330     typename tuple_type<A9>::const_reference m_x;
5331 };
5332 
5333 
5334 
5335 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5336 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 0> : tuple_type<A0> {
5337     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a0) {}
5338     typename tuple_type<A0>::const_reference get() const { return m_x; }
5339 private:
5340     typename tuple_type<A0>::const_reference m_x;
5341 };
5342 
5343 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5344 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 1> : tuple_type<A1> {
5345     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a1) {}
5346     typename tuple_type<A1>::const_reference get() const { return m_x; }
5347 private:
5348     typename tuple_type<A1>::const_reference m_x;
5349 };
5350 
5351 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5352 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 2> : tuple_type<A2> {
5353     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a2) {}
5354     typename tuple_type<A2>::const_reference get() const { return m_x; }
5355 private:
5356     typename tuple_type<A2>::const_reference m_x;
5357 };
5358 
5359 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5360 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 3> : tuple_type<A3> {
5361     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a3) {}
5362     typename tuple_type<A3>::const_reference get() const { return m_x; }
5363 private:
5364     typename tuple_type<A3>::const_reference m_x;
5365 };
5366 
5367 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5368 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 4> : tuple_type<A4> {
5369     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a4) {}
5370     typename tuple_type<A4>::const_reference get() const { return m_x; }
5371 private:
5372     typename tuple_type<A4>::const_reference m_x;
5373 };
5374 
5375 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5376 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 5> : tuple_type<A5> {
5377     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a5) {}
5378     typename tuple_type<A5>::const_reference get() const { return m_x; }
5379 private:
5380     typename tuple_type<A5>::const_reference m_x;
5381 };
5382 
5383 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5384 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 6> : tuple_type<A6> {
5385     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a6) {}
5386     typename tuple_type<A6>::const_reference get() const { return m_x; }
5387 private:
5388     typename tuple_type<A6>::const_reference m_x;
5389 };
5390 
5391 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5392 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 7> : tuple_type<A7> {
5393     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a7) {}
5394     typename tuple_type<A7>::const_reference get() const { return m_x; }
5395 private:
5396     typename tuple_type<A7>::const_reference m_x;
5397 };
5398 
5399 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5400 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 8> : tuple_type<A8> {
5401     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a8) {}
5402     typename tuple_type<A8>::const_reference get() const { return m_x; }
5403 private:
5404     typename tuple_type<A8>::const_reference m_x;
5405 };
5406 
5407 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5408 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 9> : tuple_type<A9> {
5409     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a9) {}
5410     typename tuple_type<A9>::const_reference get() const { return m_x; }
5411 private:
5412     typename tuple_type<A9>::const_reference m_x;
5413 };
5414 
5415 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
5416 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 10> : tuple_type<A10> {
5417     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& x) : m_x(x.a10) {}
5418     typename tuple_type<A10>::const_reference get() const { return m_x; }
5419 private:
5420     typename tuple_type<A10>::const_reference m_x;
5421 };
5422 
5423 
5424 
5425 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5426 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 0> : tuple_type<A0> {
5427     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a0) {}
5428     typename tuple_type<A0>::const_reference get() const { return m_x; }
5429 private:
5430     typename tuple_type<A0>::const_reference m_x;
5431 };
5432 
5433 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5434 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 1> : tuple_type<A1> {
5435     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a1) {}
5436     typename tuple_type<A1>::const_reference get() const { return m_x; }
5437 private:
5438     typename tuple_type<A1>::const_reference m_x;
5439 };
5440 
5441 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5442 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 2> : tuple_type<A2> {
5443     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a2) {}
5444     typename tuple_type<A2>::const_reference get() const { return m_x; }
5445 private:
5446     typename tuple_type<A2>::const_reference m_x;
5447 };
5448 
5449 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5450 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 3> : tuple_type<A3> {
5451     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a3) {}
5452     typename tuple_type<A3>::const_reference get() const { return m_x; }
5453 private:
5454     typename tuple_type<A3>::const_reference m_x;
5455 };
5456 
5457 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5458 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 4> : tuple_type<A4> {
5459     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a4) {}
5460     typename tuple_type<A4>::const_reference get() const { return m_x; }
5461 private:
5462     typename tuple_type<A4>::const_reference m_x;
5463 };
5464 
5465 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5466 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 5> : tuple_type<A5> {
5467     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a5) {}
5468     typename tuple_type<A5>::const_reference get() const { return m_x; }
5469 private:
5470     typename tuple_type<A5>::const_reference m_x;
5471 };
5472 
5473 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5474 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 6> : tuple_type<A6> {
5475     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a6) {}
5476     typename tuple_type<A6>::const_reference get() const { return m_x; }
5477 private:
5478     typename tuple_type<A6>::const_reference m_x;
5479 };
5480 
5481 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5482 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 7> : tuple_type<A7> {
5483     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a7) {}
5484     typename tuple_type<A7>::const_reference get() const { return m_x; }
5485 private:
5486     typename tuple_type<A7>::const_reference m_x;
5487 };
5488 
5489 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5490 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 8> : tuple_type<A8> {
5491     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a8) {}
5492     typename tuple_type<A8>::const_reference get() const { return m_x; }
5493 private:
5494     typename tuple_type<A8>::const_reference m_x;
5495 };
5496 
5497 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5498 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 9> : tuple_type<A9> {
5499     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a9) {}
5500     typename tuple_type<A9>::const_reference get() const { return m_x; }
5501 private:
5502     typename tuple_type<A9>::const_reference m_x;
5503 };
5504 
5505 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5506 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 10> : tuple_type<A10> {
5507     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a10) {}
5508     typename tuple_type<A10>::const_reference get() const { return m_x; }
5509 private:
5510     typename tuple_type<A10>::const_reference m_x;
5511 };
5512 
5513 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
5514 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 11> : tuple_type<A11> {
5515     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& x) : m_x(x.a11) {}
5516     typename tuple_type<A11>::const_reference get() const { return m_x; }
5517 private:
5518     typename tuple_type<A11>::const_reference m_x;
5519 };
5520 
5521 
5522 
5523 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5524 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 0> : tuple_type<A0> {
5525     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a0) {}
5526     typename tuple_type<A0>::const_reference get() const { return m_x; }
5527 private:
5528     typename tuple_type<A0>::const_reference m_x;
5529 };
5530 
5531 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5532 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 1> : tuple_type<A1> {
5533     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a1) {}
5534     typename tuple_type<A1>::const_reference get() const { return m_x; }
5535 private:
5536     typename tuple_type<A1>::const_reference m_x;
5537 };
5538 
5539 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5540 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 2> : tuple_type<A2> {
5541     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a2) {}
5542     typename tuple_type<A2>::const_reference get() const { return m_x; }
5543 private:
5544     typename tuple_type<A2>::const_reference m_x;
5545 };
5546 
5547 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5548 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 3> : tuple_type<A3> {
5549     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a3) {}
5550     typename tuple_type<A3>::const_reference get() const { return m_x; }
5551 private:
5552     typename tuple_type<A3>::const_reference m_x;
5553 };
5554 
5555 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5556 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 4> : tuple_type<A4> {
5557     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a4) {}
5558     typename tuple_type<A4>::const_reference get() const { return m_x; }
5559 private:
5560     typename tuple_type<A4>::const_reference m_x;
5561 };
5562 
5563 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5564 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 5> : tuple_type<A5> {
5565     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a5) {}
5566     typename tuple_type<A5>::const_reference get() const { return m_x; }
5567 private:
5568     typename tuple_type<A5>::const_reference m_x;
5569 };
5570 
5571 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5572 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 6> : tuple_type<A6> {
5573     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a6) {}
5574     typename tuple_type<A6>::const_reference get() const { return m_x; }
5575 private:
5576     typename tuple_type<A6>::const_reference m_x;
5577 };
5578 
5579 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5580 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 7> : tuple_type<A7> {
5581     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a7) {}
5582     typename tuple_type<A7>::const_reference get() const { return m_x; }
5583 private:
5584     typename tuple_type<A7>::const_reference m_x;
5585 };
5586 
5587 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5588 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 8> : tuple_type<A8> {
5589     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a8) {}
5590     typename tuple_type<A8>::const_reference get() const { return m_x; }
5591 private:
5592     typename tuple_type<A8>::const_reference m_x;
5593 };
5594 
5595 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5596 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 9> : tuple_type<A9> {
5597     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a9) {}
5598     typename tuple_type<A9>::const_reference get() const { return m_x; }
5599 private:
5600     typename tuple_type<A9>::const_reference m_x;
5601 };
5602 
5603 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5604 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 10> : tuple_type<A10> {
5605     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a10) {}
5606     typename tuple_type<A10>::const_reference get() const { return m_x; }
5607 private:
5608     typename tuple_type<A10>::const_reference m_x;
5609 };
5610 
5611 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5612 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 11> : tuple_type<A11> {
5613     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a11) {}
5614     typename tuple_type<A11>::const_reference get() const { return m_x; }
5615 private:
5616     typename tuple_type<A11>::const_reference m_x;
5617 };
5618 
5619 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
5620 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 12> : tuple_type<A12> {
5621     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& x) : m_x(x.a12) {}
5622     typename tuple_type<A12>::const_reference get() const { return m_x; }
5623 private:
5624     typename tuple_type<A12>::const_reference m_x;
5625 };
5626 
5627 
5628 
5629 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5630 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 0> : tuple_type<A0> {
5631     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a0) {}
5632     typename tuple_type<A0>::const_reference get() const { return m_x; }
5633 private:
5634     typename tuple_type<A0>::const_reference m_x;
5635 };
5636 
5637 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5638 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 1> : tuple_type<A1> {
5639     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a1) {}
5640     typename tuple_type<A1>::const_reference get() const { return m_x; }
5641 private:
5642     typename tuple_type<A1>::const_reference m_x;
5643 };
5644 
5645 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5646 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 2> : tuple_type<A2> {
5647     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a2) {}
5648     typename tuple_type<A2>::const_reference get() const { return m_x; }
5649 private:
5650     typename tuple_type<A2>::const_reference m_x;
5651 };
5652 
5653 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5654 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 3> : tuple_type<A3> {
5655     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a3) {}
5656     typename tuple_type<A3>::const_reference get() const { return m_x; }
5657 private:
5658     typename tuple_type<A3>::const_reference m_x;
5659 };
5660 
5661 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5662 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 4> : tuple_type<A4> {
5663     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a4) {}
5664     typename tuple_type<A4>::const_reference get() const { return m_x; }
5665 private:
5666     typename tuple_type<A4>::const_reference m_x;
5667 };
5668 
5669 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5670 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 5> : tuple_type<A5> {
5671     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a5) {}
5672     typename tuple_type<A5>::const_reference get() const { return m_x; }
5673 private:
5674     typename tuple_type<A5>::const_reference m_x;
5675 };
5676 
5677 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5678 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 6> : tuple_type<A6> {
5679     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a6) {}
5680     typename tuple_type<A6>::const_reference get() const { return m_x; }
5681 private:
5682     typename tuple_type<A6>::const_reference m_x;
5683 };
5684 
5685 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5686 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 7> : tuple_type<A7> {
5687     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a7) {}
5688     typename tuple_type<A7>::const_reference get() const { return m_x; }
5689 private:
5690     typename tuple_type<A7>::const_reference m_x;
5691 };
5692 
5693 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5694 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 8> : tuple_type<A8> {
5695     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a8) {}
5696     typename tuple_type<A8>::const_reference get() const { return m_x; }
5697 private:
5698     typename tuple_type<A8>::const_reference m_x;
5699 };
5700 
5701 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5702 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 9> : tuple_type<A9> {
5703     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a9) {}
5704     typename tuple_type<A9>::const_reference get() const { return m_x; }
5705 private:
5706     typename tuple_type<A9>::const_reference m_x;
5707 };
5708 
5709 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5710 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 10> : tuple_type<A10> {
5711     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a10) {}
5712     typename tuple_type<A10>::const_reference get() const { return m_x; }
5713 private:
5714     typename tuple_type<A10>::const_reference m_x;
5715 };
5716 
5717 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5718 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 11> : tuple_type<A11> {
5719     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a11) {}
5720     typename tuple_type<A11>::const_reference get() const { return m_x; }
5721 private:
5722     typename tuple_type<A11>::const_reference m_x;
5723 };
5724 
5725 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5726 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 12> : tuple_type<A12> {
5727     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a12) {}
5728     typename tuple_type<A12>::const_reference get() const { return m_x; }
5729 private:
5730     typename tuple_type<A12>::const_reference m_x;
5731 };
5732 
5733 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
5734 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 13> : tuple_type<A13> {
5735     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& x) : m_x(x.a13) {}
5736     typename tuple_type<A13>::const_reference get() const { return m_x; }
5737 private:
5738     typename tuple_type<A13>::const_reference m_x;
5739 };
5740 
5741 
5742 
5743 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5744 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 0> : tuple_type<A0> {
5745     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) {}
5746     typename tuple_type<A0>::const_reference get() const { return m_x; }
5747 private:
5748     typename tuple_type<A0>::const_reference m_x;
5749 };
5750 
5751 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5752 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 1> : tuple_type<A1> {
5753     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) {}
5754     typename tuple_type<A1>::const_reference get() const { return m_x; }
5755 private:
5756     typename tuple_type<A1>::const_reference m_x;
5757 };
5758 
5759 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5760 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 2> : tuple_type<A2> {
5761     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) {}
5762     typename tuple_type<A2>::const_reference get() const { return m_x; }
5763 private:
5764     typename tuple_type<A2>::const_reference m_x;
5765 };
5766 
5767 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5768 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 3> : tuple_type<A3> {
5769     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) {}
5770     typename tuple_type<A3>::const_reference get() const { return m_x; }
5771 private:
5772     typename tuple_type<A3>::const_reference m_x;
5773 };
5774 
5775 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5776 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 4> : tuple_type<A4> {
5777     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) {}
5778     typename tuple_type<A4>::const_reference get() const { return m_x; }
5779 private:
5780     typename tuple_type<A4>::const_reference m_x;
5781 };
5782 
5783 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5784 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 5> : tuple_type<A5> {
5785     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) {}
5786     typename tuple_type<A5>::const_reference get() const { return m_x; }
5787 private:
5788     typename tuple_type<A5>::const_reference m_x;
5789 };
5790 
5791 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5792 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 6> : tuple_type<A6> {
5793     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) {}
5794     typename tuple_type<A6>::const_reference get() const { return m_x; }
5795 private:
5796     typename tuple_type<A6>::const_reference m_x;
5797 };
5798 
5799 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5800 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 7> : tuple_type<A7> {
5801     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) {}
5802     typename tuple_type<A7>::const_reference get() const { return m_x; }
5803 private:
5804     typename tuple_type<A7>::const_reference m_x;
5805 };
5806 
5807 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5808 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 8> : tuple_type<A8> {
5809     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) {}
5810     typename tuple_type<A8>::const_reference get() const { return m_x; }
5811 private:
5812     typename tuple_type<A8>::const_reference m_x;
5813 };
5814 
5815 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5816 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 9> : tuple_type<A9> {
5817     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) {}
5818     typename tuple_type<A9>::const_reference get() const { return m_x; }
5819 private:
5820     typename tuple_type<A9>::const_reference m_x;
5821 };
5822 
5823 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5824 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 10> : tuple_type<A10> {
5825     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) {}
5826     typename tuple_type<A10>::const_reference get() const { return m_x; }
5827 private:
5828     typename tuple_type<A10>::const_reference m_x;
5829 };
5830 
5831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5832 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 11> : tuple_type<A11> {
5833     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) {}
5834     typename tuple_type<A11>::const_reference get() const { return m_x; }
5835 private:
5836     typename tuple_type<A11>::const_reference m_x;
5837 };
5838 
5839 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5840 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 12> : tuple_type<A12> {
5841     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) {}
5842     typename tuple_type<A12>::const_reference get() const { return m_x; }
5843 private:
5844     typename tuple_type<A12>::const_reference m_x;
5845 };
5846 
5847 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5848 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 13> : tuple_type<A13> {
5849     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) {}
5850     typename tuple_type<A13>::const_reference get() const { return m_x; }
5851 private:
5852     typename tuple_type<A13>::const_reference m_x;
5853 };
5854 
5855 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
5856 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 14> : tuple_type<A14> {
5857     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) {}
5858     typename tuple_type<A14>::const_reference get() const { return m_x; }
5859 private:
5860     typename tuple_type<A14>::const_reference m_x;
5861 };
5862 
5863 
5864 
5865 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5866 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> {
5867     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) {}
5868     typename tuple_type<A0>::const_reference get() const { return m_x; }
5869 private:
5870     typename tuple_type<A0>::const_reference m_x;
5871 };
5872 
5873 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5874 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> {
5875     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) {}
5876     typename tuple_type<A1>::const_reference get() const { return m_x; }
5877 private:
5878     typename tuple_type<A1>::const_reference m_x;
5879 };
5880 
5881 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5882 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> {
5883     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) {}
5884     typename tuple_type<A2>::const_reference get() const { return m_x; }
5885 private:
5886     typename tuple_type<A2>::const_reference m_x;
5887 };
5888 
5889 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5890 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> {
5891     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) {}
5892     typename tuple_type<A3>::const_reference get() const { return m_x; }
5893 private:
5894     typename tuple_type<A3>::const_reference m_x;
5895 };
5896 
5897 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5898 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> {
5899     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) {}
5900     typename tuple_type<A4>::const_reference get() const { return m_x; }
5901 private:
5902     typename tuple_type<A4>::const_reference m_x;
5903 };
5904 
5905 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5906 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> {
5907     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) {}
5908     typename tuple_type<A5>::const_reference get() const { return m_x; }
5909 private:
5910     typename tuple_type<A5>::const_reference m_x;
5911 };
5912 
5913 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5914 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> {
5915     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) {}
5916     typename tuple_type<A6>::const_reference get() const { return m_x; }
5917 private:
5918     typename tuple_type<A6>::const_reference m_x;
5919 };
5920 
5921 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5922 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> {
5923     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) {}
5924     typename tuple_type<A7>::const_reference get() const { return m_x; }
5925 private:
5926     typename tuple_type<A7>::const_reference m_x;
5927 };
5928 
5929 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5930 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> {
5931     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) {}
5932     typename tuple_type<A8>::const_reference get() const { return m_x; }
5933 private:
5934     typename tuple_type<A8>::const_reference m_x;
5935 };
5936 
5937 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5938 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> {
5939     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) {}
5940     typename tuple_type<A9>::const_reference get() const { return m_x; }
5941 private:
5942     typename tuple_type<A9>::const_reference m_x;
5943 };
5944 
5945 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5946 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> {
5947     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) {}
5948     typename tuple_type<A10>::const_reference get() const { return m_x; }
5949 private:
5950     typename tuple_type<A10>::const_reference m_x;
5951 };
5952 
5953 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5954 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> {
5955     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) {}
5956     typename tuple_type<A11>::const_reference get() const { return m_x; }
5957 private:
5958     typename tuple_type<A11>::const_reference m_x;
5959 };
5960 
5961 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5962 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> {
5963     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) {}
5964     typename tuple_type<A12>::const_reference get() const { return m_x; }
5965 private:
5966     typename tuple_type<A12>::const_reference m_x;
5967 };
5968 
5969 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5970 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> {
5971     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) {}
5972     typename tuple_type<A13>::const_reference get() const { return m_x; }
5973 private:
5974     typename tuple_type<A13>::const_reference m_x;
5975 };
5976 
5977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5978 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> {
5979     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) {}
5980     typename tuple_type<A14>::const_reference get() const { return m_x; }
5981 private:
5982     typename tuple_type<A14>::const_reference m_x;
5983 };
5984 
5985 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
5986 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> {
5987     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) {}
5988     typename tuple_type<A15>::const_reference get() const { return m_x; }
5989 private:
5990     typename tuple_type<A15>::const_reference m_x;
5991 };
5992 
5993 
5994 
5995 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
5996 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> {
5997     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) {}
5998     typename tuple_type<A0>::const_reference get() const { return m_x; }
5999 private:
6000     typename tuple_type<A0>::const_reference m_x;
6001 };
6002 
6003 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6004 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> {
6005     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) {}
6006     typename tuple_type<A1>::const_reference get() const { return m_x; }
6007 private:
6008     typename tuple_type<A1>::const_reference m_x;
6009 };
6010 
6011 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6012 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> {
6013     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) {}
6014     typename tuple_type<A2>::const_reference get() const { return m_x; }
6015 private:
6016     typename tuple_type<A2>::const_reference m_x;
6017 };
6018 
6019 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6020 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> {
6021     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) {}
6022     typename tuple_type<A3>::const_reference get() const { return m_x; }
6023 private:
6024     typename tuple_type<A3>::const_reference m_x;
6025 };
6026 
6027 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6028 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> {
6029     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) {}
6030     typename tuple_type<A4>::const_reference get() const { return m_x; }
6031 private:
6032     typename tuple_type<A4>::const_reference m_x;
6033 };
6034 
6035 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6036 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> {
6037     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) {}
6038     typename tuple_type<A5>::const_reference get() const { return m_x; }
6039 private:
6040     typename tuple_type<A5>::const_reference m_x;
6041 };
6042 
6043 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6044 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> {
6045     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) {}
6046     typename tuple_type<A6>::const_reference get() const { return m_x; }
6047 private:
6048     typename tuple_type<A6>::const_reference m_x;
6049 };
6050 
6051 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6052 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> {
6053     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) {}
6054     typename tuple_type<A7>::const_reference get() const { return m_x; }
6055 private:
6056     typename tuple_type<A7>::const_reference m_x;
6057 };
6058 
6059 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6060 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> {
6061     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) {}
6062     typename tuple_type<A8>::const_reference get() const { return m_x; }
6063 private:
6064     typename tuple_type<A8>::const_reference m_x;
6065 };
6066 
6067 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6068 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> {
6069     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) {}
6070     typename tuple_type<A9>::const_reference get() const { return m_x; }
6071 private:
6072     typename tuple_type<A9>::const_reference m_x;
6073 };
6074 
6075 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6076 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> {
6077     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) {}
6078     typename tuple_type<A10>::const_reference get() const { return m_x; }
6079 private:
6080     typename tuple_type<A10>::const_reference m_x;
6081 };
6082 
6083 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6084 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> {
6085     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) {}
6086     typename tuple_type<A11>::const_reference get() const { return m_x; }
6087 private:
6088     typename tuple_type<A11>::const_reference m_x;
6089 };
6090 
6091 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6092 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> {
6093     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) {}
6094     typename tuple_type<A12>::const_reference get() const { return m_x; }
6095 private:
6096     typename tuple_type<A12>::const_reference m_x;
6097 };
6098 
6099 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6100 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> {
6101     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) {}
6102     typename tuple_type<A13>::const_reference get() const { return m_x; }
6103 private:
6104     typename tuple_type<A13>::const_reference m_x;
6105 };
6106 
6107 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6108 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> {
6109     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) {}
6110     typename tuple_type<A14>::const_reference get() const { return m_x; }
6111 private:
6112     typename tuple_type<A14>::const_reference m_x;
6113 };
6114 
6115 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6116 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> {
6117     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) {}
6118     typename tuple_type<A15>::const_reference get() const { return m_x; }
6119 private:
6120     typename tuple_type<A15>::const_reference m_x;
6121 };
6122 
6123 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
6124 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> {
6125     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) {}
6126     typename tuple_type<A16>::const_reference get() const { return m_x; }
6127 private:
6128     typename tuple_type<A16>::const_reference m_x;
6129 };
6130 
6131 
6132 
6133 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6134 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> {
6135     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) {}
6136     typename tuple_type<A0>::const_reference get() const { return m_x; }
6137 private:
6138     typename tuple_type<A0>::const_reference m_x;
6139 };
6140 
6141 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6142 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> {
6143     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) {}
6144     typename tuple_type<A1>::const_reference get() const { return m_x; }
6145 private:
6146     typename tuple_type<A1>::const_reference m_x;
6147 };
6148 
6149 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6150 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> {
6151     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) {}
6152     typename tuple_type<A2>::const_reference get() const { return m_x; }
6153 private:
6154     typename tuple_type<A2>::const_reference m_x;
6155 };
6156 
6157 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6158 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> {
6159     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) {}
6160     typename tuple_type<A3>::const_reference get() const { return m_x; }
6161 private:
6162     typename tuple_type<A3>::const_reference m_x;
6163 };
6164 
6165 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6166 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> {
6167     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) {}
6168     typename tuple_type<A4>::const_reference get() const { return m_x; }
6169 private:
6170     typename tuple_type<A4>::const_reference m_x;
6171 };
6172 
6173 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6174 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> {
6175     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) {}
6176     typename tuple_type<A5>::const_reference get() const { return m_x; }
6177 private:
6178     typename tuple_type<A5>::const_reference m_x;
6179 };
6180 
6181 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6182 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> {
6183     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) {}
6184     typename tuple_type<A6>::const_reference get() const { return m_x; }
6185 private:
6186     typename tuple_type<A6>::const_reference m_x;
6187 };
6188 
6189 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6190 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> {
6191     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) {}
6192     typename tuple_type<A7>::const_reference get() const { return m_x; }
6193 private:
6194     typename tuple_type<A7>::const_reference m_x;
6195 };
6196 
6197 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6198 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> {
6199     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) {}
6200     typename tuple_type<A8>::const_reference get() const { return m_x; }
6201 private:
6202     typename tuple_type<A8>::const_reference m_x;
6203 };
6204 
6205 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6206 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> {
6207     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) {}
6208     typename tuple_type<A9>::const_reference get() const { return m_x; }
6209 private:
6210     typename tuple_type<A9>::const_reference m_x;
6211 };
6212 
6213 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6214 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> {
6215     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) {}
6216     typename tuple_type<A10>::const_reference get() const { return m_x; }
6217 private:
6218     typename tuple_type<A10>::const_reference m_x;
6219 };
6220 
6221 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6222 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> {
6223     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) {}
6224     typename tuple_type<A11>::const_reference get() const { return m_x; }
6225 private:
6226     typename tuple_type<A11>::const_reference m_x;
6227 };
6228 
6229 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6230 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> {
6231     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) {}
6232     typename tuple_type<A12>::const_reference get() const { return m_x; }
6233 private:
6234     typename tuple_type<A12>::const_reference m_x;
6235 };
6236 
6237 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6238 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> {
6239     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) {}
6240     typename tuple_type<A13>::const_reference get() const { return m_x; }
6241 private:
6242     typename tuple_type<A13>::const_reference m_x;
6243 };
6244 
6245 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6246 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> {
6247     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) {}
6248     typename tuple_type<A14>::const_reference get() const { return m_x; }
6249 private:
6250     typename tuple_type<A14>::const_reference m_x;
6251 };
6252 
6253 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6254 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> {
6255     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) {}
6256     typename tuple_type<A15>::const_reference get() const { return m_x; }
6257 private:
6258     typename tuple_type<A15>::const_reference m_x;
6259 };
6260 
6261 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6262 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> {
6263     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) {}
6264     typename tuple_type<A16>::const_reference get() const { return m_x; }
6265 private:
6266     typename tuple_type<A16>::const_reference m_x;
6267 };
6268 
6269 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
6270 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> {
6271     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) {}
6272     typename tuple_type<A17>::const_reference get() const { return m_x; }
6273 private:
6274     typename tuple_type<A17>::const_reference m_x;
6275 };
6276 
6277 
6278 
6279 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6280 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> {
6281     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) {}
6282     typename tuple_type<A0>::const_reference get() const { return m_x; }
6283 private:
6284     typename tuple_type<A0>::const_reference m_x;
6285 };
6286 
6287 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6288 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> {
6289     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) {}
6290     typename tuple_type<A1>::const_reference get() const { return m_x; }
6291 private:
6292     typename tuple_type<A1>::const_reference m_x;
6293 };
6294 
6295 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6296 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> {
6297     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) {}
6298     typename tuple_type<A2>::const_reference get() const { return m_x; }
6299 private:
6300     typename tuple_type<A2>::const_reference m_x;
6301 };
6302 
6303 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6304 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> {
6305     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) {}
6306     typename tuple_type<A3>::const_reference get() const { return m_x; }
6307 private:
6308     typename tuple_type<A3>::const_reference m_x;
6309 };
6310 
6311 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6312 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> {
6313     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) {}
6314     typename tuple_type<A4>::const_reference get() const { return m_x; }
6315 private:
6316     typename tuple_type<A4>::const_reference m_x;
6317 };
6318 
6319 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6320 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> {
6321     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) {}
6322     typename tuple_type<A5>::const_reference get() const { return m_x; }
6323 private:
6324     typename tuple_type<A5>::const_reference m_x;
6325 };
6326 
6327 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6328 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> {
6329     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) {}
6330     typename tuple_type<A6>::const_reference get() const { return m_x; }
6331 private:
6332     typename tuple_type<A6>::const_reference m_x;
6333 };
6334 
6335 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6336 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> {
6337     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) {}
6338     typename tuple_type<A7>::const_reference get() const { return m_x; }
6339 private:
6340     typename tuple_type<A7>::const_reference m_x;
6341 };
6342 
6343 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6344 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> {
6345     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) {}
6346     typename tuple_type<A8>::const_reference get() const { return m_x; }
6347 private:
6348     typename tuple_type<A8>::const_reference m_x;
6349 };
6350 
6351 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6352 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> {
6353     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) {}
6354     typename tuple_type<A9>::const_reference get() const { return m_x; }
6355 private:
6356     typename tuple_type<A9>::const_reference m_x;
6357 };
6358 
6359 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6360 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> {
6361     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) {}
6362     typename tuple_type<A10>::const_reference get() const { return m_x; }
6363 private:
6364     typename tuple_type<A10>::const_reference m_x;
6365 };
6366 
6367 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6368 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> {
6369     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) {}
6370     typename tuple_type<A11>::const_reference get() const { return m_x; }
6371 private:
6372     typename tuple_type<A11>::const_reference m_x;
6373 };
6374 
6375 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6376 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> {
6377     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) {}
6378     typename tuple_type<A12>::const_reference get() const { return m_x; }
6379 private:
6380     typename tuple_type<A12>::const_reference m_x;
6381 };
6382 
6383 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6384 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> {
6385     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) {}
6386     typename tuple_type<A13>::const_reference get() const { return m_x; }
6387 private:
6388     typename tuple_type<A13>::const_reference m_x;
6389 };
6390 
6391 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6392 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> {
6393     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) {}
6394     typename tuple_type<A14>::const_reference get() const { return m_x; }
6395 private:
6396     typename tuple_type<A14>::const_reference m_x;
6397 };
6398 
6399 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6400 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> {
6401     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) {}
6402     typename tuple_type<A15>::const_reference get() const { return m_x; }
6403 private:
6404     typename tuple_type<A15>::const_reference m_x;
6405 };
6406 
6407 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6408 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> {
6409     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) {}
6410     typename tuple_type<A16>::const_reference get() const { return m_x; }
6411 private:
6412     typename tuple_type<A16>::const_reference m_x;
6413 };
6414 
6415 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6416 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> {
6417     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) {}
6418     typename tuple_type<A17>::const_reference get() const { return m_x; }
6419 private:
6420     typename tuple_type<A17>::const_reference m_x;
6421 };
6422 
6423 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
6424 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> {
6425     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) {}
6426     typename tuple_type<A18>::const_reference get() const { return m_x; }
6427 private:
6428     typename tuple_type<A18>::const_reference m_x;
6429 };
6430 
6431 
6432 
6433 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6434 struct 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> {
6435     const_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) {}
6436     typename tuple_type<A0>::const_reference get() const { return m_x; }
6437 private:
6438     typename tuple_type<A0>::const_reference m_x;
6439 };
6440 
6441 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6442 struct 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> {
6443     const_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) {}
6444     typename tuple_type<A1>::const_reference get() const { return m_x; }
6445 private:
6446     typename tuple_type<A1>::const_reference m_x;
6447 };
6448 
6449 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6450 struct 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> {
6451     const_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) {}
6452     typename tuple_type<A2>::const_reference get() const { return m_x; }
6453 private:
6454     typename tuple_type<A2>::const_reference m_x;
6455 };
6456 
6457 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6458 struct 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> {
6459     const_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) {}
6460     typename tuple_type<A3>::const_reference get() const { return m_x; }
6461 private:
6462     typename tuple_type<A3>::const_reference m_x;
6463 };
6464 
6465 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6466 struct 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> {
6467     const_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) {}
6468     typename tuple_type<A4>::const_reference get() const { return m_x; }
6469 private:
6470     typename tuple_type<A4>::const_reference m_x;
6471 };
6472 
6473 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6474 struct 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> {
6475     const_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) {}
6476     typename tuple_type<A5>::const_reference get() const { return m_x; }
6477 private:
6478     typename tuple_type<A5>::const_reference m_x;
6479 };
6480 
6481 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6482 struct 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> {
6483     const_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) {}
6484     typename tuple_type<A6>::const_reference get() const { return m_x; }
6485 private:
6486     typename tuple_type<A6>::const_reference m_x;
6487 };
6488 
6489 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6490 struct 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> {
6491     const_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) {}
6492     typename tuple_type<A7>::const_reference get() const { return m_x; }
6493 private:
6494     typename tuple_type<A7>::const_reference m_x;
6495 };
6496 
6497 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6498 struct 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> {
6499     const_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) {}
6500     typename tuple_type<A8>::const_reference get() const { return m_x; }
6501 private:
6502     typename tuple_type<A8>::const_reference m_x;
6503 };
6504 
6505 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6506 struct 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> {
6507     const_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) {}
6508     typename tuple_type<A9>::const_reference get() const { return m_x; }
6509 private:
6510     typename tuple_type<A9>::const_reference m_x;
6511 };
6512 
6513 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6514 struct 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> {
6515     const_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) {}
6516     typename tuple_type<A10>::const_reference get() const { return m_x; }
6517 private:
6518     typename tuple_type<A10>::const_reference m_x;
6519 };
6520 
6521 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6522 struct 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> {
6523     const_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) {}
6524     typename tuple_type<A11>::const_reference get() const { return m_x; }
6525 private:
6526     typename tuple_type<A11>::const_reference m_x;
6527 };
6528 
6529 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6530 struct 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> {
6531     const_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) {}
6532     typename tuple_type<A12>::const_reference get() const { return m_x; }
6533 private:
6534     typename tuple_type<A12>::const_reference m_x;
6535 };
6536 
6537 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6538 struct 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> {
6539     const_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) {}
6540     typename tuple_type<A13>::const_reference get() const { return m_x; }
6541 private:
6542     typename tuple_type<A13>::const_reference m_x;
6543 };
6544 
6545 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6546 struct 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> {
6547     const_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) {}
6548     typename tuple_type<A14>::const_reference get() const { return m_x; }
6549 private:
6550     typename tuple_type<A14>::const_reference m_x;
6551 };
6552 
6553 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6554 struct 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> {
6555     const_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) {}
6556     typename tuple_type<A15>::const_reference get() const { return m_x; }
6557 private:
6558     typename tuple_type<A15>::const_reference m_x;
6559 };
6560 
6561 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6562 struct 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> {
6563     const_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) {}
6564     typename tuple_type<A16>::const_reference get() const { return m_x; }
6565 private:
6566     typename tuple_type<A16>::const_reference m_x;
6567 };
6568 
6569 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6570 struct 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> {
6571     const_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) {}
6572     typename tuple_type<A17>::const_reference get() const { return m_x; }
6573 private:
6574     typename tuple_type<A17>::const_reference m_x;
6575 };
6576 
6577 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6578 struct 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> {
6579     const_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) {}
6580     typename tuple_type<A18>::const_reference get() const { return m_x; }
6581 private:
6582     typename tuple_type<A18>::const_reference m_x;
6583 };
6584 
6585 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
6586 struct 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> {
6587     const_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) {}
6588     typename tuple_type<A19>::const_reference get() const { return m_x; }
6589 private:
6590     typename tuple_type<A19>::const_reference m_x;
6591 };
6592 
6593 
6594 
6595 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6596 struct const_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> {
6597     const_tuple_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) {}
6598     typename tuple_type<A0>::const_reference get() const { return m_x; }
6599 private:
6600     typename tuple_type<A0>::const_reference m_x;
6601 };
6602 
6603 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6604 struct const_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> {
6605     const_tuple_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) {}
6606     typename tuple_type<A1>::const_reference get() const { return m_x; }
6607 private:
6608     typename tuple_type<A1>::const_reference m_x;
6609 };
6610 
6611 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6612 struct const_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> {
6613     const_tuple_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) {}
6614     typename tuple_type<A2>::const_reference get() const { return m_x; }
6615 private:
6616     typename tuple_type<A2>::const_reference m_x;
6617 };
6618 
6619 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6620 struct const_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> {
6621     const_tuple_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) {}
6622     typename tuple_type<A3>::const_reference get() const { return m_x; }
6623 private:
6624     typename tuple_type<A3>::const_reference m_x;
6625 };
6626 
6627 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6628 struct const_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> {
6629     const_tuple_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) {}
6630     typename tuple_type<A4>::const_reference get() const { return m_x; }
6631 private:
6632     typename tuple_type<A4>::const_reference m_x;
6633 };
6634 
6635 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6636 struct const_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> {
6637     const_tuple_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) {}
6638     typename tuple_type<A5>::const_reference get() const { return m_x; }
6639 private:
6640     typename tuple_type<A5>::const_reference m_x;
6641 };
6642 
6643 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6644 struct const_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> {
6645     const_tuple_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) {}
6646     typename tuple_type<A6>::const_reference get() const { return m_x; }
6647 private:
6648     typename tuple_type<A6>::const_reference m_x;
6649 };
6650 
6651 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6652 struct const_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> {
6653     const_tuple_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) {}
6654     typename tuple_type<A7>::const_reference get() const { return m_x; }
6655 private:
6656     typename tuple_type<A7>::const_reference m_x;
6657 };
6658 
6659 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6660 struct const_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> {
6661     const_tuple_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) {}
6662     typename tuple_type<A8>::const_reference get() const { return m_x; }
6663 private:
6664     typename tuple_type<A8>::const_reference m_x;
6665 };
6666 
6667 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6668 struct const_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> {
6669     const_tuple_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) {}
6670     typename tuple_type<A9>::const_reference get() const { return m_x; }
6671 private:
6672     typename tuple_type<A9>::const_reference m_x;
6673 };
6674 
6675 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6676 struct const_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> {
6677     const_tuple_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) {}
6678     typename tuple_type<A10>::const_reference get() const { return m_x; }
6679 private:
6680     typename tuple_type<A10>::const_reference m_x;
6681 };
6682 
6683 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6684 struct const_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> {
6685     const_tuple_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) {}
6686     typename tuple_type<A11>::const_reference get() const { return m_x; }
6687 private:
6688     typename tuple_type<A11>::const_reference m_x;
6689 };
6690 
6691 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6692 struct const_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> {
6693     const_tuple_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) {}
6694     typename tuple_type<A12>::const_reference get() const { return m_x; }
6695 private:
6696     typename tuple_type<A12>::const_reference m_x;
6697 };
6698 
6699 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6700 struct const_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> {
6701     const_tuple_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) {}
6702     typename tuple_type<A13>::const_reference get() const { return m_x; }
6703 private:
6704     typename tuple_type<A13>::const_reference m_x;
6705 };
6706 
6707 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6708 struct const_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> {
6709     const_tuple_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) {}
6710     typename tuple_type<A14>::const_reference get() const { return m_x; }
6711 private:
6712     typename tuple_type<A14>::const_reference m_x;
6713 };
6714 
6715 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6716 struct const_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> {
6717     const_tuple_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) {}
6718     typename tuple_type<A15>::const_reference get() const { return m_x; }
6719 private:
6720     typename tuple_type<A15>::const_reference m_x;
6721 };
6722 
6723 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6724 struct const_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> {
6725     const_tuple_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) {}
6726     typename tuple_type<A16>::const_reference get() const { return m_x; }
6727 private:
6728     typename tuple_type<A16>::const_reference m_x;
6729 };
6730 
6731 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6732 struct const_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> {
6733     const_tuple_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) {}
6734     typename tuple_type<A17>::const_reference get() const { return m_x; }
6735 private:
6736     typename tuple_type<A17>::const_reference m_x;
6737 };
6738 
6739 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6740 struct const_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> {
6741     const_tuple_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) {}
6742     typename tuple_type<A18>::const_reference get() const { return m_x; }
6743 private:
6744     typename tuple_type<A18>::const_reference m_x;
6745 };
6746 
6747 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6748 struct const_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> {
6749     const_tuple_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) {}
6750     typename tuple_type<A19>::const_reference get() const { return m_x; }
6751 private:
6752     typename tuple_type<A19>::const_reference m_x;
6753 };
6754 
6755 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
6756 struct const_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> {
6757     const_tuple_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) {}
6758     typename tuple_type<A20>::const_reference get() const { return m_x; }
6759 private:
6760     typename tuple_type<A20>::const_reference m_x;
6761 };
6762 
6763 
6764 
6765 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6766 struct const_tuple_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> {
6767     const_tuple_element(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) {}
6768     typename tuple_type<A0>::const_reference get() const { return m_x; }
6769 private:
6770     typename tuple_type<A0>::const_reference m_x;
6771 };
6772 
6773 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6774 struct const_tuple_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> {
6775     const_tuple_element(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) {}
6776     typename tuple_type<A1>::const_reference get() const { return m_x; }
6777 private:
6778     typename tuple_type<A1>::const_reference m_x;
6779 };
6780 
6781 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6782 struct const_tuple_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> {
6783     const_tuple_element(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) {}
6784     typename tuple_type<A2>::const_reference get() const { return m_x; }
6785 private:
6786     typename tuple_type<A2>::const_reference m_x;
6787 };
6788 
6789 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6790 struct const_tuple_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> {
6791     const_tuple_element(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) {}
6792     typename tuple_type<A3>::const_reference get() const { return m_x; }
6793 private:
6794     typename tuple_type<A3>::const_reference m_x;
6795 };
6796 
6797 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6798 struct const_tuple_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> {
6799     const_tuple_element(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) {}
6800     typename tuple_type<A4>::const_reference get() const { return m_x; }
6801 private:
6802     typename tuple_type<A4>::const_reference m_x;
6803 };
6804 
6805 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6806 struct const_tuple_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> {
6807     const_tuple_element(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) {}
6808     typename tuple_type<A5>::const_reference get() const { return m_x; }
6809 private:
6810     typename tuple_type<A5>::const_reference m_x;
6811 };
6812 
6813 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6814 struct const_tuple_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> {
6815     const_tuple_element(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) {}
6816     typename tuple_type<A6>::const_reference get() const { return m_x; }
6817 private:
6818     typename tuple_type<A6>::const_reference m_x;
6819 };
6820 
6821 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6822 struct const_tuple_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> {
6823     const_tuple_element(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) {}
6824     typename tuple_type<A7>::const_reference get() const { return m_x; }
6825 private:
6826     typename tuple_type<A7>::const_reference m_x;
6827 };
6828 
6829 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6830 struct const_tuple_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> {
6831     const_tuple_element(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) {}
6832     typename tuple_type<A8>::const_reference get() const { return m_x; }
6833 private:
6834     typename tuple_type<A8>::const_reference m_x;
6835 };
6836 
6837 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6838 struct const_tuple_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> {
6839     const_tuple_element(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) {}
6840     typename tuple_type<A9>::const_reference get() const { return m_x; }
6841 private:
6842     typename tuple_type<A9>::const_reference m_x;
6843 };
6844 
6845 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6846 struct const_tuple_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> {
6847     const_tuple_element(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) {}
6848     typename tuple_type<A10>::const_reference get() const { return m_x; }
6849 private:
6850     typename tuple_type<A10>::const_reference m_x;
6851 };
6852 
6853 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6854 struct const_tuple_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> {
6855     const_tuple_element(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) {}
6856     typename tuple_type<A11>::const_reference get() const { return m_x; }
6857 private:
6858     typename tuple_type<A11>::const_reference m_x;
6859 };
6860 
6861 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6862 struct const_tuple_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> {
6863     const_tuple_element(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) {}
6864     typename tuple_type<A12>::const_reference get() const { return m_x; }
6865 private:
6866     typename tuple_type<A12>::const_reference m_x;
6867 };
6868 
6869 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6870 struct const_tuple_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> {
6871     const_tuple_element(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) {}
6872     typename tuple_type<A13>::const_reference get() const { return m_x; }
6873 private:
6874     typename tuple_type<A13>::const_reference m_x;
6875 };
6876 
6877 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6878 struct const_tuple_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> {
6879     const_tuple_element(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) {}
6880     typename tuple_type<A14>::const_reference get() const { return m_x; }
6881 private:
6882     typename tuple_type<A14>::const_reference m_x;
6883 };
6884 
6885 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6886 struct const_tuple_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> {
6887     const_tuple_element(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) {}
6888     typename tuple_type<A15>::const_reference get() const { return m_x; }
6889 private:
6890     typename tuple_type<A15>::const_reference m_x;
6891 };
6892 
6893 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6894 struct const_tuple_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> {
6895     const_tuple_element(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) {}
6896     typename tuple_type<A16>::const_reference get() const { return m_x; }
6897 private:
6898     typename tuple_type<A16>::const_reference m_x;
6899 };
6900 
6901 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6902 struct const_tuple_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> {
6903     const_tuple_element(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) {}
6904     typename tuple_type<A17>::const_reference get() const { return m_x; }
6905 private:
6906     typename tuple_type<A17>::const_reference m_x;
6907 };
6908 
6909 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6910 struct const_tuple_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> {
6911     const_tuple_element(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) {}
6912     typename tuple_type<A18>::const_reference get() const { return m_x; }
6913 private:
6914     typename tuple_type<A18>::const_reference m_x;
6915 };
6916 
6917 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6918 struct const_tuple_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> {
6919     const_tuple_element(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) {}
6920     typename tuple_type<A19>::const_reference get() const { return m_x; }
6921 private:
6922     typename tuple_type<A19>::const_reference m_x;
6923 };
6924 
6925 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6926 struct const_tuple_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> {
6927     const_tuple_element(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) {}
6928     typename tuple_type<A20>::const_reference get() const { return m_x; }
6929 private:
6930     typename tuple_type<A20>::const_reference m_x;
6931 };
6932 
6933 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
6934 struct const_tuple_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> {
6935     const_tuple_element(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) {}
6936     typename tuple_type<A21>::const_reference get() const { return m_x; }
6937 private:
6938     typename tuple_type<A21>::const_reference m_x;
6939 };
6940 
6941 
6942 
6943 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6944 struct const_tuple_element<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> {
6945     const_tuple_element(const 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) {}
6946     typename tuple_type<A0>::const_reference get() const { return m_x; }
6947 private:
6948     typename tuple_type<A0>::const_reference m_x;
6949 };
6950 
6951 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6952 struct const_tuple_element<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> {
6953     const_tuple_element(const 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) {}
6954     typename tuple_type<A1>::const_reference get() const { return m_x; }
6955 private:
6956     typename tuple_type<A1>::const_reference m_x;
6957 };
6958 
6959 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6960 struct const_tuple_element<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> {
6961     const_tuple_element(const 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) {}
6962     typename tuple_type<A2>::const_reference get() const { return m_x; }
6963 private:
6964     typename tuple_type<A2>::const_reference m_x;
6965 };
6966 
6967 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6968 struct const_tuple_element<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> {
6969     const_tuple_element(const 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) {}
6970     typename tuple_type<A3>::const_reference get() const { return m_x; }
6971 private:
6972     typename tuple_type<A3>::const_reference m_x;
6973 };
6974 
6975 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6976 struct const_tuple_element<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> {
6977     const_tuple_element(const 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) {}
6978     typename tuple_type<A4>::const_reference get() const { return m_x; }
6979 private:
6980     typename tuple_type<A4>::const_reference m_x;
6981 };
6982 
6983 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6984 struct const_tuple_element<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> {
6985     const_tuple_element(const 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) {}
6986     typename tuple_type<A5>::const_reference get() const { return m_x; }
6987 private:
6988     typename tuple_type<A5>::const_reference m_x;
6989 };
6990 
6991 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
6992 struct const_tuple_element<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> {
6993     const_tuple_element(const 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) {}
6994     typename tuple_type<A6>::const_reference get() const { return m_x; }
6995 private:
6996     typename tuple_type<A6>::const_reference m_x;
6997 };
6998 
6999 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7000 struct const_tuple_element<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> {
7001     const_tuple_element(const 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) {}
7002     typename tuple_type<A7>::const_reference get() const { return m_x; }
7003 private:
7004     typename tuple_type<A7>::const_reference m_x;
7005 };
7006 
7007 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7008 struct const_tuple_element<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> {
7009     const_tuple_element(const 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) {}
7010     typename tuple_type<A8>::const_reference get() const { return m_x; }
7011 private:
7012     typename tuple_type<A8>::const_reference m_x;
7013 };
7014 
7015 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7016 struct const_tuple_element<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> {
7017     const_tuple_element(const 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) {}
7018     typename tuple_type<A9>::const_reference get() const { return m_x; }
7019 private:
7020     typename tuple_type<A9>::const_reference m_x;
7021 };
7022 
7023 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7024 struct const_tuple_element<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> {
7025     const_tuple_element(const 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) {}
7026     typename tuple_type<A10>::const_reference get() const { return m_x; }
7027 private:
7028     typename tuple_type<A10>::const_reference m_x;
7029 };
7030 
7031 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7032 struct const_tuple_element<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> {
7033     const_tuple_element(const 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) {}
7034     typename tuple_type<A11>::const_reference get() const { return m_x; }
7035 private:
7036     typename tuple_type<A11>::const_reference m_x;
7037 };
7038 
7039 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7040 struct const_tuple_element<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> {
7041     const_tuple_element(const 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) {}
7042     typename tuple_type<A12>::const_reference get() const { return m_x; }
7043 private:
7044     typename tuple_type<A12>::const_reference m_x;
7045 };
7046 
7047 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7048 struct const_tuple_element<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> {
7049     const_tuple_element(const 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) {}
7050     typename tuple_type<A13>::const_reference get() const { return m_x; }
7051 private:
7052     typename tuple_type<A13>::const_reference m_x;
7053 };
7054 
7055 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7056 struct const_tuple_element<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> {
7057     const_tuple_element(const 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) {}
7058     typename tuple_type<A14>::const_reference get() const { return m_x; }
7059 private:
7060     typename tuple_type<A14>::const_reference m_x;
7061 };
7062 
7063 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7064 struct const_tuple_element<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> {
7065     const_tuple_element(const 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) {}
7066     typename tuple_type<A15>::const_reference get() const { return m_x; }
7067 private:
7068     typename tuple_type<A15>::const_reference m_x;
7069 };
7070 
7071 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7072 struct const_tuple_element<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> {
7073     const_tuple_element(const 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) {}
7074     typename tuple_type<A16>::const_reference get() const { return m_x; }
7075 private:
7076     typename tuple_type<A16>::const_reference m_x;
7077 };
7078 
7079 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7080 struct const_tuple_element<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> {
7081     const_tuple_element(const 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) {}
7082     typename tuple_type<A17>::const_reference get() const { return m_x; }
7083 private:
7084     typename tuple_type<A17>::const_reference m_x;
7085 };
7086 
7087 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7088 struct const_tuple_element<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> {
7089     const_tuple_element(const 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) {}
7090     typename tuple_type<A18>::const_reference get() const { return m_x; }
7091 private:
7092     typename tuple_type<A18>::const_reference m_x;
7093 };
7094 
7095 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7096 struct const_tuple_element<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> {
7097     const_tuple_element(const 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) {}
7098     typename tuple_type<A19>::const_reference get() const { return m_x; }
7099 private:
7100     typename tuple_type<A19>::const_reference m_x;
7101 };
7102 
7103 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7104 struct const_tuple_element<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> {
7105     const_tuple_element(const 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) {}
7106     typename tuple_type<A20>::const_reference get() const { return m_x; }
7107 private:
7108     typename tuple_type<A20>::const_reference m_x;
7109 };
7110 
7111 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7112 struct const_tuple_element<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> {
7113     const_tuple_element(const 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) {}
7114     typename tuple_type<A21>::const_reference get() const { return m_x; }
7115 private:
7116     typename tuple_type<A21>::const_reference m_x;
7117 };
7118 
7119 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
7120 struct const_tuple_element<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> {
7121     const_tuple_element(const 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) {}
7122     typename tuple_type<A22>::const_reference get() const { return m_x; }
7123 private:
7124     typename tuple_type<A22>::const_reference m_x;
7125 };
7126 
7127 
7128 
7129 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7130 struct const_tuple_element<tuple<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> {
7131     const_tuple_element(const tuple<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) {}
7132     typename tuple_type<A0>::const_reference get() const { return m_x; }
7133 private:
7134     typename tuple_type<A0>::const_reference m_x;
7135 };
7136 
7137 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7138 struct const_tuple_element<tuple<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> {
7139     const_tuple_element(const tuple<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) {}
7140     typename tuple_type<A1>::const_reference get() const { return m_x; }
7141 private:
7142     typename tuple_type<A1>::const_reference m_x;
7143 };
7144 
7145 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7146 struct const_tuple_element<tuple<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> {
7147     const_tuple_element(const tuple<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) {}
7148     typename tuple_type<A2>::const_reference get() const { return m_x; }
7149 private:
7150     typename tuple_type<A2>::const_reference m_x;
7151 };
7152 
7153 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7154 struct const_tuple_element<tuple<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> {
7155     const_tuple_element(const tuple<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) {}
7156     typename tuple_type<A3>::const_reference get() const { return m_x; }
7157 private:
7158     typename tuple_type<A3>::const_reference m_x;
7159 };
7160 
7161 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7162 struct const_tuple_element<tuple<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> {
7163     const_tuple_element(const tuple<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) {}
7164     typename tuple_type<A4>::const_reference get() const { return m_x; }
7165 private:
7166     typename tuple_type<A4>::const_reference m_x;
7167 };
7168 
7169 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7170 struct const_tuple_element<tuple<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> {
7171     const_tuple_element(const tuple<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) {}
7172     typename tuple_type<A5>::const_reference get() const { return m_x; }
7173 private:
7174     typename tuple_type<A5>::const_reference m_x;
7175 };
7176 
7177 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7178 struct const_tuple_element<tuple<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> {
7179     const_tuple_element(const tuple<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) {}
7180     typename tuple_type<A6>::const_reference get() const { return m_x; }
7181 private:
7182     typename tuple_type<A6>::const_reference m_x;
7183 };
7184 
7185 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7186 struct const_tuple_element<tuple<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> {
7187     const_tuple_element(const tuple<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) {}
7188     typename tuple_type<A7>::const_reference get() const { return m_x; }
7189 private:
7190     typename tuple_type<A7>::const_reference m_x;
7191 };
7192 
7193 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7194 struct const_tuple_element<tuple<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> {
7195     const_tuple_element(const tuple<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) {}
7196     typename tuple_type<A8>::const_reference get() const { return m_x; }
7197 private:
7198     typename tuple_type<A8>::const_reference m_x;
7199 };
7200 
7201 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7202 struct const_tuple_element<tuple<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> {
7203     const_tuple_element(const tuple<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) {}
7204     typename tuple_type<A9>::const_reference get() const { return m_x; }
7205 private:
7206     typename tuple_type<A9>::const_reference m_x;
7207 };
7208 
7209 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7210 struct const_tuple_element<tuple<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> {
7211     const_tuple_element(const tuple<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) {}
7212     typename tuple_type<A10>::const_reference get() const { return m_x; }
7213 private:
7214     typename tuple_type<A10>::const_reference m_x;
7215 };
7216 
7217 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7218 struct const_tuple_element<tuple<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> {
7219     const_tuple_element(const tuple<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) {}
7220     typename tuple_type<A11>::const_reference get() const { return m_x; }
7221 private:
7222     typename tuple_type<A11>::const_reference m_x;
7223 };
7224 
7225 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7226 struct const_tuple_element<tuple<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> {
7227     const_tuple_element(const tuple<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) {}
7228     typename tuple_type<A12>::const_reference get() const { return m_x; }
7229 private:
7230     typename tuple_type<A12>::const_reference m_x;
7231 };
7232 
7233 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7234 struct const_tuple_element<tuple<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> {
7235     const_tuple_element(const tuple<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) {}
7236     typename tuple_type<A13>::const_reference get() const { return m_x; }
7237 private:
7238     typename tuple_type<A13>::const_reference m_x;
7239 };
7240 
7241 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7242 struct const_tuple_element<tuple<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> {
7243     const_tuple_element(const tuple<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) {}
7244     typename tuple_type<A14>::const_reference get() const { return m_x; }
7245 private:
7246     typename tuple_type<A14>::const_reference m_x;
7247 };
7248 
7249 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7250 struct const_tuple_element<tuple<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> {
7251     const_tuple_element(const tuple<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) {}
7252     typename tuple_type<A15>::const_reference get() const { return m_x; }
7253 private:
7254     typename tuple_type<A15>::const_reference m_x;
7255 };
7256 
7257 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7258 struct const_tuple_element<tuple<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> {
7259     const_tuple_element(const tuple<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) {}
7260     typename tuple_type<A16>::const_reference get() const { return m_x; }
7261 private:
7262     typename tuple_type<A16>::const_reference m_x;
7263 };
7264 
7265 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7266 struct const_tuple_element<tuple<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> {
7267     const_tuple_element(const tuple<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) {}
7268     typename tuple_type<A17>::const_reference get() const { return m_x; }
7269 private:
7270     typename tuple_type<A17>::const_reference m_x;
7271 };
7272 
7273 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7274 struct const_tuple_element<tuple<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> {
7275     const_tuple_element(const tuple<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) {}
7276     typename tuple_type<A18>::const_reference get() const { return m_x; }
7277 private:
7278     typename tuple_type<A18>::const_reference m_x;
7279 };
7280 
7281 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7282 struct const_tuple_element<tuple<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> {
7283     const_tuple_element(const tuple<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) {}
7284     typename tuple_type<A19>::const_reference get() const { return m_x; }
7285 private:
7286     typename tuple_type<A19>::const_reference m_x;
7287 };
7288 
7289 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7290 struct const_tuple_element<tuple<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> {
7291     const_tuple_element(const tuple<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) {}
7292     typename tuple_type<A20>::const_reference get() const { return m_x; }
7293 private:
7294     typename tuple_type<A20>::const_reference m_x;
7295 };
7296 
7297 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7298 struct const_tuple_element<tuple<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> {
7299     const_tuple_element(const tuple<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) {}
7300     typename tuple_type<A21>::const_reference get() const { return m_x; }
7301 private:
7302     typename tuple_type<A21>::const_reference m_x;
7303 };
7304 
7305 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7306 struct const_tuple_element<tuple<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> {
7307     const_tuple_element(const tuple<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) {}
7308     typename tuple_type<A22>::const_reference get() const { return m_x; }
7309 private:
7310     typename tuple_type<A22>::const_reference m_x;
7311 };
7312 
7313 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
7314 struct const_tuple_element<tuple<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> {
7315     const_tuple_element(const tuple<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) {}
7316     typename tuple_type<A23>::const_reference get() const { return m_x; }
7317 private:
7318     typename tuple_type<A23>::const_reference m_x;
7319 };
7320 
7321 
7322 
7323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7324 struct const_tuple_element<tuple<A0, 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> {
7325     const_tuple_element(const tuple<A0, 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) {}
7326     typename tuple_type<A0>::const_reference get() const { return m_x; }
7327 private:
7328     typename tuple_type<A0>::const_reference m_x;
7329 };
7330 
7331 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7332 struct const_tuple_element<tuple<A0, 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> {
7333     const_tuple_element(const tuple<A0, 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) {}
7334     typename tuple_type<A1>::const_reference get() const { return m_x; }
7335 private:
7336     typename tuple_type<A1>::const_reference m_x;
7337 };
7338 
7339 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7340 struct const_tuple_element<tuple<A0, 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> {
7341     const_tuple_element(const tuple<A0, 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) {}
7342     typename tuple_type<A2>::const_reference get() const { return m_x; }
7343 private:
7344     typename tuple_type<A2>::const_reference m_x;
7345 };
7346 
7347 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7348 struct const_tuple_element<tuple<A0, 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> {
7349     const_tuple_element(const tuple<A0, 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) {}
7350     typename tuple_type<A3>::const_reference get() const { return m_x; }
7351 private:
7352     typename tuple_type<A3>::const_reference m_x;
7353 };
7354 
7355 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7356 struct const_tuple_element<tuple<A0, 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> {
7357     const_tuple_element(const tuple<A0, 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) {}
7358     typename tuple_type<A4>::const_reference get() const { return m_x; }
7359 private:
7360     typename tuple_type<A4>::const_reference m_x;
7361 };
7362 
7363 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7364 struct const_tuple_element<tuple<A0, 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> {
7365     const_tuple_element(const tuple<A0, 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) {}
7366     typename tuple_type<A5>::const_reference get() const { return m_x; }
7367 private:
7368     typename tuple_type<A5>::const_reference m_x;
7369 };
7370 
7371 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7372 struct const_tuple_element<tuple<A0, 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> {
7373     const_tuple_element(const tuple<A0, 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) {}
7374     typename tuple_type<A6>::const_reference get() const { return m_x; }
7375 private:
7376     typename tuple_type<A6>::const_reference m_x;
7377 };
7378 
7379 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7380 struct const_tuple_element<tuple<A0, 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> {
7381     const_tuple_element(const tuple<A0, 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) {}
7382     typename tuple_type<A7>::const_reference get() const { return m_x; }
7383 private:
7384     typename tuple_type<A7>::const_reference m_x;
7385 };
7386 
7387 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7388 struct const_tuple_element<tuple<A0, 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> {
7389     const_tuple_element(const tuple<A0, 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) {}
7390     typename tuple_type<A8>::const_reference get() const { return m_x; }
7391 private:
7392     typename tuple_type<A8>::const_reference m_x;
7393 };
7394 
7395 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7396 struct const_tuple_element<tuple<A0, 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> {
7397     const_tuple_element(const tuple<A0, 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) {}
7398     typename tuple_type<A9>::const_reference get() const { return m_x; }
7399 private:
7400     typename tuple_type<A9>::const_reference m_x;
7401 };
7402 
7403 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7404 struct const_tuple_element<tuple<A0, 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> {
7405     const_tuple_element(const tuple<A0, 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) {}
7406     typename tuple_type<A10>::const_reference get() const { return m_x; }
7407 private:
7408     typename tuple_type<A10>::const_reference m_x;
7409 };
7410 
7411 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7412 struct const_tuple_element<tuple<A0, 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> {
7413     const_tuple_element(const tuple<A0, 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) {}
7414     typename tuple_type<A11>::const_reference get() const { return m_x; }
7415 private:
7416     typename tuple_type<A11>::const_reference m_x;
7417 };
7418 
7419 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7420 struct const_tuple_element<tuple<A0, 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> {
7421     const_tuple_element(const tuple<A0, 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) {}
7422     typename tuple_type<A12>::const_reference get() const { return m_x; }
7423 private:
7424     typename tuple_type<A12>::const_reference m_x;
7425 };
7426 
7427 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7428 struct const_tuple_element<tuple<A0, 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> {
7429     const_tuple_element(const tuple<A0, 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) {}
7430     typename tuple_type<A13>::const_reference get() const { return m_x; }
7431 private:
7432     typename tuple_type<A13>::const_reference m_x;
7433 };
7434 
7435 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7436 struct const_tuple_element<tuple<A0, 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> {
7437     const_tuple_element(const tuple<A0, 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) {}
7438     typename tuple_type<A14>::const_reference get() const { return m_x; }
7439 private:
7440     typename tuple_type<A14>::const_reference m_x;
7441 };
7442 
7443 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7444 struct const_tuple_element<tuple<A0, 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> {
7445     const_tuple_element(const tuple<A0, 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) {}
7446     typename tuple_type<A15>::const_reference get() const { return m_x; }
7447 private:
7448     typename tuple_type<A15>::const_reference m_x;
7449 };
7450 
7451 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7452 struct const_tuple_element<tuple<A0, 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> {
7453     const_tuple_element(const tuple<A0, 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) {}
7454     typename tuple_type<A16>::const_reference get() const { return m_x; }
7455 private:
7456     typename tuple_type<A16>::const_reference m_x;
7457 };
7458 
7459 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7460 struct const_tuple_element<tuple<A0, 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> {
7461     const_tuple_element(const tuple<A0, 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) {}
7462     typename tuple_type<A17>::const_reference get() const { return m_x; }
7463 private:
7464     typename tuple_type<A17>::const_reference m_x;
7465 };
7466 
7467 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7468 struct const_tuple_element<tuple<A0, 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> {
7469     const_tuple_element(const tuple<A0, 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) {}
7470     typename tuple_type<A18>::const_reference get() const { return m_x; }
7471 private:
7472     typename tuple_type<A18>::const_reference m_x;
7473 };
7474 
7475 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7476 struct const_tuple_element<tuple<A0, 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> {
7477     const_tuple_element(const tuple<A0, 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) {}
7478     typename tuple_type<A19>::const_reference get() const { return m_x; }
7479 private:
7480     typename tuple_type<A19>::const_reference m_x;
7481 };
7482 
7483 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7484 struct const_tuple_element<tuple<A0, 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> {
7485     const_tuple_element(const tuple<A0, 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) {}
7486     typename tuple_type<A20>::const_reference get() const { return m_x; }
7487 private:
7488     typename tuple_type<A20>::const_reference m_x;
7489 };
7490 
7491 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7492 struct const_tuple_element<tuple<A0, 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> {
7493     const_tuple_element(const tuple<A0, 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) {}
7494     typename tuple_type<A21>::const_reference get() const { return m_x; }
7495 private:
7496     typename tuple_type<A21>::const_reference m_x;
7497 };
7498 
7499 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7500 struct const_tuple_element<tuple<A0, 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> {
7501     const_tuple_element(const tuple<A0, 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) {}
7502     typename tuple_type<A22>::const_reference get() const { return m_x; }
7503 private:
7504     typename tuple_type<A22>::const_reference m_x;
7505 };
7506 
7507 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7508 struct const_tuple_element<tuple<A0, 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> {
7509     const_tuple_element(const tuple<A0, 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) {}
7510     typename tuple_type<A23>::const_reference get() const { return m_x; }
7511 private:
7512     typename tuple_type<A23>::const_reference m_x;
7513 };
7514 
7515 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
7516 struct const_tuple_element<tuple<A0, 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> {
7517     const_tuple_element(const tuple<A0, 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) {}
7518     typename tuple_type<A24>::const_reference get() const { return m_x; }
7519 private:
7520     typename tuple_type<A24>::const_reference m_x;
7521 };
7522 
7523 
7524 
7525 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7526 struct const_tuple_element<tuple<A0, A1, 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> {
7527     const_tuple_element(const tuple<A0, A1, 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) {}
7528     typename tuple_type<A0>::const_reference get() const { return m_x; }
7529 private:
7530     typename tuple_type<A0>::const_reference m_x;
7531 };
7532 
7533 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7534 struct const_tuple_element<tuple<A0, A1, 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> {
7535     const_tuple_element(const tuple<A0, A1, 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) {}
7536     typename tuple_type<A1>::const_reference get() const { return m_x; }
7537 private:
7538     typename tuple_type<A1>::const_reference m_x;
7539 };
7540 
7541 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7542 struct const_tuple_element<tuple<A0, A1, 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> {
7543     const_tuple_element(const tuple<A0, A1, 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) {}
7544     typename tuple_type<A2>::const_reference get() const { return m_x; }
7545 private:
7546     typename tuple_type<A2>::const_reference m_x;
7547 };
7548 
7549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7550 struct const_tuple_element<tuple<A0, A1, 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> {
7551     const_tuple_element(const tuple<A0, A1, 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) {}
7552     typename tuple_type<A3>::const_reference get() const { return m_x; }
7553 private:
7554     typename tuple_type<A3>::const_reference m_x;
7555 };
7556 
7557 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7558 struct const_tuple_element<tuple<A0, A1, 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> {
7559     const_tuple_element(const tuple<A0, A1, 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) {}
7560     typename tuple_type<A4>::const_reference get() const { return m_x; }
7561 private:
7562     typename tuple_type<A4>::const_reference m_x;
7563 };
7564 
7565 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7566 struct const_tuple_element<tuple<A0, A1, 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> {
7567     const_tuple_element(const tuple<A0, A1, 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) {}
7568     typename tuple_type<A5>::const_reference get() const { return m_x; }
7569 private:
7570     typename tuple_type<A5>::const_reference m_x;
7571 };
7572 
7573 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7574 struct const_tuple_element<tuple<A0, A1, 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> {
7575     const_tuple_element(const tuple<A0, A1, 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) {}
7576     typename tuple_type<A6>::const_reference get() const { return m_x; }
7577 private:
7578     typename tuple_type<A6>::const_reference m_x;
7579 };
7580 
7581 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7582 struct const_tuple_element<tuple<A0, A1, 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> {
7583     const_tuple_element(const tuple<A0, A1, 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) {}
7584     typename tuple_type<A7>::const_reference get() const { return m_x; }
7585 private:
7586     typename tuple_type<A7>::const_reference m_x;
7587 };
7588 
7589 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7590 struct const_tuple_element<tuple<A0, A1, 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> {
7591     const_tuple_element(const tuple<A0, A1, 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) {}
7592     typename tuple_type<A8>::const_reference get() const { return m_x; }
7593 private:
7594     typename tuple_type<A8>::const_reference m_x;
7595 };
7596 
7597 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7598 struct const_tuple_element<tuple<A0, A1, 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> {
7599     const_tuple_element(const tuple<A0, A1, 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) {}
7600     typename tuple_type<A9>::const_reference get() const { return m_x; }
7601 private:
7602     typename tuple_type<A9>::const_reference m_x;
7603 };
7604 
7605 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7606 struct const_tuple_element<tuple<A0, A1, 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> {
7607     const_tuple_element(const tuple<A0, A1, 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) {}
7608     typename tuple_type<A10>::const_reference get() const { return m_x; }
7609 private:
7610     typename tuple_type<A10>::const_reference m_x;
7611 };
7612 
7613 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7614 struct const_tuple_element<tuple<A0, A1, 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> {
7615     const_tuple_element(const tuple<A0, A1, 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) {}
7616     typename tuple_type<A11>::const_reference get() const { return m_x; }
7617 private:
7618     typename tuple_type<A11>::const_reference m_x;
7619 };
7620 
7621 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7622 struct const_tuple_element<tuple<A0, A1, 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> {
7623     const_tuple_element(const tuple<A0, A1, 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) {}
7624     typename tuple_type<A12>::const_reference get() const { return m_x; }
7625 private:
7626     typename tuple_type<A12>::const_reference m_x;
7627 };
7628 
7629 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7630 struct const_tuple_element<tuple<A0, A1, 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> {
7631     const_tuple_element(const tuple<A0, A1, 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) {}
7632     typename tuple_type<A13>::const_reference get() const { return m_x; }
7633 private:
7634     typename tuple_type<A13>::const_reference m_x;
7635 };
7636 
7637 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7638 struct const_tuple_element<tuple<A0, A1, 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> {
7639     const_tuple_element(const tuple<A0, A1, 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) {}
7640     typename tuple_type<A14>::const_reference get() const { return m_x; }
7641 private:
7642     typename tuple_type<A14>::const_reference m_x;
7643 };
7644 
7645 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7646 struct const_tuple_element<tuple<A0, A1, 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> {
7647     const_tuple_element(const tuple<A0, A1, 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) {}
7648     typename tuple_type<A15>::const_reference get() const { return m_x; }
7649 private:
7650     typename tuple_type<A15>::const_reference m_x;
7651 };
7652 
7653 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7654 struct const_tuple_element<tuple<A0, A1, 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> {
7655     const_tuple_element(const tuple<A0, A1, 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) {}
7656     typename tuple_type<A16>::const_reference get() const { return m_x; }
7657 private:
7658     typename tuple_type<A16>::const_reference m_x;
7659 };
7660 
7661 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7662 struct const_tuple_element<tuple<A0, A1, 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> {
7663     const_tuple_element(const tuple<A0, A1, 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) {}
7664     typename tuple_type<A17>::const_reference get() const { return m_x; }
7665 private:
7666     typename tuple_type<A17>::const_reference m_x;
7667 };
7668 
7669 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7670 struct const_tuple_element<tuple<A0, A1, 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> {
7671     const_tuple_element(const tuple<A0, A1, 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) {}
7672     typename tuple_type<A18>::const_reference get() const { return m_x; }
7673 private:
7674     typename tuple_type<A18>::const_reference m_x;
7675 };
7676 
7677 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7678 struct const_tuple_element<tuple<A0, A1, 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> {
7679     const_tuple_element(const tuple<A0, A1, 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) {}
7680     typename tuple_type<A19>::const_reference get() const { return m_x; }
7681 private:
7682     typename tuple_type<A19>::const_reference m_x;
7683 };
7684 
7685 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7686 struct const_tuple_element<tuple<A0, A1, 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> {
7687     const_tuple_element(const tuple<A0, A1, 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) {}
7688     typename tuple_type<A20>::const_reference get() const { return m_x; }
7689 private:
7690     typename tuple_type<A20>::const_reference m_x;
7691 };
7692 
7693 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7694 struct const_tuple_element<tuple<A0, A1, 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> {
7695     const_tuple_element(const tuple<A0, A1, 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) {}
7696     typename tuple_type<A21>::const_reference get() const { return m_x; }
7697 private:
7698     typename tuple_type<A21>::const_reference m_x;
7699 };
7700 
7701 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7702 struct const_tuple_element<tuple<A0, A1, 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> {
7703     const_tuple_element(const tuple<A0, A1, 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) {}
7704     typename tuple_type<A22>::const_reference get() const { return m_x; }
7705 private:
7706     typename tuple_type<A22>::const_reference m_x;
7707 };
7708 
7709 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7710 struct const_tuple_element<tuple<A0, A1, 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> {
7711     const_tuple_element(const tuple<A0, A1, 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) {}
7712     typename tuple_type<A23>::const_reference get() const { return m_x; }
7713 private:
7714     typename tuple_type<A23>::const_reference m_x;
7715 };
7716 
7717 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7718 struct const_tuple_element<tuple<A0, A1, 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> {
7719     const_tuple_element(const tuple<A0, A1, 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) {}
7720     typename tuple_type<A24>::const_reference get() const { return m_x; }
7721 private:
7722     typename tuple_type<A24>::const_reference m_x;
7723 };
7724 
7725 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
7726 struct const_tuple_element<tuple<A0, A1, 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> {
7727     const_tuple_element(const tuple<A0, A1, 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) {}
7728     typename tuple_type<A25>::const_reference get() const { return m_x; }
7729 private:
7730     typename tuple_type<A25>::const_reference m_x;
7731 };
7732 
7733 
7734 
7735 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7736 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7737     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7738     typename tuple_type<A0>::const_reference get() const { return m_x; }
7739 private:
7740     typename tuple_type<A0>::const_reference m_x;
7741 };
7742 
7743 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7744 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7745     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7746     typename tuple_type<A1>::const_reference get() const { return m_x; }
7747 private:
7748     typename tuple_type<A1>::const_reference m_x;
7749 };
7750 
7751 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7752 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7753     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7754     typename tuple_type<A2>::const_reference get() const { return m_x; }
7755 private:
7756     typename tuple_type<A2>::const_reference m_x;
7757 };
7758 
7759 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7760 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7761     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7762     typename tuple_type<A3>::const_reference get() const { return m_x; }
7763 private:
7764     typename tuple_type<A3>::const_reference m_x;
7765 };
7766 
7767 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7768 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7769     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7770     typename tuple_type<A4>::const_reference get() const { return m_x; }
7771 private:
7772     typename tuple_type<A4>::const_reference m_x;
7773 };
7774 
7775 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7776 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7777     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7778     typename tuple_type<A5>::const_reference get() const { return m_x; }
7779 private:
7780     typename tuple_type<A5>::const_reference m_x;
7781 };
7782 
7783 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7784 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7785     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7786     typename tuple_type<A6>::const_reference get() const { return m_x; }
7787 private:
7788     typename tuple_type<A6>::const_reference m_x;
7789 };
7790 
7791 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7792 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7793     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7794     typename tuple_type<A7>::const_reference get() const { return m_x; }
7795 private:
7796     typename tuple_type<A7>::const_reference m_x;
7797 };
7798 
7799 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7800 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7801     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7802     typename tuple_type<A8>::const_reference get() const { return m_x; }
7803 private:
7804     typename tuple_type<A8>::const_reference m_x;
7805 };
7806 
7807 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7808 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7809     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7810     typename tuple_type<A9>::const_reference get() const { return m_x; }
7811 private:
7812     typename tuple_type<A9>::const_reference m_x;
7813 };
7814 
7815 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7816 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7817     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7818     typename tuple_type<A10>::const_reference get() const { return m_x; }
7819 private:
7820     typename tuple_type<A10>::const_reference m_x;
7821 };
7822 
7823 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7824 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7825     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7826     typename tuple_type<A11>::const_reference get() const { return m_x; }
7827 private:
7828     typename tuple_type<A11>::const_reference m_x;
7829 };
7830 
7831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7832 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7833     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7834     typename tuple_type<A12>::const_reference get() const { return m_x; }
7835 private:
7836     typename tuple_type<A12>::const_reference m_x;
7837 };
7838 
7839 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7840 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7841     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7842     typename tuple_type<A13>::const_reference get() const { return m_x; }
7843 private:
7844     typename tuple_type<A13>::const_reference m_x;
7845 };
7846 
7847 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7848 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7849     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7850     typename tuple_type<A14>::const_reference get() const { return m_x; }
7851 private:
7852     typename tuple_type<A14>::const_reference m_x;
7853 };
7854 
7855 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7856 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7857     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7858     typename tuple_type<A15>::const_reference get() const { return m_x; }
7859 private:
7860     typename tuple_type<A15>::const_reference m_x;
7861 };
7862 
7863 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7864 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7865     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7866     typename tuple_type<A16>::const_reference get() const { return m_x; }
7867 private:
7868     typename tuple_type<A16>::const_reference m_x;
7869 };
7870 
7871 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7872 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7873     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7874     typename tuple_type<A17>::const_reference get() const { return m_x; }
7875 private:
7876     typename tuple_type<A17>::const_reference m_x;
7877 };
7878 
7879 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7880 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7881     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7882     typename tuple_type<A18>::const_reference get() const { return m_x; }
7883 private:
7884     typename tuple_type<A18>::const_reference m_x;
7885 };
7886 
7887 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7888 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7889     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7890     typename tuple_type<A19>::const_reference get() const { return m_x; }
7891 private:
7892     typename tuple_type<A19>::const_reference m_x;
7893 };
7894 
7895 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7896 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7897     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7898     typename tuple_type<A20>::const_reference get() const { return m_x; }
7899 private:
7900     typename tuple_type<A20>::const_reference m_x;
7901 };
7902 
7903 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7904 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7905     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7906     typename tuple_type<A21>::const_reference get() const { return m_x; }
7907 private:
7908     typename tuple_type<A21>::const_reference m_x;
7909 };
7910 
7911 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7912 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7913     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7914     typename tuple_type<A22>::const_reference get() const { return m_x; }
7915 private:
7916     typename tuple_type<A22>::const_reference m_x;
7917 };
7918 
7919 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7920 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7921     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7922     typename tuple_type<A23>::const_reference get() const { return m_x; }
7923 private:
7924     typename tuple_type<A23>::const_reference m_x;
7925 };
7926 
7927 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7928 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7929     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7930     typename tuple_type<A24>::const_reference get() const { return m_x; }
7931 private:
7932     typename tuple_type<A24>::const_reference m_x;
7933 };
7934 
7935 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7936 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7937     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7938     typename tuple_type<A25>::const_reference get() const { return m_x; }
7939 private:
7940     typename tuple_type<A25>::const_reference m_x;
7941 };
7942 
7943 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
7944 struct const_tuple_element<tuple<A0, A1, A2, 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> {
7945     const_tuple_element(const tuple<A0, A1, A2, 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) {}
7946     typename tuple_type<A26>::const_reference get() const { return m_x; }
7947 private:
7948     typename tuple_type<A26>::const_reference m_x;
7949 };
7950 
7951 
7952 
7953 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7954 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
7955     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
7956     typename tuple_type<A0>::const_reference get() const { return m_x; }
7957 private:
7958     typename tuple_type<A0>::const_reference m_x;
7959 };
7960 
7961 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7962 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
7963     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
7964     typename tuple_type<A1>::const_reference get() const { return m_x; }
7965 private:
7966     typename tuple_type<A1>::const_reference m_x;
7967 };
7968 
7969 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7970 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
7971     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
7972     typename tuple_type<A2>::const_reference get() const { return m_x; }
7973 private:
7974     typename tuple_type<A2>::const_reference m_x;
7975 };
7976 
7977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7978 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
7979     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
7980     typename tuple_type<A3>::const_reference get() const { return m_x; }
7981 private:
7982     typename tuple_type<A3>::const_reference m_x;
7983 };
7984 
7985 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7986 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
7987     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
7988     typename tuple_type<A4>::const_reference get() const { return m_x; }
7989 private:
7990     typename tuple_type<A4>::const_reference m_x;
7991 };
7992 
7993 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
7994 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
7995     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
7996     typename tuple_type<A5>::const_reference get() const { return m_x; }
7997 private:
7998     typename tuple_type<A5>::const_reference m_x;
7999 };
8000 
8001 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8002 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8003     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8004     typename tuple_type<A6>::const_reference get() const { return m_x; }
8005 private:
8006     typename tuple_type<A6>::const_reference m_x;
8007 };
8008 
8009 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8010 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8011     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8012     typename tuple_type<A7>::const_reference get() const { return m_x; }
8013 private:
8014     typename tuple_type<A7>::const_reference m_x;
8015 };
8016 
8017 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8018 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8019     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8020     typename tuple_type<A8>::const_reference get() const { return m_x; }
8021 private:
8022     typename tuple_type<A8>::const_reference m_x;
8023 };
8024 
8025 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8026 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8027     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8028     typename tuple_type<A9>::const_reference get() const { return m_x; }
8029 private:
8030     typename tuple_type<A9>::const_reference m_x;
8031 };
8032 
8033 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8034 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8035     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8036     typename tuple_type<A10>::const_reference get() const { return m_x; }
8037 private:
8038     typename tuple_type<A10>::const_reference m_x;
8039 };
8040 
8041 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8042 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8043     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8044     typename tuple_type<A11>::const_reference get() const { return m_x; }
8045 private:
8046     typename tuple_type<A11>::const_reference m_x;
8047 };
8048 
8049 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8050 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8051     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8052     typename tuple_type<A12>::const_reference get() const { return m_x; }
8053 private:
8054     typename tuple_type<A12>::const_reference m_x;
8055 };
8056 
8057 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8058 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8059     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8060     typename tuple_type<A13>::const_reference get() const { return m_x; }
8061 private:
8062     typename tuple_type<A13>::const_reference m_x;
8063 };
8064 
8065 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8066 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8067     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8068     typename tuple_type<A14>::const_reference get() const { return m_x; }
8069 private:
8070     typename tuple_type<A14>::const_reference m_x;
8071 };
8072 
8073 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8074 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8075     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8076     typename tuple_type<A15>::const_reference get() const { return m_x; }
8077 private:
8078     typename tuple_type<A15>::const_reference m_x;
8079 };
8080 
8081 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8082 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8083     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8084     typename tuple_type<A16>::const_reference get() const { return m_x; }
8085 private:
8086     typename tuple_type<A16>::const_reference m_x;
8087 };
8088 
8089 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8090 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8091     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8092     typename tuple_type<A17>::const_reference get() const { return m_x; }
8093 private:
8094     typename tuple_type<A17>::const_reference m_x;
8095 };
8096 
8097 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8098 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8099     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8100     typename tuple_type<A18>::const_reference get() const { return m_x; }
8101 private:
8102     typename tuple_type<A18>::const_reference m_x;
8103 };
8104 
8105 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8106 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8107     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8108     typename tuple_type<A19>::const_reference get() const { return m_x; }
8109 private:
8110     typename tuple_type<A19>::const_reference m_x;
8111 };
8112 
8113 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8114 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8115     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8116     typename tuple_type<A20>::const_reference get() const { return m_x; }
8117 private:
8118     typename tuple_type<A20>::const_reference m_x;
8119 };
8120 
8121 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8122 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8123     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8124     typename tuple_type<A21>::const_reference get() const { return m_x; }
8125 private:
8126     typename tuple_type<A21>::const_reference m_x;
8127 };
8128 
8129 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8130 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8131     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8132     typename tuple_type<A22>::const_reference get() const { return m_x; }
8133 private:
8134     typename tuple_type<A22>::const_reference m_x;
8135 };
8136 
8137 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8138 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8139     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8140     typename tuple_type<A23>::const_reference get() const { return m_x; }
8141 private:
8142     typename tuple_type<A23>::const_reference m_x;
8143 };
8144 
8145 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8146 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8147     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8148     typename tuple_type<A24>::const_reference get() const { return m_x; }
8149 private:
8150     typename tuple_type<A24>::const_reference m_x;
8151 };
8152 
8153 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8154 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8155     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8156     typename tuple_type<A25>::const_reference get() const { return m_x; }
8157 private:
8158     typename tuple_type<A25>::const_reference m_x;
8159 };
8160 
8161 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8162 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8163     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8164     typename tuple_type<A26>::const_reference get() const { return m_x; }
8165 private:
8166     typename tuple_type<A26>::const_reference m_x;
8167 };
8168 
8169 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
8170 struct const_tuple_element<tuple<A0, A1, A2, A3, 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> {
8171     const_tuple_element(const tuple<A0, A1, A2, A3, 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) {}
8172     typename tuple_type<A27>::const_reference get() const { return m_x; }
8173 private:
8174     typename tuple_type<A27>::const_reference m_x;
8175 };
8176 
8177 
8178 
8179 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8180 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8181     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8182     typename tuple_type<A0>::const_reference get() const { return m_x; }
8183 private:
8184     typename tuple_type<A0>::const_reference m_x;
8185 };
8186 
8187 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8188 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8189     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8190     typename tuple_type<A1>::const_reference get() const { return m_x; }
8191 private:
8192     typename tuple_type<A1>::const_reference m_x;
8193 };
8194 
8195 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8196 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8197     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8198     typename tuple_type<A2>::const_reference get() const { return m_x; }
8199 private:
8200     typename tuple_type<A2>::const_reference m_x;
8201 };
8202 
8203 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8204 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8205     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8206     typename tuple_type<A3>::const_reference get() const { return m_x; }
8207 private:
8208     typename tuple_type<A3>::const_reference m_x;
8209 };
8210 
8211 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8212 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8213     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8214     typename tuple_type<A4>::const_reference get() const { return m_x; }
8215 private:
8216     typename tuple_type<A4>::const_reference m_x;
8217 };
8218 
8219 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8220 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8221     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8222     typename tuple_type<A5>::const_reference get() const { return m_x; }
8223 private:
8224     typename tuple_type<A5>::const_reference m_x;
8225 };
8226 
8227 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8228 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8229     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8230     typename tuple_type<A6>::const_reference get() const { return m_x; }
8231 private:
8232     typename tuple_type<A6>::const_reference m_x;
8233 };
8234 
8235 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8236 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8237     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8238     typename tuple_type<A7>::const_reference get() const { return m_x; }
8239 private:
8240     typename tuple_type<A7>::const_reference m_x;
8241 };
8242 
8243 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8244 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8245     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8246     typename tuple_type<A8>::const_reference get() const { return m_x; }
8247 private:
8248     typename tuple_type<A8>::const_reference m_x;
8249 };
8250 
8251 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8252 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8253     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8254     typename tuple_type<A9>::const_reference get() const { return m_x; }
8255 private:
8256     typename tuple_type<A9>::const_reference m_x;
8257 };
8258 
8259 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8260 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8261     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8262     typename tuple_type<A10>::const_reference get() const { return m_x; }
8263 private:
8264     typename tuple_type<A10>::const_reference m_x;
8265 };
8266 
8267 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8268 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8269     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8270     typename tuple_type<A11>::const_reference get() const { return m_x; }
8271 private:
8272     typename tuple_type<A11>::const_reference m_x;
8273 };
8274 
8275 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8276 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8277     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8278     typename tuple_type<A12>::const_reference get() const { return m_x; }
8279 private:
8280     typename tuple_type<A12>::const_reference m_x;
8281 };
8282 
8283 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8284 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8285     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8286     typename tuple_type<A13>::const_reference get() const { return m_x; }
8287 private:
8288     typename tuple_type<A13>::const_reference m_x;
8289 };
8290 
8291 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8292 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8293     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8294     typename tuple_type<A14>::const_reference get() const { return m_x; }
8295 private:
8296     typename tuple_type<A14>::const_reference m_x;
8297 };
8298 
8299 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8300 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8301     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8302     typename tuple_type<A15>::const_reference get() const { return m_x; }
8303 private:
8304     typename tuple_type<A15>::const_reference m_x;
8305 };
8306 
8307 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8308 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8309     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8310     typename tuple_type<A16>::const_reference get() const { return m_x; }
8311 private:
8312     typename tuple_type<A16>::const_reference m_x;
8313 };
8314 
8315 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8316 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8317     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8318     typename tuple_type<A17>::const_reference get() const { return m_x; }
8319 private:
8320     typename tuple_type<A17>::const_reference m_x;
8321 };
8322 
8323 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8324 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8325     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8326     typename tuple_type<A18>::const_reference get() const { return m_x; }
8327 private:
8328     typename tuple_type<A18>::const_reference m_x;
8329 };
8330 
8331 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8332 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8333     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8334     typename tuple_type<A19>::const_reference get() const { return m_x; }
8335 private:
8336     typename tuple_type<A19>::const_reference m_x;
8337 };
8338 
8339 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8340 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8341     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8342     typename tuple_type<A20>::const_reference get() const { return m_x; }
8343 private:
8344     typename tuple_type<A20>::const_reference m_x;
8345 };
8346 
8347 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8348 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8349     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8350     typename tuple_type<A21>::const_reference get() const { return m_x; }
8351 private:
8352     typename tuple_type<A21>::const_reference m_x;
8353 };
8354 
8355 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8356 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8357     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8358     typename tuple_type<A22>::const_reference get() const { return m_x; }
8359 private:
8360     typename tuple_type<A22>::const_reference m_x;
8361 };
8362 
8363 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8364 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8365     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8366     typename tuple_type<A23>::const_reference get() const { return m_x; }
8367 private:
8368     typename tuple_type<A23>::const_reference m_x;
8369 };
8370 
8371 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8372 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8373     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8374     typename tuple_type<A24>::const_reference get() const { return m_x; }
8375 private:
8376     typename tuple_type<A24>::const_reference m_x;
8377 };
8378 
8379 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8380 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8381     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8382     typename tuple_type<A25>::const_reference get() const { return m_x; }
8383 private:
8384     typename tuple_type<A25>::const_reference m_x;
8385 };
8386 
8387 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8388 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8389     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8390     typename tuple_type<A26>::const_reference get() const { return m_x; }
8391 private:
8392     typename tuple_type<A26>::const_reference m_x;
8393 };
8394 
8395 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8396 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8397     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8398     typename tuple_type<A27>::const_reference get() const { return m_x; }
8399 private:
8400     typename tuple_type<A27>::const_reference m_x;
8401 };
8402 
8403 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
8404 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, 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> {
8405     const_tuple_element(const tuple<A0, A1, A2, A3, A4, 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) {}
8406     typename tuple_type<A28>::const_reference get() const { return m_x; }
8407 private:
8408     typename tuple_type<A28>::const_reference m_x;
8409 };
8410 
8411 
8412 
8413 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8414 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8415     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8416     typename tuple_type<A0>::const_reference get() const { return m_x; }
8417 private:
8418     typename tuple_type<A0>::const_reference m_x;
8419 };
8420 
8421 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8422 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8423     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8424     typename tuple_type<A1>::const_reference get() const { return m_x; }
8425 private:
8426     typename tuple_type<A1>::const_reference m_x;
8427 };
8428 
8429 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8430 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8431     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8432     typename tuple_type<A2>::const_reference get() const { return m_x; }
8433 private:
8434     typename tuple_type<A2>::const_reference m_x;
8435 };
8436 
8437 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8438 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8439     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8440     typename tuple_type<A3>::const_reference get() const { return m_x; }
8441 private:
8442     typename tuple_type<A3>::const_reference m_x;
8443 };
8444 
8445 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8446 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8447     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8448     typename tuple_type<A4>::const_reference get() const { return m_x; }
8449 private:
8450     typename tuple_type<A4>::const_reference m_x;
8451 };
8452 
8453 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8454 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8455     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8456     typename tuple_type<A5>::const_reference get() const { return m_x; }
8457 private:
8458     typename tuple_type<A5>::const_reference m_x;
8459 };
8460 
8461 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8462 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8463     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8464     typename tuple_type<A6>::const_reference get() const { return m_x; }
8465 private:
8466     typename tuple_type<A6>::const_reference m_x;
8467 };
8468 
8469 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8470 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8471     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8472     typename tuple_type<A7>::const_reference get() const { return m_x; }
8473 private:
8474     typename tuple_type<A7>::const_reference m_x;
8475 };
8476 
8477 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8478 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8479     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8480     typename tuple_type<A8>::const_reference get() const { return m_x; }
8481 private:
8482     typename tuple_type<A8>::const_reference m_x;
8483 };
8484 
8485 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8486 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8487     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8488     typename tuple_type<A9>::const_reference get() const { return m_x; }
8489 private:
8490     typename tuple_type<A9>::const_reference m_x;
8491 };
8492 
8493 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8494 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8495     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8496     typename tuple_type<A10>::const_reference get() const { return m_x; }
8497 private:
8498     typename tuple_type<A10>::const_reference m_x;
8499 };
8500 
8501 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8502 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8503     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8504     typename tuple_type<A11>::const_reference get() const { return m_x; }
8505 private:
8506     typename tuple_type<A11>::const_reference m_x;
8507 };
8508 
8509 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8510 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8511     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8512     typename tuple_type<A12>::const_reference get() const { return m_x; }
8513 private:
8514     typename tuple_type<A12>::const_reference m_x;
8515 };
8516 
8517 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8518 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8519     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8520     typename tuple_type<A13>::const_reference get() const { return m_x; }
8521 private:
8522     typename tuple_type<A13>::const_reference m_x;
8523 };
8524 
8525 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8526 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8527     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8528     typename tuple_type<A14>::const_reference get() const { return m_x; }
8529 private:
8530     typename tuple_type<A14>::const_reference m_x;
8531 };
8532 
8533 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8534 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8535     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8536     typename tuple_type<A15>::const_reference get() const { return m_x; }
8537 private:
8538     typename tuple_type<A15>::const_reference m_x;
8539 };
8540 
8541 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8542 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8543     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8544     typename tuple_type<A16>::const_reference get() const { return m_x; }
8545 private:
8546     typename tuple_type<A16>::const_reference m_x;
8547 };
8548 
8549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8550 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8551     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8552     typename tuple_type<A17>::const_reference get() const { return m_x; }
8553 private:
8554     typename tuple_type<A17>::const_reference m_x;
8555 };
8556 
8557 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8558 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8559     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8560     typename tuple_type<A18>::const_reference get() const { return m_x; }
8561 private:
8562     typename tuple_type<A18>::const_reference m_x;
8563 };
8564 
8565 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8566 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8567     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8568     typename tuple_type<A19>::const_reference get() const { return m_x; }
8569 private:
8570     typename tuple_type<A19>::const_reference m_x;
8571 };
8572 
8573 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8574 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8575     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8576     typename tuple_type<A20>::const_reference get() const { return m_x; }
8577 private:
8578     typename tuple_type<A20>::const_reference m_x;
8579 };
8580 
8581 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8582 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8583     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8584     typename tuple_type<A21>::const_reference get() const { return m_x; }
8585 private:
8586     typename tuple_type<A21>::const_reference m_x;
8587 };
8588 
8589 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8590 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8591     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8592     typename tuple_type<A22>::const_reference get() const { return m_x; }
8593 private:
8594     typename tuple_type<A22>::const_reference m_x;
8595 };
8596 
8597 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8598 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8599     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8600     typename tuple_type<A23>::const_reference get() const { return m_x; }
8601 private:
8602     typename tuple_type<A23>::const_reference m_x;
8603 };
8604 
8605 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8606 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8607     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8608     typename tuple_type<A24>::const_reference get() const { return m_x; }
8609 private:
8610     typename tuple_type<A24>::const_reference m_x;
8611 };
8612 
8613 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8614 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8615     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8616     typename tuple_type<A25>::const_reference get() const { return m_x; }
8617 private:
8618     typename tuple_type<A25>::const_reference m_x;
8619 };
8620 
8621 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8622 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8623     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8624     typename tuple_type<A26>::const_reference get() const { return m_x; }
8625 private:
8626     typename tuple_type<A26>::const_reference m_x;
8627 };
8628 
8629 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8630 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8631     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8632     typename tuple_type<A27>::const_reference get() const { return m_x; }
8633 private:
8634     typename tuple_type<A27>::const_reference m_x;
8635 };
8636 
8637 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8638 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8639     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8640     typename tuple_type<A28>::const_reference get() const { return m_x; }
8641 private:
8642     typename tuple_type<A28>::const_reference m_x;
8643 };
8644 
8645 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8646 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, 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> {
8647     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, 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) {}
8648     typename tuple_type<A29>::const_reference get() const { return m_x; }
8649 private:
8650     typename tuple_type<A29>::const_reference m_x;
8651 };
8652 
8653 
8654 
8655 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8656 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8657     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8658     typename tuple_type<A0>::const_reference get() const { return m_x; }
8659 private:
8660     typename tuple_type<A0>::const_reference m_x;
8661 };
8662 
8663 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8664 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8665     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8666     typename tuple_type<A1>::const_reference get() const { return m_x; }
8667 private:
8668     typename tuple_type<A1>::const_reference m_x;
8669 };
8670 
8671 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8672 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8673     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8674     typename tuple_type<A2>::const_reference get() const { return m_x; }
8675 private:
8676     typename tuple_type<A2>::const_reference m_x;
8677 };
8678 
8679 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8680 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8681     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8682     typename tuple_type<A3>::const_reference get() const { return m_x; }
8683 private:
8684     typename tuple_type<A3>::const_reference m_x;
8685 };
8686 
8687 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8688 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8689     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8690     typename tuple_type<A4>::const_reference get() const { return m_x; }
8691 private:
8692     typename tuple_type<A4>::const_reference m_x;
8693 };
8694 
8695 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8696 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8697     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8698     typename tuple_type<A5>::const_reference get() const { return m_x; }
8699 private:
8700     typename tuple_type<A5>::const_reference m_x;
8701 };
8702 
8703 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8704 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8705     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8706     typename tuple_type<A6>::const_reference get() const { return m_x; }
8707 private:
8708     typename tuple_type<A6>::const_reference m_x;
8709 };
8710 
8711 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8712 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8713     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8714     typename tuple_type<A7>::const_reference get() const { return m_x; }
8715 private:
8716     typename tuple_type<A7>::const_reference m_x;
8717 };
8718 
8719 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8720 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8721     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8722     typename tuple_type<A8>::const_reference get() const { return m_x; }
8723 private:
8724     typename tuple_type<A8>::const_reference m_x;
8725 };
8726 
8727 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8728 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8729     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8730     typename tuple_type<A9>::const_reference get() const { return m_x; }
8731 private:
8732     typename tuple_type<A9>::const_reference m_x;
8733 };
8734 
8735 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8736 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8737     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8738     typename tuple_type<A10>::const_reference get() const { return m_x; }
8739 private:
8740     typename tuple_type<A10>::const_reference m_x;
8741 };
8742 
8743 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8744 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8745     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8746     typename tuple_type<A11>::const_reference get() const { return m_x; }
8747 private:
8748     typename tuple_type<A11>::const_reference m_x;
8749 };
8750 
8751 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8752 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8753     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8754     typename tuple_type<A12>::const_reference get() const { return m_x; }
8755 private:
8756     typename tuple_type<A12>::const_reference m_x;
8757 };
8758 
8759 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8760 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8761     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8762     typename tuple_type<A13>::const_reference get() const { return m_x; }
8763 private:
8764     typename tuple_type<A13>::const_reference m_x;
8765 };
8766 
8767 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8768 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8769     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8770     typename tuple_type<A14>::const_reference get() const { return m_x; }
8771 private:
8772     typename tuple_type<A14>::const_reference m_x;
8773 };
8774 
8775 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8776 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8777     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8778     typename tuple_type<A15>::const_reference get() const { return m_x; }
8779 private:
8780     typename tuple_type<A15>::const_reference m_x;
8781 };
8782 
8783 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8784 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8785     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8786     typename tuple_type<A16>::const_reference get() const { return m_x; }
8787 private:
8788     typename tuple_type<A16>::const_reference m_x;
8789 };
8790 
8791 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8792 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8793     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8794     typename tuple_type<A17>::const_reference get() const { return m_x; }
8795 private:
8796     typename tuple_type<A17>::const_reference m_x;
8797 };
8798 
8799 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8800 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8801     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8802     typename tuple_type<A18>::const_reference get() const { return m_x; }
8803 private:
8804     typename tuple_type<A18>::const_reference m_x;
8805 };
8806 
8807 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8808 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8809     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8810     typename tuple_type<A19>::const_reference get() const { return m_x; }
8811 private:
8812     typename tuple_type<A19>::const_reference m_x;
8813 };
8814 
8815 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8816 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8817     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8818     typename tuple_type<A20>::const_reference get() const { return m_x; }
8819 private:
8820     typename tuple_type<A20>::const_reference m_x;
8821 };
8822 
8823 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8824 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8825     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8826     typename tuple_type<A21>::const_reference get() const { return m_x; }
8827 private:
8828     typename tuple_type<A21>::const_reference m_x;
8829 };
8830 
8831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8832 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8833     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8834     typename tuple_type<A22>::const_reference get() const { return m_x; }
8835 private:
8836     typename tuple_type<A22>::const_reference m_x;
8837 };
8838 
8839 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8840 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8841     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8842     typename tuple_type<A23>::const_reference get() const { return m_x; }
8843 private:
8844     typename tuple_type<A23>::const_reference m_x;
8845 };
8846 
8847 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8848 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8849     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8850     typename tuple_type<A24>::const_reference get() const { return m_x; }
8851 private:
8852     typename tuple_type<A24>::const_reference m_x;
8853 };
8854 
8855 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8856 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8857     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8858     typename tuple_type<A25>::const_reference get() const { return m_x; }
8859 private:
8860     typename tuple_type<A25>::const_reference m_x;
8861 };
8862 
8863 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8864 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8865     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8866     typename tuple_type<A26>::const_reference get() const { return m_x; }
8867 private:
8868     typename tuple_type<A26>::const_reference m_x;
8869 };
8870 
8871 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8872 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8873     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8874     typename tuple_type<A27>::const_reference get() const { return m_x; }
8875 private:
8876     typename tuple_type<A27>::const_reference m_x;
8877 };
8878 
8879 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8880 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8881     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8882     typename tuple_type<A28>::const_reference get() const { return m_x; }
8883 private:
8884     typename tuple_type<A28>::const_reference m_x;
8885 };
8886 
8887 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8888 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8889     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8890     typename tuple_type<A29>::const_reference get() const { return m_x; }
8891 private:
8892     typename tuple_type<A29>::const_reference m_x;
8893 };
8894 
8895 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8896 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8897     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8898     typename tuple_type<A30>::const_reference get() const { return m_x; }
8899 private:
8900     typename tuple_type<A30>::const_reference m_x;
8901 };
8902 
8903 
8904 
8905 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8906 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8907     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8908     typename tuple_type<A0>::const_reference get() const { return m_x; }
8909 private:
8910     typename tuple_type<A0>::const_reference m_x;
8911 };
8912 
8913 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8914 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8915     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8916     typename tuple_type<A1>::const_reference get() const { return m_x; }
8917 private:
8918     typename tuple_type<A1>::const_reference m_x;
8919 };
8920 
8921 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8922 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8923     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8924     typename tuple_type<A2>::const_reference get() const { return m_x; }
8925 private:
8926     typename tuple_type<A2>::const_reference m_x;
8927 };
8928 
8929 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8930 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8931     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8932     typename tuple_type<A3>::const_reference get() const { return m_x; }
8933 private:
8934     typename tuple_type<A3>::const_reference m_x;
8935 };
8936 
8937 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8938 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8939     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8940     typename tuple_type<A4>::const_reference get() const { return m_x; }
8941 private:
8942     typename tuple_type<A4>::const_reference m_x;
8943 };
8944 
8945 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8946 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8947     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8948     typename tuple_type<A5>::const_reference get() const { return m_x; }
8949 private:
8950     typename tuple_type<A5>::const_reference m_x;
8951 };
8952 
8953 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8954 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8955     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8956     typename tuple_type<A6>::const_reference get() const { return m_x; }
8957 private:
8958     typename tuple_type<A6>::const_reference m_x;
8959 };
8960 
8961 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8962 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8963     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8964     typename tuple_type<A7>::const_reference get() const { return m_x; }
8965 private:
8966     typename tuple_type<A7>::const_reference m_x;
8967 };
8968 
8969 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8970 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8971     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8972     typename tuple_type<A8>::const_reference get() const { return m_x; }
8973 private:
8974     typename tuple_type<A8>::const_reference m_x;
8975 };
8976 
8977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8978 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8979     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8980     typename tuple_type<A9>::const_reference get() const { return m_x; }
8981 private:
8982     typename tuple_type<A9>::const_reference m_x;
8983 };
8984 
8985 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8986 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8987     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8988     typename tuple_type<A10>::const_reference get() const { return m_x; }
8989 private:
8990     typename tuple_type<A10>::const_reference m_x;
8991 };
8992 
8993 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
8994 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
8995     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
8996     typename tuple_type<A11>::const_reference get() const { return m_x; }
8997 private:
8998     typename tuple_type<A11>::const_reference m_x;
8999 };
9000 
9001 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9002 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9003     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9004     typename tuple_type<A12>::const_reference get() const { return m_x; }
9005 private:
9006     typename tuple_type<A12>::const_reference m_x;
9007 };
9008 
9009 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9010 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9011     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9012     typename tuple_type<A13>::const_reference get() const { return m_x; }
9013 private:
9014     typename tuple_type<A13>::const_reference m_x;
9015 };
9016 
9017 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9018 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9019     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9020     typename tuple_type<A14>::const_reference get() const { return m_x; }
9021 private:
9022     typename tuple_type<A14>::const_reference m_x;
9023 };
9024 
9025 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9026 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9027     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9028     typename tuple_type<A15>::const_reference get() const { return m_x; }
9029 private:
9030     typename tuple_type<A15>::const_reference m_x;
9031 };
9032 
9033 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9034 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9035     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9036     typename tuple_type<A16>::const_reference get() const { return m_x; }
9037 private:
9038     typename tuple_type<A16>::const_reference m_x;
9039 };
9040 
9041 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9042 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9043     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9044     typename tuple_type<A17>::const_reference get() const { return m_x; }
9045 private:
9046     typename tuple_type<A17>::const_reference m_x;
9047 };
9048 
9049 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9050 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9051     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9052     typename tuple_type<A18>::const_reference get() const { return m_x; }
9053 private:
9054     typename tuple_type<A18>::const_reference m_x;
9055 };
9056 
9057 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9058 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9059     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9060     typename tuple_type<A19>::const_reference get() const { return m_x; }
9061 private:
9062     typename tuple_type<A19>::const_reference m_x;
9063 };
9064 
9065 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9066 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9067     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9068     typename tuple_type<A20>::const_reference get() const { return m_x; }
9069 private:
9070     typename tuple_type<A20>::const_reference m_x;
9071 };
9072 
9073 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9074 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9075     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9076     typename tuple_type<A21>::const_reference get() const { return m_x; }
9077 private:
9078     typename tuple_type<A21>::const_reference m_x;
9079 };
9080 
9081 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9082 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9083     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9084     typename tuple_type<A22>::const_reference get() const { return m_x; }
9085 private:
9086     typename tuple_type<A22>::const_reference m_x;
9087 };
9088 
9089 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9090 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9091     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9092     typename tuple_type<A23>::const_reference get() const { return m_x; }
9093 private:
9094     typename tuple_type<A23>::const_reference m_x;
9095 };
9096 
9097 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9098 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9099     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9100     typename tuple_type<A24>::const_reference get() const { return m_x; }
9101 private:
9102     typename tuple_type<A24>::const_reference m_x;
9103 };
9104 
9105 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9106 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9107     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9108     typename tuple_type<A25>::const_reference get() const { return m_x; }
9109 private:
9110     typename tuple_type<A25>::const_reference m_x;
9111 };
9112 
9113 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9114 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9115     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9116     typename tuple_type<A26>::const_reference get() const { return m_x; }
9117 private:
9118     typename tuple_type<A26>::const_reference m_x;
9119 };
9120 
9121 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9122 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9123     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9124     typename tuple_type<A27>::const_reference get() const { return m_x; }
9125 private:
9126     typename tuple_type<A27>::const_reference m_x;
9127 };
9128 
9129 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9130 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9131     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9132     typename tuple_type<A28>::const_reference get() const { return m_x; }
9133 private:
9134     typename tuple_type<A28>::const_reference m_x;
9135 };
9136 
9137 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9138 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9139     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9140     typename tuple_type<A29>::const_reference get() const { return m_x; }
9141 private:
9142     typename tuple_type<A29>::const_reference m_x;
9143 };
9144 
9145 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9146 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9147     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9148     typename tuple_type<A30>::const_reference get() const { return m_x; }
9149 private:
9150     typename tuple_type<A30>::const_reference m_x;
9151 };
9152 
9153 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
9154 struct const_tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, 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> {
9155     const_tuple_element(const tuple<A0, A1, A2, A3, A4, A5, A6, 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) {}
9156     typename tuple_type<A31>::const_reference get() const { return m_x; }
9157 private:
9158     typename tuple_type<A31>::const_reference m_x;
9159 };
9160 
9161 
9162 /// @endcond
9163 
9164 template <>
9165 struct tuple<> {
9166     tuple() {}
9167     tuple(msgpack::object const& o) { o.convert(*this); }
9168     typedef tuple<> value_type;
9169     std::size_t size() const { return 0; }
9170 };
9171 
9172 /// @cond
9173 
9174 template <typename A0>
9175 struct tuple<A0> {
9176     typedef tuple<A0> value_type;
9177     std::size_t size() const { return 1; }
9178     tuple() {}
9179     tuple(typename tuple_type<A0>::transparent_reference _a0) :
9180         a0(_a0) {}
9181     tuple(msgpack::object const& o) { o.convert(*this); }
9182     template <int N> typename tuple_element<value_type, N>::reference get()
9183         { return tuple_element<value_type, N>(*this).get(); }
9184     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9185         { return const_tuple_element<value_type, N>(*this).get(); }
9186 
9187     A0 a0;
9188 };
9189 
9190 template <int N, typename A0>
9191 inline typename type::tuple_element<type::tuple<A0>, N>::reference get(type::tuple<A0>& t)
9192 { return t.template get<N>(); }
9193 template <int N, typename A0>
9194 inline typename type::const_tuple_element<type::tuple<A0>, N>::const_reference get(type::tuple<A0> const& t)
9195 { return t.template get<N>(); }
9196 
9197 template <typename A0, typename A1>
9198 struct tuple<A0, A1> {
9199     typedef tuple<A0, A1> value_type;
9200     std::size_t size() const { return 2; }
9201     tuple() {}
9202     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1) :
9203         a0(_a0), a1(_a1) {}
9204     tuple(msgpack::object const& o) { o.convert(*this); }
9205     template <int N> typename tuple_element<value_type, N>::reference get()
9206         { return tuple_element<value_type, N>(*this).get(); }
9207     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9208         { return const_tuple_element<value_type, N>(*this).get(); }
9209 
9210     A0 a0;
9211     A1 a1;
9212 };
9213 
9214 template <int N, typename A0, typename A1>
9215 inline typename type::tuple_element<type::tuple<A0, A1>, N>::reference get(type::tuple<A0, A1>& t)
9216 { return t.template get<N>(); }
9217 template <int N, typename A0, typename A1>
9218 inline typename type::const_tuple_element<type::tuple<A0, A1>, N>::const_reference get(type::tuple<A0, A1> const& t)
9219 { return t.template get<N>(); }
9220 
9221 template <typename A0, typename A1, typename A2>
9222 struct tuple<A0, A1, A2> {
9223     typedef tuple<A0, A1, A2> value_type;
9224     std::size_t size() const { return 3; }
9225     tuple() {}
9226     tuple(typename tuple_type<A0>::transparent_reference _a0, typename tuple_type<A1>::transparent_reference _a1, typename tuple_type<A2>::transparent_reference _a2) :
9227         a0(_a0), a1(_a1), a2(_a2) {}
9228     tuple(msgpack::object const& o) { o.convert(*this); }
9229     template <int N> typename tuple_element<value_type, N>::reference get()
9230         { return tuple_element<value_type, N>(*this).get(); }
9231     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9232         { return const_tuple_element<value_type, N>(*this).get(); }
9233 
9234     A0 a0;
9235     A1 a1;
9236     A2 a2;
9237 };
9238 
9239 template <int N, typename A0, typename A1, typename A2>
9240 inline typename type::tuple_element<type::tuple<A0, A1, A2>, N>::reference get(type::tuple<A0, A1, A2>& t)
9241 { return t.template get<N>(); }
9242 template <int N, typename A0, typename A1, typename A2>
9243 inline typename type::const_tuple_element<type::tuple<A0, A1, A2>, N>::const_reference get(type::tuple<A0, A1, A2> const& t)
9244 { return t.template get<N>(); }
9245 
9246 template <typename A0, typename A1, typename A2, typename A3>
9247 struct tuple<A0, A1, A2, A3> {
9248     typedef tuple<A0, A1, A2, A3> value_type;
9249     std::size_t size() const { return 4; }
9250     tuple() {}
9251     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) :
9252         a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
9253     tuple(msgpack::object const& o) { o.convert(*this); }
9254     template <int N> typename tuple_element<value_type, N>::reference get()
9255         { return tuple_element<value_type, N>(*this).get(); }
9256     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9257         { return const_tuple_element<value_type, N>(*this).get(); }
9258 
9259     A0 a0;
9260     A1 a1;
9261     A2 a2;
9262     A3 a3;
9263 };
9264 
9265 template <int N, typename A0, typename A1, typename A2, typename A3>
9266 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3>, N>::reference get(type::tuple<A0, A1, A2, A3>& t)
9267 { return t.template get<N>(); }
9268 template <int N, typename A0, typename A1, typename A2, typename A3>
9269 inline typename type::const_tuple_element<type::tuple<A0, A1, A2, A3>, N>::const_reference get(type::tuple<A0, A1, A2, A3> const& t)
9270 { return t.template get<N>(); }
9271 
9272 template <typename A0, typename A1, typename A2, typename A3, typename A4>
9273 struct tuple<A0, A1, A2, A3, A4> {
9274     typedef tuple<A0, A1, A2, A3, A4> value_type;
9275     std::size_t size() const { return 5; }
9276     tuple() {}
9277     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) :
9278         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
9279     tuple(msgpack::object const& o) { o.convert(*this); }
9280     template <int N> typename tuple_element<value_type, N>::reference get()
9281         { return tuple_element<value_type, N>(*this).get(); }
9282     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9283         { return const_tuple_element<value_type, N>(*this).get(); }
9284 
9285     A0 a0;
9286     A1 a1;
9287     A2 a2;
9288     A3 a3;
9289     A4 a4;
9290 };
9291 
9292 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4>
9293 inline typename type::tuple_element<type::tuple<A0, A1, A2, A3, A4>, N>::reference get(type::tuple<A0, A1, A2, A3, A4>& t)
9294 { return t.template get<N>(); }
9295 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4>
9296 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)
9297 { return t.template get<N>(); }
9298 
9299 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
9300 struct tuple<A0, A1, A2, A3, A4, A5> {
9301     typedef tuple<A0, A1, A2, A3, A4, A5> value_type;
9302     std::size_t size() const { return 6; }
9303     tuple() {}
9304     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) :
9305         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
9306     tuple(msgpack::object const& o) { o.convert(*this); }
9307     template <int N> typename tuple_element<value_type, N>::reference get()
9308         { return tuple_element<value_type, N>(*this).get(); }
9309     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9310         { return const_tuple_element<value_type, N>(*this).get(); }
9311 
9312     A0 a0;
9313     A1 a1;
9314     A2 a2;
9315     A3 a3;
9316     A4 a4;
9317     A5 a5;
9318 };
9319 
9320 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
9321 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)
9322 { return t.template get<N>(); }
9323 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
9324 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)
9325 { return t.template get<N>(); }
9326 
9327 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
9328 struct tuple<A0, A1, A2, A3, A4, A5, A6> {
9329     typedef tuple<A0, A1, A2, A3, A4, A5, A6> value_type;
9330     std::size_t size() const { return 7; }
9331     tuple() {}
9332     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) :
9333         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
9334     tuple(msgpack::object const& o) { o.convert(*this); }
9335     template <int N> typename tuple_element<value_type, N>::reference get()
9336         { return tuple_element<value_type, N>(*this).get(); }
9337     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9338         { return const_tuple_element<value_type, N>(*this).get(); }
9339 
9340     A0 a0;
9341     A1 a1;
9342     A2 a2;
9343     A3 a3;
9344     A4 a4;
9345     A5 a5;
9346     A6 a6;
9347 };
9348 
9349 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
9350 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)
9351 { return t.template get<N>(); }
9352 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
9353 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)
9354 { return t.template get<N>(); }
9355 
9356 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
9357 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7> {
9358     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
9359     std::size_t size() const { return 8; }
9360     tuple() {}
9361     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) :
9362         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
9363     tuple(msgpack::object const& o) { o.convert(*this); }
9364     template <int N> typename tuple_element<value_type, N>::reference get()
9365         { return tuple_element<value_type, N>(*this).get(); }
9366     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9367         { return const_tuple_element<value_type, N>(*this).get(); }
9368 
9369     A0 a0;
9370     A1 a1;
9371     A2 a2;
9372     A3 a3;
9373     A4 a4;
9374     A5 a5;
9375     A6 a6;
9376     A7 a7;
9377 };
9378 
9379 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
9380 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)
9381 { return t.template get<N>(); }
9382 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
9383 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)
9384 { return t.template get<N>(); }
9385 
9386 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
9387 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
9388     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> value_type;
9389     std::size_t size() const { return 9; }
9390     tuple() {}
9391     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) :
9392         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {}
9393     tuple(msgpack::object const& o) { o.convert(*this); }
9394     template <int N> typename tuple_element<value_type, N>::reference get()
9395         { return tuple_element<value_type, N>(*this).get(); }
9396     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9397         { return const_tuple_element<value_type, N>(*this).get(); }
9398 
9399     A0 a0;
9400     A1 a1;
9401     A2 a2;
9402     A3 a3;
9403     A4 a4;
9404     A5 a5;
9405     A6 a6;
9406     A7 a7;
9407     A8 a8;
9408 };
9409 
9410 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
9411 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)
9412 { return t.template get<N>(); }
9413 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
9414 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)
9415 { return t.template get<N>(); }
9416 
9417 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
9418 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
9419     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
9420     std::size_t size() const { return 10; }
9421     tuple() {}
9422     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) :
9423         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
9424     tuple(msgpack::object const& o) { o.convert(*this); }
9425     template <int N> typename tuple_element<value_type, N>::reference get()
9426         { return tuple_element<value_type, N>(*this).get(); }
9427     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9428         { return const_tuple_element<value_type, N>(*this).get(); }
9429 
9430     A0 a0;
9431     A1 a1;
9432     A2 a2;
9433     A3 a3;
9434     A4 a4;
9435     A5 a5;
9436     A6 a6;
9437     A7 a7;
9438     A8 a8;
9439     A9 a9;
9440 };
9441 
9442 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
9443 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)
9444 { return t.template get<N>(); }
9445 template <int N, typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
9446 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)
9447 { return t.template get<N>(); }
9448 
9449 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
9450 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
9451     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
9452     std::size_t size() const { return 11; }
9453     tuple() {}
9454     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) :
9455         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
9456     tuple(msgpack::object const& o) { o.convert(*this); }
9457     template <int N> typename tuple_element<value_type, N>::reference get()
9458         { return tuple_element<value_type, N>(*this).get(); }
9459     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9460         { return const_tuple_element<value_type, N>(*this).get(); }
9461 
9462     A0 a0;
9463     A1 a1;
9464     A2 a2;
9465     A3 a3;
9466     A4 a4;
9467     A5 a5;
9468     A6 a6;
9469     A7 a7;
9470     A8 a8;
9471     A9 a9;
9472     A10 a10;
9473 };
9474 
9475 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>
9476 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)
9477 { return t.template get<N>(); }
9478 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>
9479 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)
9480 { return t.template get<N>(); }
9481 
9482 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
9483 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
9484     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
9485     std::size_t size() const { return 12; }
9486     tuple() {}
9487     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) :
9488         a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
9489     tuple(msgpack::object const& o) { o.convert(*this); }
9490     template <int N> typename tuple_element<value_type, N>::reference get()
9491         { return tuple_element<value_type, N>(*this).get(); }
9492     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9493         { return const_tuple_element<value_type, N>(*this).get(); }
9494 
9495     A0 a0;
9496     A1 a1;
9497     A2 a2;
9498     A3 a3;
9499     A4 a4;
9500     A5 a5;
9501     A6 a6;
9502     A7 a7;
9503     A8 a8;
9504     A9 a9;
9505     A10 a10;
9506     A11 a11;
9507 };
9508 
9509 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>
9510 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)
9511 { return t.template get<N>(); }
9512 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>
9513 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)
9514 { return t.template get<N>(); }
9515 
9516 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
9517 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
9518     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
9519     std::size_t size() const { return 13; }
9520     tuple() {}
9521     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) :
9522         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) {}
9523     tuple(msgpack::object const& o) { o.convert(*this); }
9524     template <int N> typename tuple_element<value_type, N>::reference get()
9525         { return tuple_element<value_type, N>(*this).get(); }
9526     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9527         { return const_tuple_element<value_type, N>(*this).get(); }
9528 
9529     A0 a0;
9530     A1 a1;
9531     A2 a2;
9532     A3 a3;
9533     A4 a4;
9534     A5 a5;
9535     A6 a6;
9536     A7 a7;
9537     A8 a8;
9538     A9 a9;
9539     A10 a10;
9540     A11 a11;
9541     A12 a12;
9542 };
9543 
9544 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>
9545 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)
9546 { return t.template get<N>(); }
9547 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>
9548 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)
9549 { return t.template get<N>(); }
9550 
9551 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
9552 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
9553     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
9554     std::size_t size() const { return 14; }
9555     tuple() {}
9556     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) :
9557         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) {}
9558     tuple(msgpack::object const& o) { o.convert(*this); }
9559     template <int N> typename tuple_element<value_type, N>::reference get()
9560         { return tuple_element<value_type, N>(*this).get(); }
9561     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9562         { return const_tuple_element<value_type, N>(*this).get(); }
9563 
9564     A0 a0;
9565     A1 a1;
9566     A2 a2;
9567     A3 a3;
9568     A4 a4;
9569     A5 a5;
9570     A6 a6;
9571     A7 a7;
9572     A8 a8;
9573     A9 a9;
9574     A10 a10;
9575     A11 a11;
9576     A12 a12;
9577     A13 a13;
9578 };
9579 
9580 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>
9581 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)
9582 { return t.template get<N>(); }
9583 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>
9584 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)
9585 { return t.template get<N>(); }
9586 
9587 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
9588 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
9589     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
9590     std::size_t size() const { return 15; }
9591     tuple() {}
9592     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) :
9593         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) {}
9594     tuple(msgpack::object const& o) { o.convert(*this); }
9595     template <int N> typename tuple_element<value_type, N>::reference get()
9596         { return tuple_element<value_type, N>(*this).get(); }
9597     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9598         { return const_tuple_element<value_type, N>(*this).get(); }
9599 
9600     A0 a0;
9601     A1 a1;
9602     A2 a2;
9603     A3 a3;
9604     A4 a4;
9605     A5 a5;
9606     A6 a6;
9607     A7 a7;
9608     A8 a8;
9609     A9 a9;
9610     A10 a10;
9611     A11 a11;
9612     A12 a12;
9613     A13 a13;
9614     A14 a14;
9615 };
9616 
9617 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>
9618 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)
9619 { return t.template get<N>(); }
9620 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>
9621 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)
9622 { return t.template get<N>(); }
9623 
9624 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
9625 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
9626     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
9627     std::size_t size() const { return 16; }
9628     tuple() {}
9629     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) :
9630         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) {}
9631     tuple(msgpack::object const& o) { o.convert(*this); }
9632     template <int N> typename tuple_element<value_type, N>::reference get()
9633         { return tuple_element<value_type, N>(*this).get(); }
9634     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9635         { return const_tuple_element<value_type, N>(*this).get(); }
9636 
9637     A0 a0;
9638     A1 a1;
9639     A2 a2;
9640     A3 a3;
9641     A4 a4;
9642     A5 a5;
9643     A6 a6;
9644     A7 a7;
9645     A8 a8;
9646     A9 a9;
9647     A10 a10;
9648     A11 a11;
9649     A12 a12;
9650     A13 a13;
9651     A14 a14;
9652     A15 a15;
9653 };
9654 
9655 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>
9656 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)
9657 { return t.template get<N>(); }
9658 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>
9659 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)
9660 { return t.template get<N>(); }
9661 
9662 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
9663 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
9664     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
9665     std::size_t size() const { return 17; }
9666     tuple() {}
9667     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) :
9668         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) {}
9669     tuple(msgpack::object const& o) { o.convert(*this); }
9670     template <int N> typename tuple_element<value_type, N>::reference get()
9671         { return tuple_element<value_type, N>(*this).get(); }
9672     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9673         { return const_tuple_element<value_type, N>(*this).get(); }
9674 
9675     A0 a0;
9676     A1 a1;
9677     A2 a2;
9678     A3 a3;
9679     A4 a4;
9680     A5 a5;
9681     A6 a6;
9682     A7 a7;
9683     A8 a8;
9684     A9 a9;
9685     A10 a10;
9686     A11 a11;
9687     A12 a12;
9688     A13 a13;
9689     A14 a14;
9690     A15 a15;
9691     A16 a16;
9692 };
9693 
9694 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>
9695 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)
9696 { return t.template get<N>(); }
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::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)
9699 { return t.template get<N>(); }
9700 
9701 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
9702 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
9703     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
9704     std::size_t size() const { return 18; }
9705     tuple() {}
9706     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) :
9707         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) {}
9708     tuple(msgpack::object const& o) { o.convert(*this); }
9709     template <int N> typename tuple_element<value_type, N>::reference get()
9710         { return tuple_element<value_type, N>(*this).get(); }
9711     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9712         { return const_tuple_element<value_type, N>(*this).get(); }
9713 
9714     A0 a0;
9715     A1 a1;
9716     A2 a2;
9717     A3 a3;
9718     A4 a4;
9719     A5 a5;
9720     A6 a6;
9721     A7 a7;
9722     A8 a8;
9723     A9 a9;
9724     A10 a10;
9725     A11 a11;
9726     A12 a12;
9727     A13 a13;
9728     A14 a14;
9729     A15 a15;
9730     A16 a16;
9731     A17 a17;
9732 };
9733 
9734 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>
9735 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)
9736 { return t.template get<N>(); }
9737 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>
9738 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)
9739 { return t.template get<N>(); }
9740 
9741 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
9742 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
9743     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
9744     std::size_t size() const { return 19; }
9745     tuple() {}
9746     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) :
9747         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) {}
9748     tuple(msgpack::object const& o) { o.convert(*this); }
9749     template <int N> typename tuple_element<value_type, N>::reference get()
9750         { return tuple_element<value_type, N>(*this).get(); }
9751     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9752         { return const_tuple_element<value_type, N>(*this).get(); }
9753 
9754     A0 a0;
9755     A1 a1;
9756     A2 a2;
9757     A3 a3;
9758     A4 a4;
9759     A5 a5;
9760     A6 a6;
9761     A7 a7;
9762     A8 a8;
9763     A9 a9;
9764     A10 a10;
9765     A11 a11;
9766     A12 a12;
9767     A13 a13;
9768     A14 a14;
9769     A15 a15;
9770     A16 a16;
9771     A17 a17;
9772     A18 a18;
9773 };
9774 
9775 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>
9776 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)
9777 { return t.template get<N>(); }
9778 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>
9779 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)
9780 { return t.template get<N>(); }
9781 
9782 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
9783 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
9784     typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> value_type;
9785     std::size_t size() const { return 20; }
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(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     std::size_t size() const { return 21; }
9828     tuple() {}
9829     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) :
9830         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) {}
9831     tuple(msgpack::object const& o) { o.convert(*this); }
9832     template <int N> typename tuple_element<value_type, N>::reference get()
9833         { return tuple_element<value_type, N>(*this).get(); }
9834     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9835         { return const_tuple_element<value_type, N>(*this).get(); }
9836 
9837     A0 a0;
9838     A1 a1;
9839     A2 a2;
9840     A3 a3;
9841     A4 a4;
9842     A5 a5;
9843     A6 a6;
9844     A7 a7;
9845     A8 a8;
9846     A9 a9;
9847     A10 a10;
9848     A11 a11;
9849     A12 a12;
9850     A13 a13;
9851     A14 a14;
9852     A15 a15;
9853     A16 a16;
9854     A17 a17;
9855     A18 a18;
9856     A19 a19;
9857     A20 a20;
9858 };
9859 
9860 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>
9861 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)
9862 { return t.template get<N>(); }
9863 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>
9864 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)
9865 { return t.template get<N>(); }
9866 
9867 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
9868 struct tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> {
9869     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;
9870     std::size_t size() const { return 22; }
9871     tuple() {}
9872     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) :
9873         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) {}
9874     tuple(msgpack::object const& o) { o.convert(*this); }
9875     template <int N> typename tuple_element<value_type, N>::reference get()
9876         { return tuple_element<value_type, N>(*this).get(); }
9877     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9878         { return const_tuple_element<value_type, N>(*this).get(); }
9879 
9880     A0 a0;
9881     A1 a1;
9882     A2 a2;
9883     A3 a3;
9884     A4 a4;
9885     A5 a5;
9886     A6 a6;
9887     A7 a7;
9888     A8 a8;
9889     A9 a9;
9890     A10 a10;
9891     A11 a11;
9892     A12 a12;
9893     A13 a13;
9894     A14 a14;
9895     A15 a15;
9896     A16 a16;
9897     A17 a17;
9898     A18 a18;
9899     A19 a19;
9900     A20 a20;
9901     A21 a21;
9902 };
9903 
9904 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>
9905 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)
9906 { return t.template get<N>(); }
9907 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>
9908 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)
9909 { return t.template get<N>(); }
9910 
9911 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
9912 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> {
9913     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;
9914     std::size_t size() const { return 23; }
9915     tuple() {}
9916     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) :
9917         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) {}
9918     tuple(msgpack::object const& o) { o.convert(*this); }
9919     template <int N> typename tuple_element<value_type, N>::reference get()
9920         { return tuple_element<value_type, N>(*this).get(); }
9921     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9922         { return const_tuple_element<value_type, N>(*this).get(); }
9923 
9924     A0 a0;
9925     A1 a1;
9926     A2 a2;
9927     A3 a3;
9928     A4 a4;
9929     A5 a5;
9930     A6 a6;
9931     A7 a7;
9932     A8 a8;
9933     A9 a9;
9934     A10 a10;
9935     A11 a11;
9936     A12 a12;
9937     A13 a13;
9938     A14 a14;
9939     A15 a15;
9940     A16 a16;
9941     A17 a17;
9942     A18 a18;
9943     A19 a19;
9944     A20 a20;
9945     A21 a21;
9946     A22 a22;
9947 };
9948 
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::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)
9951 { return t.template get<N>(); }
9952 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>
9953 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)
9954 { return t.template get<N>(); }
9955 
9956 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
9957 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> {
9958     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;
9959     std::size_t size() const { return 24; }
9960     tuple() {}
9961     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) :
9962         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) {}
9963     tuple(msgpack::object const& o) { o.convert(*this); }
9964     template <int N> typename tuple_element<value_type, N>::reference get()
9965         { return tuple_element<value_type, N>(*this).get(); }
9966     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
9967         { return const_tuple_element<value_type, N>(*this).get(); }
9968 
9969     A0 a0;
9970     A1 a1;
9971     A2 a2;
9972     A3 a3;
9973     A4 a4;
9974     A5 a5;
9975     A6 a6;
9976     A7 a7;
9977     A8 a8;
9978     A9 a9;
9979     A10 a10;
9980     A11 a11;
9981     A12 a12;
9982     A13 a13;
9983     A14 a14;
9984     A15 a15;
9985     A16 a16;
9986     A17 a17;
9987     A18 a18;
9988     A19 a19;
9989     A20 a20;
9990     A21 a21;
9991     A22 a22;
9992     A23 a23;
9993 };
9994 
9995 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>
9996 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)
9997 { return t.template get<N>(); }
9998 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>
9999 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)
10000 { return t.template get<N>(); }
10001 
10002 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
10003 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> {
10004     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;
10005     std::size_t size() const { return 25; }
10006     tuple() {}
10007     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) :
10008         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) {}
10009     tuple(msgpack::object const& o) { o.convert(*this); }
10010     template <int N> typename tuple_element<value_type, N>::reference get()
10011         { return tuple_element<value_type, N>(*this).get(); }
10012     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10013         { return const_tuple_element<value_type, N>(*this).get(); }
10014 
10015     A0 a0;
10016     A1 a1;
10017     A2 a2;
10018     A3 a3;
10019     A4 a4;
10020     A5 a5;
10021     A6 a6;
10022     A7 a7;
10023     A8 a8;
10024     A9 a9;
10025     A10 a10;
10026     A11 a11;
10027     A12 a12;
10028     A13 a13;
10029     A14 a14;
10030     A15 a15;
10031     A16 a16;
10032     A17 a17;
10033     A18 a18;
10034     A19 a19;
10035     A20 a20;
10036     A21 a21;
10037     A22 a22;
10038     A23 a23;
10039     A24 a24;
10040 };
10041 
10042 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>
10043 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)
10044 { return t.template get<N>(); }
10045 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>
10046 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)
10047 { return t.template get<N>(); }
10048 
10049 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
10050 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> {
10051     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;
10052     std::size_t size() const { return 26; }
10053     tuple() {}
10054     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) :
10055         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) {}
10056     tuple(msgpack::object const& o) { o.convert(*this); }
10057     template <int N> typename tuple_element<value_type, N>::reference get()
10058         { return tuple_element<value_type, N>(*this).get(); }
10059     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10060         { return const_tuple_element<value_type, N>(*this).get(); }
10061 
10062     A0 a0;
10063     A1 a1;
10064     A2 a2;
10065     A3 a3;
10066     A4 a4;
10067     A5 a5;
10068     A6 a6;
10069     A7 a7;
10070     A8 a8;
10071     A9 a9;
10072     A10 a10;
10073     A11 a11;
10074     A12 a12;
10075     A13 a13;
10076     A14 a14;
10077     A15 a15;
10078     A16 a16;
10079     A17 a17;
10080     A18 a18;
10081     A19 a19;
10082     A20 a20;
10083     A21 a21;
10084     A22 a22;
10085     A23 a23;
10086     A24 a24;
10087     A25 a25;
10088 };
10089 
10090 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>
10091 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)
10092 { return t.template get<N>(); }
10093 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>
10094 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)
10095 { return t.template get<N>(); }
10096 
10097 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
10098 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> {
10099     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;
10100     std::size_t size() const { return 27; }
10101     tuple() {}
10102     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) :
10103         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) {}
10104     tuple(msgpack::object const& o) { o.convert(*this); }
10105     template <int N> typename tuple_element<value_type, N>::reference get()
10106         { return tuple_element<value_type, N>(*this).get(); }
10107     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10108         { return const_tuple_element<value_type, N>(*this).get(); }
10109 
10110     A0 a0;
10111     A1 a1;
10112     A2 a2;
10113     A3 a3;
10114     A4 a4;
10115     A5 a5;
10116     A6 a6;
10117     A7 a7;
10118     A8 a8;
10119     A9 a9;
10120     A10 a10;
10121     A11 a11;
10122     A12 a12;
10123     A13 a13;
10124     A14 a14;
10125     A15 a15;
10126     A16 a16;
10127     A17 a17;
10128     A18 a18;
10129     A19 a19;
10130     A20 a20;
10131     A21 a21;
10132     A22 a22;
10133     A23 a23;
10134     A24 a24;
10135     A25 a25;
10136     A26 a26;
10137 };
10138 
10139 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>
10140 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)
10141 { return t.template get<N>(); }
10142 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>
10143 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)
10144 { return t.template get<N>(); }
10145 
10146 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
10147 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> {
10148     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;
10149     std::size_t size() const { return 28; }
10150     tuple() {}
10151     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) :
10152         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) {}
10153     tuple(msgpack::object const& o) { o.convert(*this); }
10154     template <int N> typename tuple_element<value_type, N>::reference get()
10155         { return tuple_element<value_type, N>(*this).get(); }
10156     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10157         { return const_tuple_element<value_type, N>(*this).get(); }
10158 
10159     A0 a0;
10160     A1 a1;
10161     A2 a2;
10162     A3 a3;
10163     A4 a4;
10164     A5 a5;
10165     A6 a6;
10166     A7 a7;
10167     A8 a8;
10168     A9 a9;
10169     A10 a10;
10170     A11 a11;
10171     A12 a12;
10172     A13 a13;
10173     A14 a14;
10174     A15 a15;
10175     A16 a16;
10176     A17 a17;
10177     A18 a18;
10178     A19 a19;
10179     A20 a20;
10180     A21 a21;
10181     A22 a22;
10182     A23 a23;
10183     A24 a24;
10184     A25 a25;
10185     A26 a26;
10186     A27 a27;
10187 };
10188 
10189 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>
10190 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)
10191 { return t.template get<N>(); }
10192 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>
10193 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)
10194 { return t.template get<N>(); }
10195 
10196 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
10197 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> {
10198     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;
10199     std::size_t size() const { return 29; }
10200     tuple() {}
10201     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) :
10202         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) {}
10203     tuple(msgpack::object const& o) { o.convert(*this); }
10204     template <int N> typename tuple_element<value_type, N>::reference get()
10205         { return tuple_element<value_type, N>(*this).get(); }
10206     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10207         { return const_tuple_element<value_type, N>(*this).get(); }
10208 
10209     A0 a0;
10210     A1 a1;
10211     A2 a2;
10212     A3 a3;
10213     A4 a4;
10214     A5 a5;
10215     A6 a6;
10216     A7 a7;
10217     A8 a8;
10218     A9 a9;
10219     A10 a10;
10220     A11 a11;
10221     A12 a12;
10222     A13 a13;
10223     A14 a14;
10224     A15 a15;
10225     A16 a16;
10226     A17 a17;
10227     A18 a18;
10228     A19 a19;
10229     A20 a20;
10230     A21 a21;
10231     A22 a22;
10232     A23 a23;
10233     A24 a24;
10234     A25 a25;
10235     A26 a26;
10236     A27 a27;
10237     A28 a28;
10238 };
10239 
10240 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>
10241 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)
10242 { return t.template get<N>(); }
10243 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>
10244 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)
10245 { return t.template get<N>(); }
10246 
10247 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
10248 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> {
10249     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;
10250     std::size_t size() const { return 30; }
10251     tuple() {}
10252     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) :
10253         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) {}
10254     tuple(msgpack::object const& o) { o.convert(*this); }
10255     template <int N> typename tuple_element<value_type, N>::reference get()
10256         { return tuple_element<value_type, N>(*this).get(); }
10257     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10258         { return const_tuple_element<value_type, N>(*this).get(); }
10259 
10260     A0 a0;
10261     A1 a1;
10262     A2 a2;
10263     A3 a3;
10264     A4 a4;
10265     A5 a5;
10266     A6 a6;
10267     A7 a7;
10268     A8 a8;
10269     A9 a9;
10270     A10 a10;
10271     A11 a11;
10272     A12 a12;
10273     A13 a13;
10274     A14 a14;
10275     A15 a15;
10276     A16 a16;
10277     A17 a17;
10278     A18 a18;
10279     A19 a19;
10280     A20 a20;
10281     A21 a21;
10282     A22 a22;
10283     A23 a23;
10284     A24 a24;
10285     A25 a25;
10286     A26 a26;
10287     A27 a27;
10288     A28 a28;
10289     A29 a29;
10290 };
10291 
10292 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>
10293 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)
10294 { return t.template get<N>(); }
10295 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>
10296 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)
10297 { return t.template get<N>(); }
10298 
10299 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
10300 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> {
10301     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;
10302     std::size_t size() const { return 31; }
10303     tuple() {}
10304     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) :
10305         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) {}
10306     tuple(msgpack::object const& o) { o.convert(*this); }
10307     template <int N> typename tuple_element<value_type, N>::reference get()
10308         { return tuple_element<value_type, N>(*this).get(); }
10309     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10310         { return const_tuple_element<value_type, N>(*this).get(); }
10311 
10312     A0 a0;
10313     A1 a1;
10314     A2 a2;
10315     A3 a3;
10316     A4 a4;
10317     A5 a5;
10318     A6 a6;
10319     A7 a7;
10320     A8 a8;
10321     A9 a9;
10322     A10 a10;
10323     A11 a11;
10324     A12 a12;
10325     A13 a13;
10326     A14 a14;
10327     A15 a15;
10328     A16 a16;
10329     A17 a17;
10330     A18 a18;
10331     A19 a19;
10332     A20 a20;
10333     A21 a21;
10334     A22 a22;
10335     A23 a23;
10336     A24 a24;
10337     A25 a25;
10338     A26 a26;
10339     A27 a27;
10340     A28 a28;
10341     A29 a29;
10342     A30 a30;
10343 };
10344 
10345 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>
10346 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)
10347 { return t.template get<N>(); }
10348 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>
10349 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)
10350 { return t.template get<N>(); }
10351 
10352 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
10353 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> {
10354     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;
10355     std::size_t size() const { return 32; }
10356     tuple() {}
10357     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) :
10358         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) {}
10359     tuple(msgpack::object const& o) { o.convert(*this); }
10360     template <int N> typename tuple_element<value_type, N>::reference get()
10361         { return tuple_element<value_type, N>(*this).get(); }
10362     template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
10363         { return const_tuple_element<value_type, N>(*this).get(); }
10364 
10365     A0 a0;
10366     A1 a1;
10367     A2 a2;
10368     A3 a3;
10369     A4 a4;
10370     A5 a5;
10371     A6 a6;
10372     A7 a7;
10373     A8 a8;
10374     A9 a9;
10375     A10 a10;
10376     A11 a11;
10377     A12 a12;
10378     A13 a13;
10379     A14 a14;
10380     A15 a15;
10381     A16 a16;
10382     A17 a17;
10383     A18 a18;
10384     A19 a19;
10385     A20 a20;
10386     A21 a21;
10387     A22 a22;
10388     A23 a23;
10389     A24 a24;
10390     A25 a25;
10391     A26 a26;
10392     A27 a27;
10393     A28 a28;
10394     A29 a29;
10395     A30 a30;
10396     A31 a31;
10397 };
10398 
10399 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>
10400 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)
10401 { return t.template get<N>(); }
10402 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>
10403 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)
10404 { return t.template get<N>(); }
10405 
10406 /// @endcond
10407 
10408 inline tuple<> make_tuple()
10409 {
10410     return tuple<>();
10411 }
10412 
10413 /// @cond
10414 
10415 template <typename A0>
10416 inline tuple<A0> make_tuple(typename tuple_type<A0>::transparent_reference a0)
10417 {
10418     return tuple<A0>(a0);
10419 }
10420 
10421 template <typename A0, typename A1>
10422 inline tuple<A0, A1> make_tuple(typename tuple_type<A0>::transparent_reference a0, typename tuple_type<A1>::transparent_reference a1)
10423 {
10424     return tuple<A0, A1>(a0, a1);
10425 }
10426 
10427 template <typename A0, typename A1, typename A2>
10428 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)
10429 {
10430     return tuple<A0, A1, A2>(a0, a1, a2);
10431 }
10432 
10433 template <typename A0, typename A1, typename A2, typename A3>
10434 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)
10435 {
10436     return tuple<A0, A1, A2, A3>(a0, a1, a2, a3);
10437 }
10438 
10439 template <typename A0, typename A1, typename A2, typename A3, typename A4>
10440 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)
10441 {
10442     return tuple<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
10443 }
10444 
10445 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
10446 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)
10447 {
10448     return tuple<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
10449 }
10450 
10451 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
10452 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)
10453 {
10454     return tuple<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
10455 }
10456 
10457 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
10458 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)
10459 {
10460     return tuple<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
10461 }
10462 
10463 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
10464 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)
10465 {
10466     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
10467 }
10468 
10469 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
10470 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)
10471 {
10472     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
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>
10476 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)
10477 {
10478     return tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
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>
10482 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)
10483 {
10484     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);
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>
10488 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)
10489 {
10490     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);
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>
10494 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)
10495 {
10496     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);
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>
10500 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)
10501 {
10502     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);
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>
10506 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)
10507 {
10508     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);
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>
10512 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)
10513 {
10514     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);
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>
10518 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)
10519 {
10520     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);
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>
10524 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)
10525 {
10526     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);
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>
10530 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)
10531 {
10532     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);
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>
10536 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28);
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>
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> 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)
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>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29);
10593 }
10594 
10595 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
10596 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)
10597 {
10598     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);
10599 }
10600 
10601 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
10602 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)
10603 {
10604     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);
10605 }
10606 
10607 /// @endcond
10608 
10609 }  // namespace type
10610 
10611 namespace adaptor {
10612 
10613 template <>
10614 struct convert<type::tuple<> > {
10615     msgpack::object const& operator()(
10616         msgpack::object const& o,
10617         type::tuple<>&) const {
10618         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10619         return o;
10620     }
10621 };
10622 
10623 /// @cond
10624 
10625 template <typename A0>
10626 struct convert<type::tuple<A0> > {
10627     msgpack::object const& operator()(
10628         msgpack::object const& o,
10629         type::tuple<A0>& v) const {
10630         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10631 
10632         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10633         if(o.via.array.size > 0)
10634             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10635         return o;
10636     }
10637 };
10638 
10639 template <typename A0, typename A1>
10640 struct convert<type::tuple<A0, A1> > {
10641     msgpack::object const& operator()(
10642         msgpack::object const& o,
10643         type::tuple<A0, A1>& v) const {
10644         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10645 
10646         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10647         if(o.via.array.size > 0)
10648             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10649         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10650         if(o.via.array.size > 1)
10651             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10652         return o;
10653     }
10654 };
10655 
10656 template <typename A0, typename A1, typename A2>
10657 struct convert<type::tuple<A0, A1, A2> > {
10658     msgpack::object const& operator()(
10659         msgpack::object const& o,
10660         type::tuple<A0, A1, A2>& v) const {
10661         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10662 
10663         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10664         if(o.via.array.size > 0)
10665             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10666         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10667         if(o.via.array.size > 1)
10668             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10669         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10670         if(o.via.array.size > 2)
10671             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10672         return o;
10673     }
10674 };
10675 
10676 template <typename A0, typename A1, typename A2, typename A3>
10677 struct convert<type::tuple<A0, A1, A2, A3> > {
10678     msgpack::object const& operator()(
10679         msgpack::object const& o,
10680         type::tuple<A0, A1, A2, A3>& v) const {
10681         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10682 
10683         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10684         if(o.via.array.size > 0)
10685             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10686         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10687         if(o.via.array.size > 1)
10688             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10689         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10690         if(o.via.array.size > 2)
10691             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10692         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10693         if(o.via.array.size > 3)
10694             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10695         return o;
10696     }
10697 };
10698 
10699 template <typename A0, typename A1, typename A2, typename A3, typename A4>
10700 struct convert<type::tuple<A0, A1, A2, A3, A4> > {
10701     msgpack::object const& operator()(
10702         msgpack::object const& o,
10703         type::tuple<A0, A1, A2, A3, A4>& v) const {
10704         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10705 
10706         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10707         if(o.via.array.size > 0)
10708             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10709         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10710         if(o.via.array.size > 1)
10711             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10712         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10713         if(o.via.array.size > 2)
10714             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10715         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10716         if(o.via.array.size > 3)
10717             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10718         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10719         if(o.via.array.size > 4)
10720             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10721         return o;
10722     }
10723 };
10724 
10725 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
10726 struct convert<type::tuple<A0, A1, A2, A3, A4, A5> > {
10727     msgpack::object const& operator()(
10728         msgpack::object const& o,
10729         type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
10730         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10731 
10732         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10733         if(o.via.array.size > 0)
10734             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10735         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10736         if(o.via.array.size > 1)
10737             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10738         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10739         if(o.via.array.size > 2)
10740             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10741         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10742         if(o.via.array.size > 3)
10743             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10744         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10745         if(o.via.array.size > 4)
10746             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10747         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10748         if(o.via.array.size > 5)
10749             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10750         return o;
10751     }
10752 };
10753 
10754 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
10755 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
10756     msgpack::object const& operator()(
10757         msgpack::object const& o,
10758         type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
10759         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10760 
10761         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10762         if(o.via.array.size > 0)
10763             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10764         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10765         if(o.via.array.size > 1)
10766             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10767         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10768         if(o.via.array.size > 2)
10769             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10770         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10771         if(o.via.array.size > 3)
10772             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10773         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10774         if(o.via.array.size > 4)
10775             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10776         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10777         if(o.via.array.size > 5)
10778             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10779         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10780         if(o.via.array.size > 6)
10781             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10782         return o;
10783     }
10784 };
10785 
10786 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
10787 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
10788     msgpack::object const& operator()(
10789         msgpack::object const& o,
10790         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
10791         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10792 
10793         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10794         if(o.via.array.size > 0)
10795             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10796         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10797         if(o.via.array.size > 1)
10798             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10799         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10800         if(o.via.array.size > 2)
10801             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10802         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10803         if(o.via.array.size > 3)
10804             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10805         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10806         if(o.via.array.size > 4)
10807             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10808         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10809         if(o.via.array.size > 5)
10810             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10811         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10812         if(o.via.array.size > 6)
10813             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10814         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10815         if(o.via.array.size > 7)
10816             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10817         return o;
10818     }
10819 };
10820 
10821 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
10822 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
10823     msgpack::object const& operator()(
10824         msgpack::object const& o,
10825         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
10826         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10827 
10828         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10829         if(o.via.array.size > 0)
10830             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10831         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10832         if(o.via.array.size > 1)
10833             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10834         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10835         if(o.via.array.size > 2)
10836             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10837         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10838         if(o.via.array.size > 3)
10839             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10840         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10841         if(o.via.array.size > 4)
10842             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10843         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10844         if(o.via.array.size > 5)
10845             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10846         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10847         if(o.via.array.size > 6)
10848             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10849         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10850         if(o.via.array.size > 7)
10851             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10852         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10853         if(o.via.array.size > 8)
10854             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10855         return o;
10856     }
10857 };
10858 
10859 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
10860 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
10861     msgpack::object const& operator()(
10862         msgpack::object const& o,
10863         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
10864         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10865 
10866         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10867         if(o.via.array.size > 0)
10868             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10869         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10870         if(o.via.array.size > 1)
10871             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10872         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10873         if(o.via.array.size > 2)
10874             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10875         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10876         if(o.via.array.size > 3)
10877             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10878         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10879         if(o.via.array.size > 4)
10880             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10881         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10882         if(o.via.array.size > 5)
10883             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10884         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10885         if(o.via.array.size > 6)
10886             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10887         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10888         if(o.via.array.size > 7)
10889             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10890         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10891         if(o.via.array.size > 8)
10892             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10893         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10894         if(o.via.array.size > 9)
10895             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10896         return o;
10897     }
10898 };
10899 
10900 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
10901 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> > {
10902     msgpack::object const& operator()(
10903         msgpack::object const& o,
10904         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
10905         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10906 
10907         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10908         if(o.via.array.size > 0)
10909             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10910         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10911         if(o.via.array.size > 1)
10912             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10913         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10914         if(o.via.array.size > 2)
10915             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10916         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10917         if(o.via.array.size > 3)
10918             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10919         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10920         if(o.via.array.size > 4)
10921             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10922         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10923         if(o.via.array.size > 5)
10924             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10925         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10926         if(o.via.array.size > 6)
10927             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10928         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10929         if(o.via.array.size > 7)
10930             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10931         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10932         if(o.via.array.size > 8)
10933             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10934         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10935         if(o.via.array.size > 9)
10936             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10937         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10938         if(o.via.array.size > 10)
10939             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
10940         return o;
10941     }
10942 };
10943 
10944 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
10945 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> > {
10946     msgpack::object const& operator()(
10947         msgpack::object const& o,
10948         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
10949         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10950 
10951         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10952         if(o.via.array.size > 0)
10953             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
10954         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10955         if(o.via.array.size > 1)
10956             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
10957         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10958         if(o.via.array.size > 2)
10959             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
10960         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10961         if(o.via.array.size > 3)
10962             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
10963         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10964         if(o.via.array.size > 4)
10965             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
10966         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10967         if(o.via.array.size > 5)
10968             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
10969         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10970         if(o.via.array.size > 6)
10971             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
10972         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10973         if(o.via.array.size > 7)
10974             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
10975         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10976         if(o.via.array.size > 8)
10977             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
10978         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10979         if(o.via.array.size > 9)
10980             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
10981         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10982         if(o.via.array.size > 10)
10983             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
10984         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10985         if(o.via.array.size > 11)
10986             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
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>
10992 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> > {
10993     msgpack::object const& operator()(
10994         msgpack::object const& o,
10995         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
10996         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
10997 
10998         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
10999         if(o.via.array.size > 0)
11000             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11001         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11002         if(o.via.array.size > 1)
11003             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11004         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11005         if(o.via.array.size > 2)
11006             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11007         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11008         if(o.via.array.size > 3)
11009             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11010         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11011         if(o.via.array.size > 4)
11012             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11013         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11014         if(o.via.array.size > 5)
11015             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11016         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11017         if(o.via.array.size > 6)
11018             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11019         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11020         if(o.via.array.size > 7)
11021             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11022         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11023         if(o.via.array.size > 8)
11024             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11025         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11026         if(o.via.array.size > 9)
11027             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11028         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11029         if(o.via.array.size > 10)
11030             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11031         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11032         if(o.via.array.size > 11)
11033             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11034         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11035         if(o.via.array.size > 12)
11036             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11037         return o;
11038     }
11039 };
11040 
11041 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
11042 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> > {
11043     msgpack::object const& operator()(
11044         msgpack::object const& o,
11045         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
11046         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11047 
11048         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11049         if(o.via.array.size > 0)
11050             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11051         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11052         if(o.via.array.size > 1)
11053             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11054         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11055         if(o.via.array.size > 2)
11056             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11057         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11058         if(o.via.array.size > 3)
11059             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11060         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11061         if(o.via.array.size > 4)
11062             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11063         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11064         if(o.via.array.size > 5)
11065             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11066         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11067         if(o.via.array.size > 6)
11068             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11069         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11070         if(o.via.array.size > 7)
11071             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11072         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11073         if(o.via.array.size > 8)
11074             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11075         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11076         if(o.via.array.size > 9)
11077             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11078         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11079         if(o.via.array.size > 10)
11080             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11081         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11082         if(o.via.array.size > 11)
11083             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11084         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11085         if(o.via.array.size > 12)
11086             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11087         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11088         if(o.via.array.size > 13)
11089             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11090         return o;
11091     }
11092 };
11093 
11094 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
11095 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> > {
11096     msgpack::object const& operator()(
11097         msgpack::object const& o,
11098         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
11099         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11100 
11101         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11102         if(o.via.array.size > 0)
11103             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11104         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11105         if(o.via.array.size > 1)
11106             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11107         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11108         if(o.via.array.size > 2)
11109             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11110         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11111         if(o.via.array.size > 3)
11112             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11113         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11114         if(o.via.array.size > 4)
11115             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11116         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11117         if(o.via.array.size > 5)
11118             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11119         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11120         if(o.via.array.size > 6)
11121             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11122         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11123         if(o.via.array.size > 7)
11124             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11125         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11126         if(o.via.array.size > 8)
11127             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11128         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11129         if(o.via.array.size > 9)
11130             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11131         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11132         if(o.via.array.size > 10)
11133             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11134         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11135         if(o.via.array.size > 11)
11136             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11137         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11138         if(o.via.array.size > 12)
11139             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11140         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11141         if(o.via.array.size > 13)
11142             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11143         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11144         if(o.via.array.size > 14)
11145             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11146         return o;
11147     }
11148 };
11149 
11150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
11151 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> > {
11152     msgpack::object const& operator()(
11153         msgpack::object const& o,
11154         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
11155         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11156 
11157         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11158         if(o.via.array.size > 0)
11159             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11160         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11161         if(o.via.array.size > 1)
11162             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11163         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11164         if(o.via.array.size > 2)
11165             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11166         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11167         if(o.via.array.size > 3)
11168             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11169         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11170         if(o.via.array.size > 4)
11171             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11172         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11173         if(o.via.array.size > 5)
11174             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11175         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11176         if(o.via.array.size > 6)
11177             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11178         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11179         if(o.via.array.size > 7)
11180             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11181         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11182         if(o.via.array.size > 8)
11183             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11184         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11185         if(o.via.array.size > 9)
11186             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11187         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11188         if(o.via.array.size > 10)
11189             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11190         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11191         if(o.via.array.size > 11)
11192             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11193         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11194         if(o.via.array.size > 12)
11195             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11196         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11197         if(o.via.array.size > 13)
11198             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11199         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11200         if(o.via.array.size > 14)
11201             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11202         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11203         if(o.via.array.size > 15)
11204             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11205         return o;
11206     }
11207 };
11208 
11209 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
11210 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> > {
11211     msgpack::object const& operator()(
11212         msgpack::object const& o,
11213         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
11214         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11215 
11216         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11217         if(o.via.array.size > 0)
11218             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11219         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11220         if(o.via.array.size > 1)
11221             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11222         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11223         if(o.via.array.size > 2)
11224             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11225         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11226         if(o.via.array.size > 3)
11227             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11228         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11229         if(o.via.array.size > 4)
11230             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11231         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11232         if(o.via.array.size > 5)
11233             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11234         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11235         if(o.via.array.size > 6)
11236             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11237         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11238         if(o.via.array.size > 7)
11239             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11240         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11241         if(o.via.array.size > 8)
11242             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11243         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11244         if(o.via.array.size > 9)
11245             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11246         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11247         if(o.via.array.size > 10)
11248             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11249         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11250         if(o.via.array.size > 11)
11251             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11252         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11253         if(o.via.array.size > 12)
11254             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11255         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11256         if(o.via.array.size > 13)
11257             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11258         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11259         if(o.via.array.size > 14)
11260             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11261         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11262         if(o.via.array.size > 15)
11263             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11264         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11265         if(o.via.array.size > 16)
11266             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11267         return o;
11268     }
11269 };
11270 
11271 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
11272 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> > {
11273     msgpack::object const& operator()(
11274         msgpack::object const& o,
11275         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
11276         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11277 
11278         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11279         if(o.via.array.size > 0)
11280             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11281         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11282         if(o.via.array.size > 1)
11283             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11284         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11285         if(o.via.array.size > 2)
11286             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11287         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11288         if(o.via.array.size > 3)
11289             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11290         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11291         if(o.via.array.size > 4)
11292             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11293         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11294         if(o.via.array.size > 5)
11295             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11296         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11297         if(o.via.array.size > 6)
11298             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11299         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11300         if(o.via.array.size > 7)
11301             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11302         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11303         if(o.via.array.size > 8)
11304             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11305         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11306         if(o.via.array.size > 9)
11307             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11308         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11309         if(o.via.array.size > 10)
11310             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11311         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11312         if(o.via.array.size > 11)
11313             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11314         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11315         if(o.via.array.size > 12)
11316             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11317         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11318         if(o.via.array.size > 13)
11319             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11320         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11321         if(o.via.array.size > 14)
11322             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11323         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11324         if(o.via.array.size > 15)
11325             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11326         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11327         if(o.via.array.size > 16)
11328             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11329         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11330         if(o.via.array.size > 17)
11331             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11332         return o;
11333     }
11334 };
11335 
11336 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
11337 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> > {
11338     msgpack::object const& operator()(
11339         msgpack::object const& o,
11340         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
11341         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11342 
11343         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11344         if(o.via.array.size > 0)
11345             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11346         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11347         if(o.via.array.size > 1)
11348             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11349         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11350         if(o.via.array.size > 2)
11351             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11352         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11353         if(o.via.array.size > 3)
11354             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11355         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11356         if(o.via.array.size > 4)
11357             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11358         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11359         if(o.via.array.size > 5)
11360             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11361         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11362         if(o.via.array.size > 6)
11363             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11364         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11365         if(o.via.array.size > 7)
11366             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11367         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11368         if(o.via.array.size > 8)
11369             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11370         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11371         if(o.via.array.size > 9)
11372             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11373         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11374         if(o.via.array.size > 10)
11375             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11376         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11377         if(o.via.array.size > 11)
11378             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11379         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11380         if(o.via.array.size > 12)
11381             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11382         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11383         if(o.via.array.size > 13)
11384             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11385         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11386         if(o.via.array.size > 14)
11387             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11388         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11389         if(o.via.array.size > 15)
11390             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11391         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11392         if(o.via.array.size > 16)
11393             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11394         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11395         if(o.via.array.size > 17)
11396             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11397         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11398         if(o.via.array.size > 18)
11399             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11400         return o;
11401     }
11402 };
11403 
11404 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
11405 struct convert<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> > {
11406     msgpack::object const& operator()(
11407         msgpack::object const& o,
11408         type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& v) const {
11409         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11410 
11411         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11412         if(o.via.array.size > 0)
11413             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11414         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11415         if(o.via.array.size > 1)
11416             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11417         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11418         if(o.via.array.size > 2)
11419             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11420         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11421         if(o.via.array.size > 3)
11422             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11423         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11424         if(o.via.array.size > 4)
11425             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11426         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11427         if(o.via.array.size > 5)
11428             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11429         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11430         if(o.via.array.size > 6)
11431             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11432         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11433         if(o.via.array.size > 7)
11434             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11435         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11436         if(o.via.array.size > 8)
11437             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11438         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11439         if(o.via.array.size > 9)
11440             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11441         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11442         if(o.via.array.size > 10)
11443             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11444         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11445         if(o.via.array.size > 11)
11446             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11447         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11448         if(o.via.array.size > 12)
11449             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11450         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11451         if(o.via.array.size > 13)
11452             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11453         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11454         if(o.via.array.size > 14)
11455             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11456         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11457         if(o.via.array.size > 15)
11458             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11459         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11460         if(o.via.array.size > 16)
11461             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11462         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11463         if(o.via.array.size > 17)
11464             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11465         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11466         if(o.via.array.size > 18)
11467             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11468         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11469         if(o.via.array.size > 19)
11470             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11471         return o;
11472     }
11473 };
11474 
11475 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
11476 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> > {
11477     msgpack::object const& operator()(
11478         msgpack::object const& o,
11479         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 {
11480         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11481 
11482         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11483         if(o.via.array.size > 0)
11484             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11485         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11486         if(o.via.array.size > 1)
11487             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11488         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11489         if(o.via.array.size > 2)
11490             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11491         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11492         if(o.via.array.size > 3)
11493             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11494         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11495         if(o.via.array.size > 4)
11496             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11497         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11498         if(o.via.array.size > 5)
11499             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11500         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11501         if(o.via.array.size > 6)
11502             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11503         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11504         if(o.via.array.size > 7)
11505             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11506         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11507         if(o.via.array.size > 8)
11508             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11509         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11510         if(o.via.array.size > 9)
11511             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11512         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11513         if(o.via.array.size > 10)
11514             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11515         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11516         if(o.via.array.size > 11)
11517             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11518         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11519         if(o.via.array.size > 12)
11520             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11521         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11522         if(o.via.array.size > 13)
11523             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11524         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11525         if(o.via.array.size > 14)
11526             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11527         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11528         if(o.via.array.size > 15)
11529             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11530         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11531         if(o.via.array.size > 16)
11532             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11533         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11534         if(o.via.array.size > 17)
11535             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11536         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11537         if(o.via.array.size > 18)
11538             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11539         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11540         if(o.via.array.size > 19)
11541             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11542         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11543         if(o.via.array.size > 20)
11544             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11545         return o;
11546     }
11547 };
11548 
11549 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
11550 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> > {
11551     msgpack::object const& operator()(
11552         msgpack::object const& o,
11553         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 {
11554         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11555 
11556         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11557         if(o.via.array.size > 0)
11558             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11559         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11560         if(o.via.array.size > 1)
11561             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11562         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11563         if(o.via.array.size > 2)
11564             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11565         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11566         if(o.via.array.size > 3)
11567             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11568         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11569         if(o.via.array.size > 4)
11570             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11571         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11572         if(o.via.array.size > 5)
11573             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11574         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11575         if(o.via.array.size > 6)
11576             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11577         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11578         if(o.via.array.size > 7)
11579             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11580         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11581         if(o.via.array.size > 8)
11582             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11583         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11584         if(o.via.array.size > 9)
11585             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11586         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11587         if(o.via.array.size > 10)
11588             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11589         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11590         if(o.via.array.size > 11)
11591             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11592         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11593         if(o.via.array.size > 12)
11594             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11595         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11596         if(o.via.array.size > 13)
11597             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11598         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11599         if(o.via.array.size > 14)
11600             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11601         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11602         if(o.via.array.size > 15)
11603             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11604         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11605         if(o.via.array.size > 16)
11606             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11607         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11608         if(o.via.array.size > 17)
11609             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11610         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11611         if(o.via.array.size > 18)
11612             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11613         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11614         if(o.via.array.size > 19)
11615             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11616         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11617         if(o.via.array.size > 20)
11618             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11619         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11620         if(o.via.array.size > 21)
11621             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11622         return o;
11623     }
11624 };
11625 
11626 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
11627 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> > {
11628     msgpack::object const& operator()(
11629         msgpack::object const& o,
11630         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 {
11631         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11632 
11633         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11634         if(o.via.array.size > 0)
11635             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11636         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11637         if(o.via.array.size > 1)
11638             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11639         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11640         if(o.via.array.size > 2)
11641             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11642         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11643         if(o.via.array.size > 3)
11644             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11645         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11646         if(o.via.array.size > 4)
11647             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11648         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11649         if(o.via.array.size > 5)
11650             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11651         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11652         if(o.via.array.size > 6)
11653             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11654         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11655         if(o.via.array.size > 7)
11656             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11657         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11658         if(o.via.array.size > 8)
11659             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11660         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11661         if(o.via.array.size > 9)
11662             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11663         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11664         if(o.via.array.size > 10)
11665             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11666         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11667         if(o.via.array.size > 11)
11668             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11669         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11670         if(o.via.array.size > 12)
11671             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11672         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11673         if(o.via.array.size > 13)
11674             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11675         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11676         if(o.via.array.size > 14)
11677             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11678         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11679         if(o.via.array.size > 15)
11680             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11681         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11682         if(o.via.array.size > 16)
11683             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11684         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11685         if(o.via.array.size > 17)
11686             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11687         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11688         if(o.via.array.size > 18)
11689             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11690         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11691         if(o.via.array.size > 19)
11692             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11693         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11694         if(o.via.array.size > 20)
11695             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11696         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11697         if(o.via.array.size > 21)
11698             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11699         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11700         if(o.via.array.size > 22)
11701             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11702         return o;
11703     }
11704 };
11705 
11706 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
11707 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> > {
11708     msgpack::object const& operator()(
11709         msgpack::object const& o,
11710         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 {
11711         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11712 
11713         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11714         if(o.via.array.size > 0)
11715             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11716         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11717         if(o.via.array.size > 1)
11718             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11719         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11720         if(o.via.array.size > 2)
11721             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11722         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11723         if(o.via.array.size > 3)
11724             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11725         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11726         if(o.via.array.size > 4)
11727             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11728         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11729         if(o.via.array.size > 5)
11730             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11731         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11732         if(o.via.array.size > 6)
11733             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11734         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11735         if(o.via.array.size > 7)
11736             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11737         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11738         if(o.via.array.size > 8)
11739             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11740         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11741         if(o.via.array.size > 9)
11742             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11743         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11744         if(o.via.array.size > 10)
11745             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11746         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11747         if(o.via.array.size > 11)
11748             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11749         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11750         if(o.via.array.size > 12)
11751             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11752         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11753         if(o.via.array.size > 13)
11754             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11755         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11756         if(o.via.array.size > 14)
11757             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11758         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11759         if(o.via.array.size > 15)
11760             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11761         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11762         if(o.via.array.size > 16)
11763             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11764         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11765         if(o.via.array.size > 17)
11766             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11767         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11768         if(o.via.array.size > 18)
11769             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11770         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11771         if(o.via.array.size > 19)
11772             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11773         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11774         if(o.via.array.size > 20)
11775             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11776         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11777         if(o.via.array.size > 21)
11778             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11779         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11780         if(o.via.array.size > 22)
11781             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11782         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11783         if(o.via.array.size > 23)
11784             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11785         return o;
11786     }
11787 };
11788 
11789 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
11790 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> > {
11791     msgpack::object const& operator()(
11792         msgpack::object const& o,
11793         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 {
11794         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11795 
11796         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11797         if(o.via.array.size > 0)
11798             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11799         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11800         if(o.via.array.size > 1)
11801             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11802         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11803         if(o.via.array.size > 2)
11804             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11805         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11806         if(o.via.array.size > 3)
11807             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11808         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11809         if(o.via.array.size > 4)
11810             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11811         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11812         if(o.via.array.size > 5)
11813             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11814         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11815         if(o.via.array.size > 6)
11816             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11817         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11818         if(o.via.array.size > 7)
11819             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11820         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11821         if(o.via.array.size > 8)
11822             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11823         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11824         if(o.via.array.size > 9)
11825             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11826         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11827         if(o.via.array.size > 10)
11828             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11829         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11830         if(o.via.array.size > 11)
11831             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11832         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11833         if(o.via.array.size > 12)
11834             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11835         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11836         if(o.via.array.size > 13)
11837             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11838         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11839         if(o.via.array.size > 14)
11840             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11841         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11842         if(o.via.array.size > 15)
11843             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11844         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11845         if(o.via.array.size > 16)
11846             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11847         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11848         if(o.via.array.size > 17)
11849             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11850         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11851         if(o.via.array.size > 18)
11852             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11853         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11854         if(o.via.array.size > 19)
11855             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11856         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11857         if(o.via.array.size > 20)
11858             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11859         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11860         if(o.via.array.size > 21)
11861             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11862         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11863         if(o.via.array.size > 22)
11864             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11865         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11866         if(o.via.array.size > 23)
11867             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11868         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11869         if(o.via.array.size > 24)
11870             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11871         return o;
11872     }
11873 };
11874 
11875 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
11876 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> > {
11877     msgpack::object const& operator()(
11878         msgpack::object const& o,
11879         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 {
11880         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11881 
11882         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11883         if(o.via.array.size > 0)
11884             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11885         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11886         if(o.via.array.size > 1)
11887             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11888         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11889         if(o.via.array.size > 2)
11890             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11891         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11892         if(o.via.array.size > 3)
11893             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11894         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11895         if(o.via.array.size > 4)
11896             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11897         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11898         if(o.via.array.size > 5)
11899             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11900         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11901         if(o.via.array.size > 6)
11902             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11903         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11904         if(o.via.array.size > 7)
11905             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11906         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11907         if(o.via.array.size > 8)
11908             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11909         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11910         if(o.via.array.size > 9)
11911             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
11912         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11913         if(o.via.array.size > 10)
11914             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
11915         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11916         if(o.via.array.size > 11)
11917             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
11918         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11919         if(o.via.array.size > 12)
11920             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
11921         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11922         if(o.via.array.size > 13)
11923             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
11924         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11925         if(o.via.array.size > 14)
11926             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
11927         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11928         if(o.via.array.size > 15)
11929             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
11930         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11931         if(o.via.array.size > 16)
11932             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
11933         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11934         if(o.via.array.size > 17)
11935             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
11936         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11937         if(o.via.array.size > 18)
11938             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
11939         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11940         if(o.via.array.size > 19)
11941             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
11942         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11943         if(o.via.array.size > 20)
11944             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
11945         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11946         if(o.via.array.size > 21)
11947             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
11948         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11949         if(o.via.array.size > 22)
11950             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
11951         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11952         if(o.via.array.size > 23)
11953             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
11954         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11955         if(o.via.array.size > 24)
11956             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
11957         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11958         if(o.via.array.size > 25)
11959             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
11960         return o;
11961     }
11962 };
11963 
11964 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
11965 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> > {
11966     msgpack::object const& operator()(
11967         msgpack::object const& o,
11968         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 {
11969         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
11970 
11971         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11972         if(o.via.array.size > 0)
11973             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
11974         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11975         if(o.via.array.size > 1)
11976             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
11977         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11978         if(o.via.array.size > 2)
11979             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
11980         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11981         if(o.via.array.size > 3)
11982             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
11983         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11984         if(o.via.array.size > 4)
11985             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
11986         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11987         if(o.via.array.size > 5)
11988             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
11989         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11990         if(o.via.array.size > 6)
11991             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
11992         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11993         if(o.via.array.size > 7)
11994             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
11995         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11996         if(o.via.array.size > 8)
11997             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
11998         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
11999         if(o.via.array.size > 9)
12000             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12001         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12002         if(o.via.array.size > 10)
12003             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12004         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12005         if(o.via.array.size > 11)
12006             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12007         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12008         if(o.via.array.size > 12)
12009             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12010         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12011         if(o.via.array.size > 13)
12012             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12013         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12014         if(o.via.array.size > 14)
12015             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12016         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12017         if(o.via.array.size > 15)
12018             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12019         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12020         if(o.via.array.size > 16)
12021             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12022         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12023         if(o.via.array.size > 17)
12024             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12025         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12026         if(o.via.array.size > 18)
12027             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12028         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12029         if(o.via.array.size > 19)
12030             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12031         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12032         if(o.via.array.size > 20)
12033             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12034         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12035         if(o.via.array.size > 21)
12036             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12037         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12038         if(o.via.array.size > 22)
12039             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12040         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12041         if(o.via.array.size > 23)
12042             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12043         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12044         if(o.via.array.size > 24)
12045             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12046         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12047         if(o.via.array.size > 25)
12048             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12049         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12050         if(o.via.array.size > 26)
12051             o.via.array.ptr[26].msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12052         return o;
12053     }
12054 };
12055 
12056 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
12057 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> > {
12058     msgpack::object const& operator()(
12059         msgpack::object const& o,
12060         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 {
12061         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
12062 
12063         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12064         if(o.via.array.size > 0)
12065             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
12066         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12067         if(o.via.array.size > 1)
12068             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
12069         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12070         if(o.via.array.size > 2)
12071             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
12072         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12073         if(o.via.array.size > 3)
12074             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
12075         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12076         if(o.via.array.size > 4)
12077             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
12078         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12079         if(o.via.array.size > 5)
12080             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
12081         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12082         if(o.via.array.size > 6)
12083             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
12084         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12085         if(o.via.array.size > 7)
12086             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
12087         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12088         if(o.via.array.size > 8)
12089             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
12090         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12091         if(o.via.array.size > 9)
12092             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12093         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12094         if(o.via.array.size > 10)
12095             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12096         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12097         if(o.via.array.size > 11)
12098             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12099         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12100         if(o.via.array.size > 12)
12101             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12102         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12103         if(o.via.array.size > 13)
12104             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12105         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12106         if(o.via.array.size > 14)
12107             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12108         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12109         if(o.via.array.size > 15)
12110             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12111         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12112         if(o.via.array.size > 16)
12113             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12114         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12115         if(o.via.array.size > 17)
12116             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12117         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12118         if(o.via.array.size > 18)
12119             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12120         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12121         if(o.via.array.size > 19)
12122             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12123         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12124         if(o.via.array.size > 20)
12125             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12126         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12127         if(o.via.array.size > 21)
12128             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12129         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12130         if(o.via.array.size > 22)
12131             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12132         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12133         if(o.via.array.size > 23)
12134             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12135         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12136         if(o.via.array.size > 24)
12137             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12138         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12139         if(o.via.array.size > 25)
12140             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12141         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12142         if(o.via.array.size > 26)
12143             o.via.array.ptr[26].msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12144         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12145         if(o.via.array.size > 27)
12146             o.via.array.ptr[27].msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
12147         return o;
12148     }
12149 };
12150 
12151 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
12152 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> > {
12153     msgpack::object const& operator()(
12154         msgpack::object const& o,
12155         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 {
12156         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
12157 
12158         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12159         if(o.via.array.size > 0)
12160             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
12161         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12162         if(o.via.array.size > 1)
12163             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
12164         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12165         if(o.via.array.size > 2)
12166             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
12167         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12168         if(o.via.array.size > 3)
12169             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
12170         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12171         if(o.via.array.size > 4)
12172             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
12173         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12174         if(o.via.array.size > 5)
12175             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
12176         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12177         if(o.via.array.size > 6)
12178             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
12179         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12180         if(o.via.array.size > 7)
12181             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
12182         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12183         if(o.via.array.size > 8)
12184             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
12185         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12186         if(o.via.array.size > 9)
12187             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12188         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12189         if(o.via.array.size > 10)
12190             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12191         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12192         if(o.via.array.size > 11)
12193             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12194         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12195         if(o.via.array.size > 12)
12196             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12197         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12198         if(o.via.array.size > 13)
12199             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12200         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12201         if(o.via.array.size > 14)
12202             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12203         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12204         if(o.via.array.size > 15)
12205             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12206         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12207         if(o.via.array.size > 16)
12208             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12209         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12210         if(o.via.array.size > 17)
12211             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12212         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12213         if(o.via.array.size > 18)
12214             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12215         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12216         if(o.via.array.size > 19)
12217             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12218         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12219         if(o.via.array.size > 20)
12220             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12221         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12222         if(o.via.array.size > 21)
12223             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12224         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12225         if(o.via.array.size > 22)
12226             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12227         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12228         if(o.via.array.size > 23)
12229             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12230         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12231         if(o.via.array.size > 24)
12232             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12233         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12234         if(o.via.array.size > 25)
12235             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12236         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12237         if(o.via.array.size > 26)
12238             o.via.array.ptr[26].msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12239         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12240         if(o.via.array.size > 27)
12241             o.via.array.ptr[27].msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
12242         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12243         if(o.via.array.size > 28)
12244             o.via.array.ptr[28].msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
12245         return o;
12246     }
12247 };
12248 
12249 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
12250 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> > {
12251     msgpack::object const& operator()(
12252         msgpack::object const& o,
12253         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 {
12254         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
12255 
12256         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12257         if(o.via.array.size > 0)
12258             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
12259         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12260         if(o.via.array.size > 1)
12261             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
12262         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12263         if(o.via.array.size > 2)
12264             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
12265         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12266         if(o.via.array.size > 3)
12267             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
12268         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12269         if(o.via.array.size > 4)
12270             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
12271         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12272         if(o.via.array.size > 5)
12273             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
12274         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12275         if(o.via.array.size > 6)
12276             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
12277         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12278         if(o.via.array.size > 7)
12279             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
12280         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12281         if(o.via.array.size > 8)
12282             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
12283         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12284         if(o.via.array.size > 9)
12285             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12286         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12287         if(o.via.array.size > 10)
12288             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12289         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12290         if(o.via.array.size > 11)
12291             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12292         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12293         if(o.via.array.size > 12)
12294             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12295         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12296         if(o.via.array.size > 13)
12297             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12298         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12299         if(o.via.array.size > 14)
12300             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12301         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12302         if(o.via.array.size > 15)
12303             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12304         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12305         if(o.via.array.size > 16)
12306             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12307         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12308         if(o.via.array.size > 17)
12309             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12310         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12311         if(o.via.array.size > 18)
12312             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12313         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12314         if(o.via.array.size > 19)
12315             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12316         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12317         if(o.via.array.size > 20)
12318             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12319         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12320         if(o.via.array.size > 21)
12321             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12322         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12323         if(o.via.array.size > 22)
12324             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12325         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12326         if(o.via.array.size > 23)
12327             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12328         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12329         if(o.via.array.size > 24)
12330             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12331         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12332         if(o.via.array.size > 25)
12333             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12334         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12335         if(o.via.array.size > 26)
12336             o.via.array.ptr[26].msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12337         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12338         if(o.via.array.size > 27)
12339             o.via.array.ptr[27].msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
12340         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12341         if(o.via.array.size > 28)
12342             o.via.array.ptr[28].msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
12343         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12344         if(o.via.array.size > 29)
12345             o.via.array.ptr[29].msgpack::object::convert<typename type::tuple_type<A29>::type>(v.template get<29>());
12346         return o;
12347     }
12348 };
12349 
12350 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
12351 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> > {
12352     msgpack::object const& operator()(
12353         msgpack::object const& o,
12354         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 {
12355         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
12356 
12357         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12358         if(o.via.array.size > 0)
12359             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
12360         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12361         if(o.via.array.size > 1)
12362             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
12363         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12364         if(o.via.array.size > 2)
12365             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
12366         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12367         if(o.via.array.size > 3)
12368             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
12369         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12370         if(o.via.array.size > 4)
12371             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
12372         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12373         if(o.via.array.size > 5)
12374             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
12375         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12376         if(o.via.array.size > 6)
12377             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
12378         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12379         if(o.via.array.size > 7)
12380             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
12381         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12382         if(o.via.array.size > 8)
12383             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
12384         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12385         if(o.via.array.size > 9)
12386             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12387         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12388         if(o.via.array.size > 10)
12389             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12390         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12391         if(o.via.array.size > 11)
12392             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12393         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12394         if(o.via.array.size > 12)
12395             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12396         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12397         if(o.via.array.size > 13)
12398             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12399         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12400         if(o.via.array.size > 14)
12401             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12402         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12403         if(o.via.array.size > 15)
12404             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12405         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12406         if(o.via.array.size > 16)
12407             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12408         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12409         if(o.via.array.size > 17)
12410             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12411         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12412         if(o.via.array.size > 18)
12413             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12414         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12415         if(o.via.array.size > 19)
12416             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12417         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12418         if(o.via.array.size > 20)
12419             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12420         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12421         if(o.via.array.size > 21)
12422             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12423         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12424         if(o.via.array.size > 22)
12425             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12426         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12427         if(o.via.array.size > 23)
12428             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12429         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12430         if(o.via.array.size > 24)
12431             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12432         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12433         if(o.via.array.size > 25)
12434             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12435         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12436         if(o.via.array.size > 26)
12437             o.via.array.ptr[26].msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12438         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12439         if(o.via.array.size > 27)
12440             o.via.array.ptr[27].msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
12441         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12442         if(o.via.array.size > 28)
12443             o.via.array.ptr[28].msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
12444         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12445         if(o.via.array.size > 29)
12446             o.via.array.ptr[29].msgpack::object::convert<typename type::tuple_type<A29>::type>(v.template get<29>());
12447         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12448         if(o.via.array.size > 30)
12449             o.via.array.ptr[30].msgpack::object::convert<typename type::tuple_type<A30>::type>(v.template get<30>());
12450         return o;
12451     }
12452 };
12453 
12454 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
12455 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> > {
12456     msgpack::object const& operator()(
12457         msgpack::object const& o,
12458         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 {
12459         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
12460 
12461         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12462         if(o.via.array.size > 0)
12463             o.via.array.ptr[0].msgpack::object::convert<typename type::tuple_type<A0>::type>(v.template get<0>());
12464         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12465         if(o.via.array.size > 1)
12466             o.via.array.ptr[1].msgpack::object::convert<typename type::tuple_type<A1>::type>(v.template get<1>());
12467         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12468         if(o.via.array.size > 2)
12469             o.via.array.ptr[2].msgpack::object::convert<typename type::tuple_type<A2>::type>(v.template get<2>());
12470         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12471         if(o.via.array.size > 3)
12472             o.via.array.ptr[3].msgpack::object::convert<typename type::tuple_type<A3>::type>(v.template get<3>());
12473         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12474         if(o.via.array.size > 4)
12475             o.via.array.ptr[4].msgpack::object::convert<typename type::tuple_type<A4>::type>(v.template get<4>());
12476         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12477         if(o.via.array.size > 5)
12478             o.via.array.ptr[5].msgpack::object::convert<typename type::tuple_type<A5>::type>(v.template get<5>());
12479         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12480         if(o.via.array.size > 6)
12481             o.via.array.ptr[6].msgpack::object::convert<typename type::tuple_type<A6>::type>(v.template get<6>());
12482         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12483         if(o.via.array.size > 7)
12484             o.via.array.ptr[7].msgpack::object::convert<typename type::tuple_type<A7>::type>(v.template get<7>());
12485         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12486         if(o.via.array.size > 8)
12487             o.via.array.ptr[8].msgpack::object::convert<typename type::tuple_type<A8>::type>(v.template get<8>());
12488         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12489         if(o.via.array.size > 9)
12490             o.via.array.ptr[9].msgpack::object::convert<typename type::tuple_type<A9>::type>(v.template get<9>());
12491         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12492         if(o.via.array.size > 10)
12493             o.via.array.ptr[10].msgpack::object::convert<typename type::tuple_type<A10>::type>(v.template get<10>());
12494         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12495         if(o.via.array.size > 11)
12496             o.via.array.ptr[11].msgpack::object::convert<typename type::tuple_type<A11>::type>(v.template get<11>());
12497         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12498         if(o.via.array.size > 12)
12499             o.via.array.ptr[12].msgpack::object::convert<typename type::tuple_type<A12>::type>(v.template get<12>());
12500         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12501         if(o.via.array.size > 13)
12502             o.via.array.ptr[13].msgpack::object::convert<typename type::tuple_type<A13>::type>(v.template get<13>());
12503         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12504         if(o.via.array.size > 14)
12505             o.via.array.ptr[14].msgpack::object::convert<typename type::tuple_type<A14>::type>(v.template get<14>());
12506         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12507         if(o.via.array.size > 15)
12508             o.via.array.ptr[15].msgpack::object::convert<typename type::tuple_type<A15>::type>(v.template get<15>());
12509         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12510         if(o.via.array.size > 16)
12511             o.via.array.ptr[16].msgpack::object::convert<typename type::tuple_type<A16>::type>(v.template get<16>());
12512         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12513         if(o.via.array.size > 17)
12514             o.via.array.ptr[17].msgpack::object::convert<typename type::tuple_type<A17>::type>(v.template get<17>());
12515         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12516         if(o.via.array.size > 18)
12517             o.via.array.ptr[18].msgpack::object::convert<typename type::tuple_type<A18>::type>(v.template get<18>());
12518         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12519         if(o.via.array.size > 19)
12520             o.via.array.ptr[19].msgpack::object::convert<typename type::tuple_type<A19>::type>(v.template get<19>());
12521         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12522         if(o.via.array.size > 20)
12523             o.via.array.ptr[20].msgpack::object::convert<typename type::tuple_type<A20>::type>(v.template get<20>());
12524         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12525         if(o.via.array.size > 21)
12526             o.via.array.ptr[21].msgpack::object::convert<typename type::tuple_type<A21>::type>(v.template get<21>());
12527         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12528         if(o.via.array.size > 22)
12529             o.via.array.ptr[22].msgpack::object::convert<typename type::tuple_type<A22>::type>(v.template get<22>());
12530         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12531         if(o.via.array.size > 23)
12532             o.via.array.ptr[23].msgpack::object::convert<typename type::tuple_type<A23>::type>(v.template get<23>());
12533         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12534         if(o.via.array.size > 24)
12535             o.via.array.ptr[24].msgpack::object::convert<typename type::tuple_type<A24>::type>(v.template get<24>());
12536         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12537         if(o.via.array.size > 25)
12538             o.via.array.ptr[25].msgpack::object::convert<typename type::tuple_type<A25>::type>(v.template get<25>());
12539         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12540         if(o.via.array.size > 26)
12541             o.via.array.ptr[26].msgpack::object::convert<typename type::tuple_type<A26>::type>(v.template get<26>());
12542         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12543         if(o.via.array.size > 27)
12544             o.via.array.ptr[27].msgpack::object::convert<typename type::tuple_type<A27>::type>(v.template get<27>());
12545         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12546         if(o.via.array.size > 28)
12547             o.via.array.ptr[28].msgpack::object::convert<typename type::tuple_type<A28>::type>(v.template get<28>());
12548         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12549         if(o.via.array.size > 29)
12550             o.via.array.ptr[29].msgpack::object::convert<typename type::tuple_type<A29>::type>(v.template get<29>());
12551         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12552         if(o.via.array.size > 30)
12553             o.via.array.ptr[30].msgpack::object::convert<typename type::tuple_type<A30>::type>(v.template get<30>());
12554         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
12555         if(o.via.array.size > 31)
12556             o.via.array.ptr[31].msgpack::object::convert<typename type::tuple_type<A31>::type>(v.template get<31>());
12557         return o;
12558     }
12559 };
12560 
12561 /// @endcond
12562 
12563 template <>
12564 struct pack<type::tuple<> > {
12565     template <typename Stream>
12566     msgpack::packer<Stream>& operator()(
12567         msgpack::packer<Stream>& o,
12568         const type::tuple<>&) const {
12569         o.pack_array(0);
12570         return o;
12571     }
12572 };
12573 
12574 /// @cond
12575 
12576 template <typename A0>
12577 struct pack<type::tuple<A0> > {
12578     template <typename Stream>
12579     msgpack::packer<Stream>& operator()(
12580         msgpack::packer<Stream>& o,
12581         const type::tuple<A0>& v) const {
12582         o.pack_array(1);
12583 
12584         o.pack(v.template get<0>());
12585         return o;
12586     }
12587 };
12588 
12589 template <typename A0, typename A1>
12590 struct pack<type::tuple<A0, A1> > {
12591     template <typename Stream>
12592     msgpack::packer<Stream>& operator()(
12593         msgpack::packer<Stream>& o,
12594         const type::tuple<A0, A1>& v) const {
12595         o.pack_array(2);
12596 
12597         o.pack(v.template get<0>());
12598         o.pack(v.template get<1>());
12599         return o;
12600     }
12601 };
12602 
12603 template <typename A0, typename A1, typename A2>
12604 struct pack<type::tuple<A0, A1, A2> > {
12605     template <typename Stream>
12606     msgpack::packer<Stream>& operator()(
12607         msgpack::packer<Stream>& o,
12608         const type::tuple<A0, A1, A2>& v) const {
12609         o.pack_array(3);
12610 
12611         o.pack(v.template get<0>());
12612         o.pack(v.template get<1>());
12613         o.pack(v.template get<2>());
12614         return o;
12615     }
12616 };
12617 
12618 template <typename A0, typename A1, typename A2, typename A3>
12619 struct pack<type::tuple<A0, A1, A2, A3> > {
12620     template <typename Stream>
12621     msgpack::packer<Stream>& operator()(
12622         msgpack::packer<Stream>& o,
12623         const type::tuple<A0, A1, A2, A3>& v) const {
12624         o.pack_array(4);
12625 
12626         o.pack(v.template get<0>());
12627         o.pack(v.template get<1>());
12628         o.pack(v.template get<2>());
12629         o.pack(v.template get<3>());
12630         return o;
12631     }
12632 };
12633 
12634 template <typename A0, typename A1, typename A2, typename A3, typename A4>
12635 struct pack<type::tuple<A0, A1, A2, A3, A4> > {
12636     template <typename Stream>
12637     msgpack::packer<Stream>& operator()(
12638         msgpack::packer<Stream>& o,
12639         const type::tuple<A0, A1, A2, A3, A4>& v) const {
12640         o.pack_array(5);
12641 
12642         o.pack(v.template get<0>());
12643         o.pack(v.template get<1>());
12644         o.pack(v.template get<2>());
12645         o.pack(v.template get<3>());
12646         o.pack(v.template get<4>());
12647         return o;
12648     }
12649 };
12650 
12651 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
12652 struct pack<type::tuple<A0, A1, A2, A3, A4, A5> > {
12653     template <typename Stream>
12654     msgpack::packer<Stream>& operator()(
12655         msgpack::packer<Stream>& o,
12656         const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
12657         o.pack_array(6);
12658 
12659         o.pack(v.template get<0>());
12660         o.pack(v.template get<1>());
12661         o.pack(v.template get<2>());
12662         o.pack(v.template get<3>());
12663         o.pack(v.template get<4>());
12664         o.pack(v.template get<5>());
12665         return o;
12666     }
12667 };
12668 
12669 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
12670 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
12671     template <typename Stream>
12672     msgpack::packer<Stream>& operator()(
12673         msgpack::packer<Stream>& o,
12674         const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
12675         o.pack_array(7);
12676 
12677         o.pack(v.template get<0>());
12678         o.pack(v.template get<1>());
12679         o.pack(v.template get<2>());
12680         o.pack(v.template get<3>());
12681         o.pack(v.template get<4>());
12682         o.pack(v.template get<5>());
12683         o.pack(v.template get<6>());
12684         return o;
12685     }
12686 };
12687 
12688 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
12689 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
12690     template <typename Stream>
12691     msgpack::packer<Stream>& operator()(
12692         msgpack::packer<Stream>& o,
12693         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
12694         o.pack_array(8);
12695 
12696         o.pack(v.template get<0>());
12697         o.pack(v.template get<1>());
12698         o.pack(v.template get<2>());
12699         o.pack(v.template get<3>());
12700         o.pack(v.template get<4>());
12701         o.pack(v.template get<5>());
12702         o.pack(v.template get<6>());
12703         o.pack(v.template get<7>());
12704         return o;
12705     }
12706 };
12707 
12708 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
12709 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
12710     template <typename Stream>
12711     msgpack::packer<Stream>& operator()(
12712         msgpack::packer<Stream>& o,
12713         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
12714         o.pack_array(9);
12715 
12716         o.pack(v.template get<0>());
12717         o.pack(v.template get<1>());
12718         o.pack(v.template get<2>());
12719         o.pack(v.template get<3>());
12720         o.pack(v.template get<4>());
12721         o.pack(v.template get<5>());
12722         o.pack(v.template get<6>());
12723         o.pack(v.template get<7>());
12724         o.pack(v.template get<8>());
12725         return o;
12726     }
12727 };
12728 
12729 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
12730 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
12731     template <typename Stream>
12732     msgpack::packer<Stream>& operator()(
12733         msgpack::packer<Stream>& o,
12734         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
12735         o.pack_array(10);
12736 
12737         o.pack(v.template get<0>());
12738         o.pack(v.template get<1>());
12739         o.pack(v.template get<2>());
12740         o.pack(v.template get<3>());
12741         o.pack(v.template get<4>());
12742         o.pack(v.template get<5>());
12743         o.pack(v.template get<6>());
12744         o.pack(v.template get<7>());
12745         o.pack(v.template get<8>());
12746         o.pack(v.template get<9>());
12747         return o;
12748     }
12749 };
12750 
12751 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
12752 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> > {
12753     template <typename Stream>
12754     msgpack::packer<Stream>& operator()(
12755         msgpack::packer<Stream>& o,
12756         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
12757         o.pack_array(11);
12758 
12759         o.pack(v.template get<0>());
12760         o.pack(v.template get<1>());
12761         o.pack(v.template get<2>());
12762         o.pack(v.template get<3>());
12763         o.pack(v.template get<4>());
12764         o.pack(v.template get<5>());
12765         o.pack(v.template get<6>());
12766         o.pack(v.template get<7>());
12767         o.pack(v.template get<8>());
12768         o.pack(v.template get<9>());
12769         o.pack(v.template get<10>());
12770         return o;
12771     }
12772 };
12773 
12774 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
12775 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> > {
12776     template <typename Stream>
12777     msgpack::packer<Stream>& operator()(
12778         msgpack::packer<Stream>& o,
12779         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
12780         o.pack_array(12);
12781 
12782         o.pack(v.template get<0>());
12783         o.pack(v.template get<1>());
12784         o.pack(v.template get<2>());
12785         o.pack(v.template get<3>());
12786         o.pack(v.template get<4>());
12787         o.pack(v.template get<5>());
12788         o.pack(v.template get<6>());
12789         o.pack(v.template get<7>());
12790         o.pack(v.template get<8>());
12791         o.pack(v.template get<9>());
12792         o.pack(v.template get<10>());
12793         o.pack(v.template get<11>());
12794         return o;
12795     }
12796 };
12797 
12798 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
12799 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> > {
12800     template <typename Stream>
12801     msgpack::packer<Stream>& operator()(
12802         msgpack::packer<Stream>& o,
12803         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
12804         o.pack_array(13);
12805 
12806         o.pack(v.template get<0>());
12807         o.pack(v.template get<1>());
12808         o.pack(v.template get<2>());
12809         o.pack(v.template get<3>());
12810         o.pack(v.template get<4>());
12811         o.pack(v.template get<5>());
12812         o.pack(v.template get<6>());
12813         o.pack(v.template get<7>());
12814         o.pack(v.template get<8>());
12815         o.pack(v.template get<9>());
12816         o.pack(v.template get<10>());
12817         o.pack(v.template get<11>());
12818         o.pack(v.template get<12>());
12819         return o;
12820     }
12821 };
12822 
12823 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
12824 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> > {
12825     template <typename Stream>
12826     msgpack::packer<Stream>& operator()(
12827         msgpack::packer<Stream>& o,
12828         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
12829         o.pack_array(14);
12830 
12831         o.pack(v.template get<0>());
12832         o.pack(v.template get<1>());
12833         o.pack(v.template get<2>());
12834         o.pack(v.template get<3>());
12835         o.pack(v.template get<4>());
12836         o.pack(v.template get<5>());
12837         o.pack(v.template get<6>());
12838         o.pack(v.template get<7>());
12839         o.pack(v.template get<8>());
12840         o.pack(v.template get<9>());
12841         o.pack(v.template get<10>());
12842         o.pack(v.template get<11>());
12843         o.pack(v.template get<12>());
12844         o.pack(v.template get<13>());
12845         return o;
12846     }
12847 };
12848 
12849 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
12850 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> > {
12851     template <typename Stream>
12852     msgpack::packer<Stream>& operator()(
12853         msgpack::packer<Stream>& o,
12854         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
12855         o.pack_array(15);
12856 
12857         o.pack(v.template get<0>());
12858         o.pack(v.template get<1>());
12859         o.pack(v.template get<2>());
12860         o.pack(v.template get<3>());
12861         o.pack(v.template get<4>());
12862         o.pack(v.template get<5>());
12863         o.pack(v.template get<6>());
12864         o.pack(v.template get<7>());
12865         o.pack(v.template get<8>());
12866         o.pack(v.template get<9>());
12867         o.pack(v.template get<10>());
12868         o.pack(v.template get<11>());
12869         o.pack(v.template get<12>());
12870         o.pack(v.template get<13>());
12871         o.pack(v.template get<14>());
12872         return o;
12873     }
12874 };
12875 
12876 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
12877 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> > {
12878     template <typename Stream>
12879     msgpack::packer<Stream>& operator()(
12880         msgpack::packer<Stream>& o,
12881         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
12882         o.pack_array(16);
12883 
12884         o.pack(v.template get<0>());
12885         o.pack(v.template get<1>());
12886         o.pack(v.template get<2>());
12887         o.pack(v.template get<3>());
12888         o.pack(v.template get<4>());
12889         o.pack(v.template get<5>());
12890         o.pack(v.template get<6>());
12891         o.pack(v.template get<7>());
12892         o.pack(v.template get<8>());
12893         o.pack(v.template get<9>());
12894         o.pack(v.template get<10>());
12895         o.pack(v.template get<11>());
12896         o.pack(v.template get<12>());
12897         o.pack(v.template get<13>());
12898         o.pack(v.template get<14>());
12899         o.pack(v.template get<15>());
12900         return o;
12901     }
12902 };
12903 
12904 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
12905 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> > {
12906     template <typename Stream>
12907     msgpack::packer<Stream>& operator()(
12908         msgpack::packer<Stream>& o,
12909         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
12910         o.pack_array(17);
12911 
12912         o.pack(v.template get<0>());
12913         o.pack(v.template get<1>());
12914         o.pack(v.template get<2>());
12915         o.pack(v.template get<3>());
12916         o.pack(v.template get<4>());
12917         o.pack(v.template get<5>());
12918         o.pack(v.template get<6>());
12919         o.pack(v.template get<7>());
12920         o.pack(v.template get<8>());
12921         o.pack(v.template get<9>());
12922         o.pack(v.template get<10>());
12923         o.pack(v.template get<11>());
12924         o.pack(v.template get<12>());
12925         o.pack(v.template get<13>());
12926         o.pack(v.template get<14>());
12927         o.pack(v.template get<15>());
12928         o.pack(v.template get<16>());
12929         return o;
12930     }
12931 };
12932 
12933 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
12934 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> > {
12935     template <typename Stream>
12936     msgpack::packer<Stream>& operator()(
12937         msgpack::packer<Stream>& o,
12938         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
12939         o.pack_array(18);
12940 
12941         o.pack(v.template get<0>());
12942         o.pack(v.template get<1>());
12943         o.pack(v.template get<2>());
12944         o.pack(v.template get<3>());
12945         o.pack(v.template get<4>());
12946         o.pack(v.template get<5>());
12947         o.pack(v.template get<6>());
12948         o.pack(v.template get<7>());
12949         o.pack(v.template get<8>());
12950         o.pack(v.template get<9>());
12951         o.pack(v.template get<10>());
12952         o.pack(v.template get<11>());
12953         o.pack(v.template get<12>());
12954         o.pack(v.template get<13>());
12955         o.pack(v.template get<14>());
12956         o.pack(v.template get<15>());
12957         o.pack(v.template get<16>());
12958         o.pack(v.template get<17>());
12959         return o;
12960     }
12961 };
12962 
12963 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
12964 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> > {
12965     template <typename Stream>
12966     msgpack::packer<Stream>& operator()(
12967         msgpack::packer<Stream>& o,
12968         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
12969         o.pack_array(19);
12970 
12971         o.pack(v.template get<0>());
12972         o.pack(v.template get<1>());
12973         o.pack(v.template get<2>());
12974         o.pack(v.template get<3>());
12975         o.pack(v.template get<4>());
12976         o.pack(v.template get<5>());
12977         o.pack(v.template get<6>());
12978         o.pack(v.template get<7>());
12979         o.pack(v.template get<8>());
12980         o.pack(v.template get<9>());
12981         o.pack(v.template get<10>());
12982         o.pack(v.template get<11>());
12983         o.pack(v.template get<12>());
12984         o.pack(v.template get<13>());
12985         o.pack(v.template get<14>());
12986         o.pack(v.template get<15>());
12987         o.pack(v.template get<16>());
12988         o.pack(v.template get<17>());
12989         o.pack(v.template get<18>());
12990         return o;
12991     }
12992 };
12993 
12994 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
12995 struct pack<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> > {
12996     template <typename Stream>
12997     msgpack::packer<Stream>& operator()(
12998         msgpack::packer<Stream>& o,
12999         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 {
13000         o.pack_array(20);
13001 
13002         o.pack(v.template get<0>());
13003         o.pack(v.template get<1>());
13004         o.pack(v.template get<2>());
13005         o.pack(v.template get<3>());
13006         o.pack(v.template get<4>());
13007         o.pack(v.template get<5>());
13008         o.pack(v.template get<6>());
13009         o.pack(v.template get<7>());
13010         o.pack(v.template get<8>());
13011         o.pack(v.template get<9>());
13012         o.pack(v.template get<10>());
13013         o.pack(v.template get<11>());
13014         o.pack(v.template get<12>());
13015         o.pack(v.template get<13>());
13016         o.pack(v.template get<14>());
13017         o.pack(v.template get<15>());
13018         o.pack(v.template get<16>());
13019         o.pack(v.template get<17>());
13020         o.pack(v.template get<18>());
13021         o.pack(v.template get<19>());
13022         return o;
13023     }
13024 };
13025 
13026 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
13027 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> > {
13028     template <typename Stream>
13029     msgpack::packer<Stream>& operator()(
13030         msgpack::packer<Stream>& o,
13031         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 {
13032         o.pack_array(21);
13033 
13034         o.pack(v.template get<0>());
13035         o.pack(v.template get<1>());
13036         o.pack(v.template get<2>());
13037         o.pack(v.template get<3>());
13038         o.pack(v.template get<4>());
13039         o.pack(v.template get<5>());
13040         o.pack(v.template get<6>());
13041         o.pack(v.template get<7>());
13042         o.pack(v.template get<8>());
13043         o.pack(v.template get<9>());
13044         o.pack(v.template get<10>());
13045         o.pack(v.template get<11>());
13046         o.pack(v.template get<12>());
13047         o.pack(v.template get<13>());
13048         o.pack(v.template get<14>());
13049         o.pack(v.template get<15>());
13050         o.pack(v.template get<16>());
13051         o.pack(v.template get<17>());
13052         o.pack(v.template get<18>());
13053         o.pack(v.template get<19>());
13054         o.pack(v.template get<20>());
13055         return o;
13056     }
13057 };
13058 
13059 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
13060 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> > {
13061     template <typename Stream>
13062     msgpack::packer<Stream>& operator()(
13063         msgpack::packer<Stream>& o,
13064         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 {
13065         o.pack_array(22);
13066 
13067         o.pack(v.template get<0>());
13068         o.pack(v.template get<1>());
13069         o.pack(v.template get<2>());
13070         o.pack(v.template get<3>());
13071         o.pack(v.template get<4>());
13072         o.pack(v.template get<5>());
13073         o.pack(v.template get<6>());
13074         o.pack(v.template get<7>());
13075         o.pack(v.template get<8>());
13076         o.pack(v.template get<9>());
13077         o.pack(v.template get<10>());
13078         o.pack(v.template get<11>());
13079         o.pack(v.template get<12>());
13080         o.pack(v.template get<13>());
13081         o.pack(v.template get<14>());
13082         o.pack(v.template get<15>());
13083         o.pack(v.template get<16>());
13084         o.pack(v.template get<17>());
13085         o.pack(v.template get<18>());
13086         o.pack(v.template get<19>());
13087         o.pack(v.template get<20>());
13088         o.pack(v.template get<21>());
13089         return o;
13090     }
13091 };
13092 
13093 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
13094 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> > {
13095     template <typename Stream>
13096     msgpack::packer<Stream>& operator()(
13097         msgpack::packer<Stream>& o,
13098         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 {
13099         o.pack_array(23);
13100 
13101         o.pack(v.template get<0>());
13102         o.pack(v.template get<1>());
13103         o.pack(v.template get<2>());
13104         o.pack(v.template get<3>());
13105         o.pack(v.template get<4>());
13106         o.pack(v.template get<5>());
13107         o.pack(v.template get<6>());
13108         o.pack(v.template get<7>());
13109         o.pack(v.template get<8>());
13110         o.pack(v.template get<9>());
13111         o.pack(v.template get<10>());
13112         o.pack(v.template get<11>());
13113         o.pack(v.template get<12>());
13114         o.pack(v.template get<13>());
13115         o.pack(v.template get<14>());
13116         o.pack(v.template get<15>());
13117         o.pack(v.template get<16>());
13118         o.pack(v.template get<17>());
13119         o.pack(v.template get<18>());
13120         o.pack(v.template get<19>());
13121         o.pack(v.template get<20>());
13122         o.pack(v.template get<21>());
13123         o.pack(v.template get<22>());
13124         return o;
13125     }
13126 };
13127 
13128 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
13129 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> > {
13130     template <typename Stream>
13131     msgpack::packer<Stream>& operator()(
13132         msgpack::packer<Stream>& o,
13133         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 {
13134         o.pack_array(24);
13135 
13136         o.pack(v.template get<0>());
13137         o.pack(v.template get<1>());
13138         o.pack(v.template get<2>());
13139         o.pack(v.template get<3>());
13140         o.pack(v.template get<4>());
13141         o.pack(v.template get<5>());
13142         o.pack(v.template get<6>());
13143         o.pack(v.template get<7>());
13144         o.pack(v.template get<8>());
13145         o.pack(v.template get<9>());
13146         o.pack(v.template get<10>());
13147         o.pack(v.template get<11>());
13148         o.pack(v.template get<12>());
13149         o.pack(v.template get<13>());
13150         o.pack(v.template get<14>());
13151         o.pack(v.template get<15>());
13152         o.pack(v.template get<16>());
13153         o.pack(v.template get<17>());
13154         o.pack(v.template get<18>());
13155         o.pack(v.template get<19>());
13156         o.pack(v.template get<20>());
13157         o.pack(v.template get<21>());
13158         o.pack(v.template get<22>());
13159         o.pack(v.template get<23>());
13160         return o;
13161     }
13162 };
13163 
13164 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
13165 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> > {
13166     template <typename Stream>
13167     msgpack::packer<Stream>& operator()(
13168         msgpack::packer<Stream>& o,
13169         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 {
13170         o.pack_array(25);
13171 
13172         o.pack(v.template get<0>());
13173         o.pack(v.template get<1>());
13174         o.pack(v.template get<2>());
13175         o.pack(v.template get<3>());
13176         o.pack(v.template get<4>());
13177         o.pack(v.template get<5>());
13178         o.pack(v.template get<6>());
13179         o.pack(v.template get<7>());
13180         o.pack(v.template get<8>());
13181         o.pack(v.template get<9>());
13182         o.pack(v.template get<10>());
13183         o.pack(v.template get<11>());
13184         o.pack(v.template get<12>());
13185         o.pack(v.template get<13>());
13186         o.pack(v.template get<14>());
13187         o.pack(v.template get<15>());
13188         o.pack(v.template get<16>());
13189         o.pack(v.template get<17>());
13190         o.pack(v.template get<18>());
13191         o.pack(v.template get<19>());
13192         o.pack(v.template get<20>());
13193         o.pack(v.template get<21>());
13194         o.pack(v.template get<22>());
13195         o.pack(v.template get<23>());
13196         o.pack(v.template get<24>());
13197         return o;
13198     }
13199 };
13200 
13201 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
13202 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> > {
13203     template <typename Stream>
13204     msgpack::packer<Stream>& operator()(
13205         msgpack::packer<Stream>& o,
13206         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 {
13207         o.pack_array(26);
13208 
13209         o.pack(v.template get<0>());
13210         o.pack(v.template get<1>());
13211         o.pack(v.template get<2>());
13212         o.pack(v.template get<3>());
13213         o.pack(v.template get<4>());
13214         o.pack(v.template get<5>());
13215         o.pack(v.template get<6>());
13216         o.pack(v.template get<7>());
13217         o.pack(v.template get<8>());
13218         o.pack(v.template get<9>());
13219         o.pack(v.template get<10>());
13220         o.pack(v.template get<11>());
13221         o.pack(v.template get<12>());
13222         o.pack(v.template get<13>());
13223         o.pack(v.template get<14>());
13224         o.pack(v.template get<15>());
13225         o.pack(v.template get<16>());
13226         o.pack(v.template get<17>());
13227         o.pack(v.template get<18>());
13228         o.pack(v.template get<19>());
13229         o.pack(v.template get<20>());
13230         o.pack(v.template get<21>());
13231         o.pack(v.template get<22>());
13232         o.pack(v.template get<23>());
13233         o.pack(v.template get<24>());
13234         o.pack(v.template get<25>());
13235         return o;
13236     }
13237 };
13238 
13239 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
13240 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> > {
13241     template <typename Stream>
13242     msgpack::packer<Stream>& operator()(
13243         msgpack::packer<Stream>& o,
13244         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 {
13245         o.pack_array(27);
13246 
13247         o.pack(v.template get<0>());
13248         o.pack(v.template get<1>());
13249         o.pack(v.template get<2>());
13250         o.pack(v.template get<3>());
13251         o.pack(v.template get<4>());
13252         o.pack(v.template get<5>());
13253         o.pack(v.template get<6>());
13254         o.pack(v.template get<7>());
13255         o.pack(v.template get<8>());
13256         o.pack(v.template get<9>());
13257         o.pack(v.template get<10>());
13258         o.pack(v.template get<11>());
13259         o.pack(v.template get<12>());
13260         o.pack(v.template get<13>());
13261         o.pack(v.template get<14>());
13262         o.pack(v.template get<15>());
13263         o.pack(v.template get<16>());
13264         o.pack(v.template get<17>());
13265         o.pack(v.template get<18>());
13266         o.pack(v.template get<19>());
13267         o.pack(v.template get<20>());
13268         o.pack(v.template get<21>());
13269         o.pack(v.template get<22>());
13270         o.pack(v.template get<23>());
13271         o.pack(v.template get<24>());
13272         o.pack(v.template get<25>());
13273         o.pack(v.template get<26>());
13274         return o;
13275     }
13276 };
13277 
13278 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
13279 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> > {
13280     template <typename Stream>
13281     msgpack::packer<Stream>& operator()(
13282         msgpack::packer<Stream>& o,
13283         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 {
13284         o.pack_array(28);
13285 
13286         o.pack(v.template get<0>());
13287         o.pack(v.template get<1>());
13288         o.pack(v.template get<2>());
13289         o.pack(v.template get<3>());
13290         o.pack(v.template get<4>());
13291         o.pack(v.template get<5>());
13292         o.pack(v.template get<6>());
13293         o.pack(v.template get<7>());
13294         o.pack(v.template get<8>());
13295         o.pack(v.template get<9>());
13296         o.pack(v.template get<10>());
13297         o.pack(v.template get<11>());
13298         o.pack(v.template get<12>());
13299         o.pack(v.template get<13>());
13300         o.pack(v.template get<14>());
13301         o.pack(v.template get<15>());
13302         o.pack(v.template get<16>());
13303         o.pack(v.template get<17>());
13304         o.pack(v.template get<18>());
13305         o.pack(v.template get<19>());
13306         o.pack(v.template get<20>());
13307         o.pack(v.template get<21>());
13308         o.pack(v.template get<22>());
13309         o.pack(v.template get<23>());
13310         o.pack(v.template get<24>());
13311         o.pack(v.template get<25>());
13312         o.pack(v.template get<26>());
13313         o.pack(v.template get<27>());
13314         return o;
13315     }
13316 };
13317 
13318 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
13319 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> > {
13320     template <typename Stream>
13321     msgpack::packer<Stream>& operator()(
13322         msgpack::packer<Stream>& o,
13323         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 {
13324         o.pack_array(29);
13325 
13326         o.pack(v.template get<0>());
13327         o.pack(v.template get<1>());
13328         o.pack(v.template get<2>());
13329         o.pack(v.template get<3>());
13330         o.pack(v.template get<4>());
13331         o.pack(v.template get<5>());
13332         o.pack(v.template get<6>());
13333         o.pack(v.template get<7>());
13334         o.pack(v.template get<8>());
13335         o.pack(v.template get<9>());
13336         o.pack(v.template get<10>());
13337         o.pack(v.template get<11>());
13338         o.pack(v.template get<12>());
13339         o.pack(v.template get<13>());
13340         o.pack(v.template get<14>());
13341         o.pack(v.template get<15>());
13342         o.pack(v.template get<16>());
13343         o.pack(v.template get<17>());
13344         o.pack(v.template get<18>());
13345         o.pack(v.template get<19>());
13346         o.pack(v.template get<20>());
13347         o.pack(v.template get<21>());
13348         o.pack(v.template get<22>());
13349         o.pack(v.template get<23>());
13350         o.pack(v.template get<24>());
13351         o.pack(v.template get<25>());
13352         o.pack(v.template get<26>());
13353         o.pack(v.template get<27>());
13354         o.pack(v.template get<28>());
13355         return o;
13356     }
13357 };
13358 
13359 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
13360 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> > {
13361     template <typename Stream>
13362     msgpack::packer<Stream>& operator()(
13363         msgpack::packer<Stream>& o,
13364         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 {
13365         o.pack_array(30);
13366 
13367         o.pack(v.template get<0>());
13368         o.pack(v.template get<1>());
13369         o.pack(v.template get<2>());
13370         o.pack(v.template get<3>());
13371         o.pack(v.template get<4>());
13372         o.pack(v.template get<5>());
13373         o.pack(v.template get<6>());
13374         o.pack(v.template get<7>());
13375         o.pack(v.template get<8>());
13376         o.pack(v.template get<9>());
13377         o.pack(v.template get<10>());
13378         o.pack(v.template get<11>());
13379         o.pack(v.template get<12>());
13380         o.pack(v.template get<13>());
13381         o.pack(v.template get<14>());
13382         o.pack(v.template get<15>());
13383         o.pack(v.template get<16>());
13384         o.pack(v.template get<17>());
13385         o.pack(v.template get<18>());
13386         o.pack(v.template get<19>());
13387         o.pack(v.template get<20>());
13388         o.pack(v.template get<21>());
13389         o.pack(v.template get<22>());
13390         o.pack(v.template get<23>());
13391         o.pack(v.template get<24>());
13392         o.pack(v.template get<25>());
13393         o.pack(v.template get<26>());
13394         o.pack(v.template get<27>());
13395         o.pack(v.template get<28>());
13396         o.pack(v.template get<29>());
13397         return o;
13398     }
13399 };
13400 
13401 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
13402 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> > {
13403     template <typename Stream>
13404     msgpack::packer<Stream>& operator()(
13405         msgpack::packer<Stream>& o,
13406         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 {
13407         o.pack_array(31);
13408 
13409         o.pack(v.template get<0>());
13410         o.pack(v.template get<1>());
13411         o.pack(v.template get<2>());
13412         o.pack(v.template get<3>());
13413         o.pack(v.template get<4>());
13414         o.pack(v.template get<5>());
13415         o.pack(v.template get<6>());
13416         o.pack(v.template get<7>());
13417         o.pack(v.template get<8>());
13418         o.pack(v.template get<9>());
13419         o.pack(v.template get<10>());
13420         o.pack(v.template get<11>());
13421         o.pack(v.template get<12>());
13422         o.pack(v.template get<13>());
13423         o.pack(v.template get<14>());
13424         o.pack(v.template get<15>());
13425         o.pack(v.template get<16>());
13426         o.pack(v.template get<17>());
13427         o.pack(v.template get<18>());
13428         o.pack(v.template get<19>());
13429         o.pack(v.template get<20>());
13430         o.pack(v.template get<21>());
13431         o.pack(v.template get<22>());
13432         o.pack(v.template get<23>());
13433         o.pack(v.template get<24>());
13434         o.pack(v.template get<25>());
13435         o.pack(v.template get<26>());
13436         o.pack(v.template get<27>());
13437         o.pack(v.template get<28>());
13438         o.pack(v.template get<29>());
13439         o.pack(v.template get<30>());
13440         return o;
13441     }
13442 };
13443 
13444 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
13445 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> > {
13446     template <typename Stream>
13447     msgpack::packer<Stream>& operator()(
13448         msgpack::packer<Stream>& 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, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& v) const {
13450         o.pack_array(32);
13451 
13452         o.pack(v.template get<0>());
13453         o.pack(v.template get<1>());
13454         o.pack(v.template get<2>());
13455         o.pack(v.template get<3>());
13456         o.pack(v.template get<4>());
13457         o.pack(v.template get<5>());
13458         o.pack(v.template get<6>());
13459         o.pack(v.template get<7>());
13460         o.pack(v.template get<8>());
13461         o.pack(v.template get<9>());
13462         o.pack(v.template get<10>());
13463         o.pack(v.template get<11>());
13464         o.pack(v.template get<12>());
13465         o.pack(v.template get<13>());
13466         o.pack(v.template get<14>());
13467         o.pack(v.template get<15>());
13468         o.pack(v.template get<16>());
13469         o.pack(v.template get<17>());
13470         o.pack(v.template get<18>());
13471         o.pack(v.template get<19>());
13472         o.pack(v.template get<20>());
13473         o.pack(v.template get<21>());
13474         o.pack(v.template get<22>());
13475         o.pack(v.template get<23>());
13476         o.pack(v.template get<24>());
13477         o.pack(v.template get<25>());
13478         o.pack(v.template get<26>());
13479         o.pack(v.template get<27>());
13480         o.pack(v.template get<28>());
13481         o.pack(v.template get<29>());
13482         o.pack(v.template get<30>());
13483         o.pack(v.template get<31>());
13484         return o;
13485     }
13486 };
13487 
13488 /// @endcond
13489 
13490 template <>
13491 struct object_with_zone<type::tuple<> > {
13492     void operator()(
13493         msgpack::object::with_zone& o,
13494         const type::tuple<>&) const {
13495         o.type = msgpack::type::ARRAY;
13496         o.via.array.ptr = MSGPACK_NULLPTR;
13497         o.via.array.size = 0;
13498     }
13499 };
13500 
13501 /// @cond
13502 
13503 template <typename A0>
13504 struct object_with_zone<type::tuple<A0> > {
13505     void operator()(
13506         msgpack::object::with_zone& o,
13507         const type::tuple<A0>& v) const {
13508         o.type = msgpack::type::ARRAY;
13509         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*1, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13510         o.via.array.size = 1;
13511 
13512         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13513     }
13514 };
13515 
13516 template <typename A0, typename A1>
13517 struct object_with_zone<type::tuple<A0, A1> > {
13518     void operator()(
13519         msgpack::object::with_zone& o,
13520         const type::tuple<A0, A1>& v) const {
13521         o.type = msgpack::type::ARRAY;
13522         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13523         o.via.array.size = 2;
13524 
13525         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13526         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13527     }
13528 };
13529 
13530 template <typename A0, typename A1, typename A2>
13531 struct object_with_zone<type::tuple<A0, A1, A2> > {
13532     void operator()(
13533         msgpack::object::with_zone& o,
13534         const type::tuple<A0, A1, A2>& v) const {
13535         o.type = msgpack::type::ARRAY;
13536         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*3, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13537         o.via.array.size = 3;
13538 
13539         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13540         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13541         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13542     }
13543 };
13544 
13545 template <typename A0, typename A1, typename A2, typename A3>
13546 struct object_with_zone<type::tuple<A0, A1, A2, A3> > {
13547     void operator()(
13548         msgpack::object::with_zone& o,
13549         const type::tuple<A0, A1, A2, A3>& v) const {
13550         o.type = msgpack::type::ARRAY;
13551         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*4, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13552         o.via.array.size = 4;
13553 
13554         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13555         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13556         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13557         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13558     }
13559 };
13560 
13561 template <typename A0, typename A1, typename A2, typename A3, typename A4>
13562 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4> > {
13563     void operator()(
13564         msgpack::object::with_zone& o,
13565         const type::tuple<A0, A1, A2, A3, A4>& v) const {
13566         o.type = msgpack::type::ARRAY;
13567         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*5, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13568         o.via.array.size = 5;
13569 
13570         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13571         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13572         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13573         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13574         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13575     }
13576 };
13577 
13578 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
13579 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5> > {
13580     void operator()(
13581         msgpack::object::with_zone& o,
13582         const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
13583         o.type = msgpack::type::ARRAY;
13584         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*6, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13585         o.via.array.size = 6;
13586 
13587         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13588         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13589         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13590         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13591         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13592         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13593     }
13594 };
13595 
13596 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
13597 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
13598     void operator()(
13599         msgpack::object::with_zone& o,
13600         const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
13601         o.type = msgpack::type::ARRAY;
13602         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*7, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13603         o.via.array.size = 7;
13604 
13605         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13606         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13607         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13608         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13609         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13610         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13611         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13612     }
13613 };
13614 
13615 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
13616 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
13617     void operator()(
13618         msgpack::object::with_zone& o,
13619         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
13620         o.type = msgpack::type::ARRAY;
13621         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*8, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13622         o.via.array.size = 8;
13623 
13624         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13625         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13626         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13627         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13628         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13629         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13630         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13631         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13632     }
13633 };
13634 
13635 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
13636 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
13637     void operator()(
13638         msgpack::object::with_zone& o,
13639         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
13640         o.type = msgpack::type::ARRAY;
13641         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*9, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13642         o.via.array.size = 9;
13643 
13644         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13645         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13646         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13647         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13648         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13649         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13650         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13651         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13652         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13653     }
13654 };
13655 
13656 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
13657 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
13658     void operator()(
13659         msgpack::object::with_zone& o,
13660         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
13661         o.type = msgpack::type::ARRAY;
13662         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*10, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13663         o.via.array.size = 10;
13664 
13665         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13666         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13667         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13668         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13669         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13670         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13671         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13672         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13673         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13674         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13675     }
13676 };
13677 
13678 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
13679 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> > {
13680     void operator()(
13681         msgpack::object::with_zone& o,
13682         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
13683         o.type = msgpack::type::ARRAY;
13684         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*11, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13685         o.via.array.size = 11;
13686 
13687         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13688         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13689         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13690         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13691         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13692         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13693         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13694         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13695         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13696         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13697         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13698     }
13699 };
13700 
13701 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
13702 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> > {
13703     void operator()(
13704         msgpack::object::with_zone& o,
13705         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
13706         o.type = msgpack::type::ARRAY;
13707         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*12, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13708         o.via.array.size = 12;
13709 
13710         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13711         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13712         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13713         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13714         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13715         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13716         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13717         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13718         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13719         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13720         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13721         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13722     }
13723 };
13724 
13725 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
13726 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> > {
13727     void operator()(
13728         msgpack::object::with_zone& o,
13729         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
13730         o.type = msgpack::type::ARRAY;
13731         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*13, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13732         o.via.array.size = 13;
13733 
13734         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13735         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13736         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13737         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13738         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13739         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13740         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13741         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13742         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13743         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13744         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13745         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13746         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13747     }
13748 };
13749 
13750 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
13751 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> > {
13752     void operator()(
13753         msgpack::object::with_zone& o,
13754         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
13755         o.type = msgpack::type::ARRAY;
13756         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*14, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13757         o.via.array.size = 14;
13758 
13759         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13760         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13761         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13762         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13763         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13764         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13765         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13766         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13767         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13768         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13769         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13770         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13771         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13772         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13773     }
13774 };
13775 
13776 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
13777 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> > {
13778     void operator()(
13779         msgpack::object::with_zone& o,
13780         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
13781         o.type = msgpack::type::ARRAY;
13782         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*15, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13783         o.via.array.size = 15;
13784 
13785         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13786         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13787         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13788         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13789         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13790         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13791         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13792         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13793         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13794         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13795         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13796         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13797         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13798         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13799         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13800     }
13801 };
13802 
13803 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
13804 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> > {
13805     void operator()(
13806         msgpack::object::with_zone& o,
13807         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
13808         o.type = msgpack::type::ARRAY;
13809         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*16, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13810         o.via.array.size = 16;
13811 
13812         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13813         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13814         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13815         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13816         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13817         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13818         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13819         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13820         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13821         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13822         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13823         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13824         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13825         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13826         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13827         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
13828     }
13829 };
13830 
13831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
13832 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> > {
13833     void operator()(
13834         msgpack::object::with_zone& o,
13835         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
13836         o.type = msgpack::type::ARRAY;
13837         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*17, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13838         o.via.array.size = 17;
13839 
13840         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13841         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13842         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13843         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13844         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13845         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13846         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13847         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13848         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13849         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13850         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13851         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13852         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13853         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13854         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13855         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
13856         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
13857     }
13858 };
13859 
13860 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
13861 struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> > {
13862     void operator()(
13863         msgpack::object::with_zone& o,
13864         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
13865         o.type = msgpack::type::ARRAY;
13866         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*18, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13867         o.via.array.size = 18;
13868 
13869         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13870         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13871         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13872         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13873         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13874         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13875         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13876         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13877         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13878         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13879         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13880         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13881         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13882         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13883         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13884         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
13885         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
13886         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
13887     }
13888 };
13889 
13890 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
13891 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> > {
13892     void operator()(
13893         msgpack::object::with_zone& o,
13894         const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
13895         o.type = msgpack::type::ARRAY;
13896         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*19, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13897         o.via.array.size = 19;
13898 
13899         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13900         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13901         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13902         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13903         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13904         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13905         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13906         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13907         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13908         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13909         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13910         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13911         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13912         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13913         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13914         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
13915         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
13916         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
13917         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
13918     }
13919 };
13920 
13921 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
13922 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> > {
13923     void operator()(
13924         msgpack::object::with_zone& o,
13925         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 {
13926         o.type = msgpack::type::ARRAY;
13927         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*20, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13928         o.via.array.size = 20;
13929 
13930         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13931         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13932         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13933         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13934         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13935         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13936         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13937         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13938         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13939         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13940         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13941         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13942         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13943         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13944         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13945         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
13946         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
13947         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
13948         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
13949         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
13950     }
13951 };
13952 
13953 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
13954 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> > {
13955     void operator()(
13956         msgpack::object::with_zone& o,
13957         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 {
13958         o.type = msgpack::type::ARRAY;
13959         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*21, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13960         o.via.array.size = 21;
13961 
13962         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13963         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13964         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13965         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13966         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
13967         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
13968         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
13969         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
13970         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
13971         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
13972         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
13973         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
13974         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
13975         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
13976         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
13977         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
13978         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
13979         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
13980         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
13981         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
13982         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
13983     }
13984 };
13985 
13986 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
13987 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> > {
13988     void operator()(
13989         msgpack::object::with_zone& o,
13990         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 {
13991         o.type = msgpack::type::ARRAY;
13992         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*22, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
13993         o.via.array.size = 22;
13994 
13995         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
13996         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
13997         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
13998         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
13999         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14000         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14001         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14002         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14003         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14004         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14005         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14006         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14007         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14008         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14009         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14010         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14011         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14012         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14013         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14014         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14015         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14016         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14017     }
14018 };
14019 
14020 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
14021 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> > {
14022     void operator()(
14023         msgpack::object::with_zone& o,
14024         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 {
14025         o.type = msgpack::type::ARRAY;
14026         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*23, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14027         o.via.array.size = 23;
14028 
14029         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14030         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14031         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14032         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14033         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14034         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14035         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14036         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14037         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14038         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14039         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14040         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14041         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14042         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14043         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14044         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14045         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14046         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14047         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14048         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14049         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14050         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14051         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14052     }
14053 };
14054 
14055 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
14056 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> > {
14057     void operator()(
14058         msgpack::object::with_zone& o,
14059         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 {
14060         o.type = msgpack::type::ARRAY;
14061         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*24, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14062         o.via.array.size = 24;
14063 
14064         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14065         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14066         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14067         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14068         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14069         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14070         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14071         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14072         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14073         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14074         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14075         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14076         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14077         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14078         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14079         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14080         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14081         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14082         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14083         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14084         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14085         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14086         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14087         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14088     }
14089 };
14090 
14091 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
14092 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> > {
14093     void operator()(
14094         msgpack::object::with_zone& o,
14095         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 {
14096         o.type = msgpack::type::ARRAY;
14097         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*25, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14098         o.via.array.size = 25;
14099 
14100         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14101         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14102         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14103         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14104         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14105         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14106         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14107         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14108         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14109         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14110         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14111         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14112         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14113         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14114         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14115         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14116         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14117         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14118         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14119         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14120         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14121         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14122         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14123         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14124         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14125     }
14126 };
14127 
14128 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
14129 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> > {
14130     void operator()(
14131         msgpack::object::with_zone& o,
14132         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 {
14133         o.type = msgpack::type::ARRAY;
14134         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*26, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14135         o.via.array.size = 26;
14136 
14137         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14138         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14139         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14140         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14141         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14142         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14143         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14144         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14145         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14146         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14147         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14148         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14149         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14150         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14151         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14152         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14153         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14154         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14155         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14156         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14157         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14158         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14159         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14160         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14161         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14162         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14163     }
14164 };
14165 
14166 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
14167 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> > {
14168     void operator()(
14169         msgpack::object::with_zone& o,
14170         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 {
14171         o.type = msgpack::type::ARRAY;
14172         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*27, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14173         o.via.array.size = 27;
14174 
14175         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14176         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14177         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14178         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14179         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14180         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14181         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14182         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14183         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14184         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14185         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14186         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14187         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14188         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14189         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14190         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14191         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14192         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14193         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14194         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14195         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14196         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14197         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14198         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14199         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14200         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14201         o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone);
14202     }
14203 };
14204 
14205 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
14206 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> > {
14207     void operator()(
14208         msgpack::object::with_zone& o,
14209         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 {
14210         o.type = msgpack::type::ARRAY;
14211         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*28, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14212         o.via.array.size = 28;
14213 
14214         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14215         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14216         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14217         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14218         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14219         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14220         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14221         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14222         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14223         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14224         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14225         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14226         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14227         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14228         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14229         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14230         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14231         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14232         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14233         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14234         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14235         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14236         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14237         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14238         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14239         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14240         o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone);
14241         o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone);
14242     }
14243 };
14244 
14245 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
14246 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> > {
14247     void operator()(
14248         msgpack::object::with_zone& o,
14249         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 {
14250         o.type = msgpack::type::ARRAY;
14251         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*29, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14252         o.via.array.size = 29;
14253 
14254         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14255         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14256         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14257         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14258         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14259         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14260         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14261         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14262         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14263         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14264         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14265         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14266         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14267         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14268         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14269         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14270         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14271         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14272         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14273         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14274         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14275         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14276         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14277         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14278         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14279         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14280         o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone);
14281         o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone);
14282         o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone);
14283     }
14284 };
14285 
14286 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
14287 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> > {
14288     void operator()(
14289         msgpack::object::with_zone& o,
14290         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 {
14291         o.type = msgpack::type::ARRAY;
14292         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*30, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14293         o.via.array.size = 30;
14294 
14295         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14296         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14297         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14298         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14299         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14300         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14301         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14302         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14303         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14304         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14305         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14306         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14307         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14308         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14309         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14310         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14311         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14312         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14313         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14314         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14315         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14316         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14317         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14318         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14319         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14320         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14321         o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone);
14322         o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone);
14323         o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone);
14324         o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone);
14325     }
14326 };
14327 
14328 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
14329 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> > {
14330     void operator()(
14331         msgpack::object::with_zone& o,
14332         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 {
14333         o.type = msgpack::type::ARRAY;
14334         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*31, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14335         o.via.array.size = 31;
14336 
14337         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14338         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14339         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14340         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14341         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14342         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14343         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14344         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14345         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14346         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14347         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14348         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14349         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14350         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14351         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14352         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14353         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14354         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14355         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14356         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14357         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14358         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14359         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14360         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14361         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14362         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14363         o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone);
14364         o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone);
14365         o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone);
14366         o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone);
14367         o.via.array.ptr[30] = msgpack::object(v.template get<30>(), o.zone);
14368     }
14369 };
14370 
14371 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, 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>
14372 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> > {
14373     void operator()(
14374         msgpack::object::with_zone& o,
14375         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 {
14376         o.type = msgpack::type::ARRAY;
14377         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*32, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
14378         o.via.array.size = 32;
14379 
14380         o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
14381         o.via.array.ptr[1] = msgpack::object(v.template get<1>(), o.zone);
14382         o.via.array.ptr[2] = msgpack::object(v.template get<2>(), o.zone);
14383         o.via.array.ptr[3] = msgpack::object(v.template get<3>(), o.zone);
14384         o.via.array.ptr[4] = msgpack::object(v.template get<4>(), o.zone);
14385         o.via.array.ptr[5] = msgpack::object(v.template get<5>(), o.zone);
14386         o.via.array.ptr[6] = msgpack::object(v.template get<6>(), o.zone);
14387         o.via.array.ptr[7] = msgpack::object(v.template get<7>(), o.zone);
14388         o.via.array.ptr[8] = msgpack::object(v.template get<8>(), o.zone);
14389         o.via.array.ptr[9] = msgpack::object(v.template get<9>(), o.zone);
14390         o.via.array.ptr[10] = msgpack::object(v.template get<10>(), o.zone);
14391         o.via.array.ptr[11] = msgpack::object(v.template get<11>(), o.zone);
14392         o.via.array.ptr[12] = msgpack::object(v.template get<12>(), o.zone);
14393         o.via.array.ptr[13] = msgpack::object(v.template get<13>(), o.zone);
14394         o.via.array.ptr[14] = msgpack::object(v.template get<14>(), o.zone);
14395         o.via.array.ptr[15] = msgpack::object(v.template get<15>(), o.zone);
14396         o.via.array.ptr[16] = msgpack::object(v.template get<16>(), o.zone);
14397         o.via.array.ptr[17] = msgpack::object(v.template get<17>(), o.zone);
14398         o.via.array.ptr[18] = msgpack::object(v.template get<18>(), o.zone);
14399         o.via.array.ptr[19] = msgpack::object(v.template get<19>(), o.zone);
14400         o.via.array.ptr[20] = msgpack::object(v.template get<20>(), o.zone);
14401         o.via.array.ptr[21] = msgpack::object(v.template get<21>(), o.zone);
14402         o.via.array.ptr[22] = msgpack::object(v.template get<22>(), o.zone);
14403         o.via.array.ptr[23] = msgpack::object(v.template get<23>(), o.zone);
14404         o.via.array.ptr[24] = msgpack::object(v.template get<24>(), o.zone);
14405         o.via.array.ptr[25] = msgpack::object(v.template get<25>(), o.zone);
14406         o.via.array.ptr[26] = msgpack::object(v.template get<26>(), o.zone);
14407         o.via.array.ptr[27] = msgpack::object(v.template get<27>(), o.zone);
14408         o.via.array.ptr[28] = msgpack::object(v.template get<28>(), o.zone);
14409         o.via.array.ptr[29] = msgpack::object(v.template get<29>(), o.zone);
14410         o.via.array.ptr[30] = msgpack::object(v.template get<30>(), o.zone);
14411         o.via.array.ptr[31] = msgpack::object(v.template get<31>(), o.zone);
14412     }
14413 };
14414 
14415 /// @endcond
14416 
14417 } // namespace adaptor
14418 
14419 /// @cond
14420 }  // MSGPACK_API_VERSION_NAMESPACE(v1)
14421 /// @endcond
14422 
14423 }  // namespace msgpack
14424 
14425 #endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
14426