MessagePack for C++
cpp03_msgpack_tuple.hpp
Go to the documentation of this file.
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 
14 
15 namespace msgpack {
16 
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;
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 
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 
9163 
9164 template <>
9165 struct tuple<> {
9166  tuple() {}
9167  tuple(msgpack::object const& o) { o.convert(*this); }
9169  std::size_t size() const { return 0; }
9170 };
9171 
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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() {}
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 
10407 
10409 {
10410  return tuple<>();
10411 }
10412 
10414 
10415 template <typename A0>
10416 tuple<A0> make_tuple(A0 const& a0)
10417 {
10418  return tuple<A0>(a0);
10419 }
10420 
10421 template <typename A0, typename A1>
10422 tuple<A0, A1> make_tuple(A0 const& a0, A1 const& a1)
10423 {
10424  return tuple<A0, A1>(a0, a1);
10425 }
10426 
10427 template <typename A0, typename A1, typename A2>
10428 tuple<A0, A1, A2> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2)
10429 {
10430  return tuple<A0, A1, A2>(a0, a1, a2);
10431 }
10432 
10433 template <typename A0, typename A1, typename A2, typename A3>
10434 tuple<A0, A1, A2, A3> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& 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 tuple<A0, A1, A2, A3, A4> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& 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 tuple<A0, A1, A2, A3, A4, A5> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> make_tuple(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& 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 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& 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 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& 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 tuple<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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& 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 tuple<A0, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& 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 tuple<A0, A1, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& 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 tuple<A0, A1, A2, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& a25, A26 const& 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 tuple<A0, A1, A2, A3, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& a25, A26 const& a26, A27 const& 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 tuple<A0, A1, A2, A3, A4, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& a25, A26 const& a26, A27 const& a27, A28 const& 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 tuple<A0, A1, A2, A3, A4, A5, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& a25, A26 const& a26, A27 const& a27, A28 const& a28, A29 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& a25, A26 const& a26, A27 const& a27, A28 const& a28, A29 const& a29, A30 const& 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 tuple<A0, A1, A2, A3, A4, A5, A6, A7, 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(A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, A8 const& a8, A9 const& a9, A10 const& a10, A11 const& a11, A12 const& a12, A13 const& a13, A14 const& a14, A15 const& a15, A16 const& a16, A17 const& a17, A18 const& a18, A19 const& a19, A20 const& a20, A21 const& a21, A22 const& a22, A23 const& a23, A24 const& a24, A25 const& a25, A26 const& a26, A27 const& a27, A28 const& a28, A29 const& a29, A30 const& a30, A31 const& 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 
10608 
10609 } // namespace type
10610 
10611 namespace adaptor {
10612 
10613 template <>
10614 struct convert<type::tuple<> > {
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 
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 
12562 
12563 template <>
12564 struct pack<type::tuple<> > {
12565  template <typename Stream>
12568  const type::tuple<>&) const {
12569  o.pack_array(0);
12570  return o;
12571  }
12572 };
12573 
12575 
12576 template <typename A0>
12577 struct pack<type::tuple<A0> > {
12578  template <typename Stream>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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 
13489 
13490 template <>
13491 struct object_with_zone<type::tuple<> > {
13494  const type::tuple<>&) const {
13497  o.via.array.size = 0;
13498  }
13499 };
13500 
13502 
13503 template <typename A0>
13504 struct object_with_zone<type::tuple<A0> > {
13505  void operator()(
13507  const type::tuple<A0>& v) const {
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()(
13520  const type::tuple<A0, A1>& v) const {
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()(
13534  const type::tuple<A0, A1, A2>& v) const {
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()(
13549  const type::tuple<A0, A1, A2, A3>& v) const {
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()(
13565  const type::tuple<A0, A1, A2, A3, A4>& v) const {
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()(
13582  const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
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()(
13600  const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
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()(
13619  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
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()(
13639  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
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()(
13660  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
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()(
13682  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
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()(
13705  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
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()(
13729  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
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()(
13754  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
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()(
13780  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
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()(
13807  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
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()(
13835  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
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()(
13864  const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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()(
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 {
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 
14416 
14417 } // namespace adaptor
14418 
14420 } // MSGPACK_API_VERSION_NAMESPACE(v1)
14422 
14423 } // namespace msgpack
14424 
14425 #endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
The class template that supports continuous packing.
Definition: pack.hpp:33
packer< Stream > & pack_array(uint32_t n)
Packing array header and size.
Definition: pack.hpp:1195
packer< Stream > & pack(const T &v)
Packing function template.
Definition: cpp11_msgpack_tuple_decl.hpp:35
tuple_element< I, base >::type & get() &noexcept
Definition: cpp11_msgpack_tuple_decl.hpp:66
tuple(tuple const &)=default
std::size_t size() const
Definition: cpp11_msgpack_tuple_decl.hpp:76
Definition: object_fwd.hpp:231
void * allocate_align(size_t size, size_t align=MSGPACK_ZONE_ALIGN)
Definition: cpp03_zone.hpp:256
tuple make_tuple()
Definition: cpp03_msgpack_tuple.hpp:10408
@ ARRAY
Definition: object_fwd_decl.hpp:40
Definition: adaptor_base.hpp:15
void pack(msgpack::packer< Stream > &o, const T &v)
Definition: object.hpp:1180
void convert(T &v, msgpack::object const &o)
Definition: object.hpp:1173
msgpack::object const & operator()(msgpack::object const &o, type::tuple<> &) const
Definition: cpp03_msgpack_tuple.hpp:10615
Definition: adaptor_base.hpp:27
msgpack::object const & operator()(msgpack::object const &o, T &v) const
Definition: object.hpp:641
void operator()(msgpack::object::with_zone &o, const type::tuple<> &) const
Definition: cpp03_msgpack_tuple.hpp:13492
Definition: adaptor_base.hpp:43
void operator()(msgpack::object::with_zone &o, T const &v) const
Definition: object.hpp:657
msgpack::packer< Stream > & operator()(msgpack::packer< Stream > &o, const type::tuple<> &) const
Definition: cpp03_msgpack_tuple.hpp:12566
Definition: adaptor_base.hpp:32
msgpack::packer< Stream > & operator()(msgpack::packer< Stream > &o, T const &v) const
Definition: object.hpp:650
Definition: object.hpp:35
msgpack::zone & zone
Definition: object.hpp:37
uint32_t size
Definition: object_fwd.hpp:23
msgpack::object * ptr
Definition: object_fwd.hpp:24
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:75
union_type via
Definition: object_fwd.hpp:93
msgpack::enable_if< !msgpack::is_array< T >::value &&!msgpack::is_pointer< T >::value, T & >::type convert(T &v) const
Convert the object.
Definition: object.hpp:1071
msgpack::type::object_type type
Definition: object_fwd.hpp:92
Definition: cpp03_msgpack_tuple.hpp:9165
tuple(msgpack::object const &o)
Definition: cpp03_msgpack_tuple.hpp:9167
std::size_t size() const
Definition: cpp03_msgpack_tuple.hpp:9169
tuple()
Definition: cpp03_msgpack_tuple.hpp:9166
tuple value_type
Definition: cpp03_msgpack_tuple.hpp:9168
Definition: cpp03_msgpack_tuple_decl.hpp:35
T & value_type
Definition: cpp03_msgpack_tuple.hpp:39
T & transparent_reference
Definition: cpp03_msgpack_tuple.hpp:42
T & reference
Definition: cpp03_msgpack_tuple.hpp:40
T type
Definition: cpp03_msgpack_tuple.hpp:38
const T & const_reference
Definition: cpp03_msgpack_tuple.hpp:41
const T & const_reference
Definition: cpp03_msgpack_tuple.hpp:50
T & reference
Definition: cpp03_msgpack_tuple.hpp:49
T & value_type
Definition: cpp03_msgpack_tuple.hpp:48
const T & transparent_reference
Definition: cpp03_msgpack_tuple.hpp:51
T type
Definition: cpp03_msgpack_tuple.hpp:47
Definition: cpp03_msgpack_tuple.hpp:28
const T & transparent_reference
Definition: cpp03_msgpack_tuple.hpp:33
T type
Definition: cpp03_msgpack_tuple.hpp:29
const T & const_reference
Definition: cpp03_msgpack_tuple.hpp:32
T & reference
Definition: cpp03_msgpack_tuple.hpp:31
T value_type
Definition: cpp03_msgpack_tuple.hpp:30
msgpack::object_array array
Definition: object_fwd.hpp:85
#define MSGPACK_NULLPTR
Definition: cpp_config_decl.hpp:85
#define MSGPACK_ZONE_ALIGNOF(type)
Definition: cpp03_zone_decl.hpp:30
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:66