1 // 2 // MessagePack for C++ static resolution routine 3 // 4 // Copyright (C) 2008-2009 FURUHASHI Sadayuki 5 // 6 // Licensed under the Apache License, Version 2.0 (the "License"); 7 // you may not use this file except in compliance with the License. 8 // You may obtain a copy of the License at 9 // 10 // http://www.apache.org/licenses/LICENSE-2.0 11 // 12 // Unless required by applicable law or agreed to in writing, software 13 // distributed under the License is distributed on an "AS IS" BASIS, 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 // See the License for the specific language governing permissions and 16 // limitations under the License. 17 // 18 #ifndef MSGPACK_TYPE_TUPLE_HPP__ 19 #define MSGPACK_TYPE_TUPLE_HPP__ 20 21 #include "msgpack/object.hpp" 22 23 namespace msgpack { 24 25 namespace type { 26 27 // FIXME operator== 28 // FIXME operator!= 29 30 31 template <typename A0 = void, typename A1 = void, typename A2 = void, typename A3 = void, typename A4 = void, typename A5 = void, typename A6 = void, typename A7 = void, typename A8 = void, typename A9 = void, typename A10 = void, typename A11 = void, typename A12 = void, typename A13 = void, typename A14 = void, typename A15 = void, typename A16 = void, typename A17 = void, typename A18 = void, typename A19 = void, typename A20 = void, typename A21 = void, typename A22 = void, typename A23 = void, typename A24 = void, typename A25 = void, typename A26 = void, typename A27 = void, typename A28 = void, typename A29 = void, typename A30 = void, typename A31 = void, typename A32 = void> 32 struct tuple; 33 34 template <typename Tuple, int N> 35 struct tuple_element; 36 37 template <typename Tuple, int N> 38 struct const_tuple_element; 39 40 template <typename T> 41 struct tuple_type { 42 typedef T type; 43 typedef T value_type; 44 typedef T& reference; 45 typedef const T& const_reference; 46 typedef const T& transparent_reference; 47 }; 48 49 template <typename T> 50 struct tuple_type<T&> { 51 typedef T type; 52 typedef T& value_type; 53 typedef T& reference; 54 typedef const T& const_reference; 55 typedef T& transparent_reference; 56 }; 57 58 template <typename T> 59 struct tuple_type<const T&> { 60 typedef T type; 61 typedef T& value_type; 62 typedef T& reference; 63 typedef const T& const_reference; 64 typedef const T& transparent_reference; 65 }; 66 67 68 69 template <typename A0> 70 struct tuple_element<tuple<A0>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element71 tuple_element(tuple<A0>& x) : _x(x.a0) {} getmsgpack::type::tuple_element72 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element73 typename tuple_type<A0>::const_reference get() const { return _x; } 74 private: 75 typename tuple_type<A0>::reference _x; 76 }; 77 78 79 80 template <typename A0, typename A1> 81 struct tuple_element<tuple<A0, A1>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element82 tuple_element(tuple<A0, A1 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element83 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element84 typename tuple_type<A0>::const_reference get() const { return _x; } 85 private: 86 typename tuple_type<A0>::reference _x; 87 }; 88 89 template <typename A0, typename A1> 90 struct tuple_element<tuple<A0, A1>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element91 tuple_element(tuple<A0, A1 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element92 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element93 typename tuple_type<A1>::const_reference get() const { return _x; } 94 private: 95 typename tuple_type<A1>::reference _x; 96 }; 97 98 99 100 template <typename A0, typename A1, typename A2> 101 struct tuple_element<tuple<A0, A1, A2>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element102 tuple_element(tuple<A0, A1 , A2 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element103 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element104 typename tuple_type<A0>::const_reference get() const { return _x; } 105 private: 106 typename tuple_type<A0>::reference _x; 107 }; 108 109 template <typename A0, typename A1, typename A2> 110 struct tuple_element<tuple<A0, A1, A2>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element111 tuple_element(tuple<A0, A1 , A2 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element112 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element113 typename tuple_type<A1>::const_reference get() const { return _x; } 114 private: 115 typename tuple_type<A1>::reference _x; 116 }; 117 118 template <typename A0, typename A1, typename A2> 119 struct tuple_element<tuple<A0, A1, A2>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element120 tuple_element(tuple<A0, A1 , A2 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element121 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element122 typename tuple_type<A2>::const_reference get() const { return _x; } 123 private: 124 typename tuple_type<A2>::reference _x; 125 }; 126 127 128 129 template <typename A0, typename A1, typename A2, typename A3> 130 struct tuple_element<tuple<A0, A1, A2, A3>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element131 tuple_element(tuple<A0, A1 , A2 , A3 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element132 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element133 typename tuple_type<A0>::const_reference get() const { return _x; } 134 private: 135 typename tuple_type<A0>::reference _x; 136 }; 137 138 template <typename A0, typename A1, typename A2, typename A3> 139 struct tuple_element<tuple<A0, A1, A2, A3>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element140 tuple_element(tuple<A0, A1 , A2 , A3 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element141 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element142 typename tuple_type<A1>::const_reference get() const { return _x; } 143 private: 144 typename tuple_type<A1>::reference _x; 145 }; 146 147 template <typename A0, typename A1, typename A2, typename A3> 148 struct tuple_element<tuple<A0, A1, A2, A3>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element149 tuple_element(tuple<A0, A1 , A2 , A3 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element150 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element151 typename tuple_type<A2>::const_reference get() const { return _x; } 152 private: 153 typename tuple_type<A2>::reference _x; 154 }; 155 156 template <typename A0, typename A1, typename A2, typename A3> 157 struct tuple_element<tuple<A0, A1, A2, A3>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element158 tuple_element(tuple<A0, A1 , A2 , A3 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element159 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element160 typename tuple_type<A3>::const_reference get() const { return _x; } 161 private: 162 typename tuple_type<A3>::reference _x; 163 }; 164 165 166 167 template <typename A0, typename A1, typename A2, typename A3, typename A4> 168 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element169 tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element170 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element171 typename tuple_type<A0>::const_reference get() const { return _x; } 172 private: 173 typename tuple_type<A0>::reference _x; 174 }; 175 176 template <typename A0, typename A1, typename A2, typename A3, typename A4> 177 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element178 tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element179 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element180 typename tuple_type<A1>::const_reference get() const { return _x; } 181 private: 182 typename tuple_type<A1>::reference _x; 183 }; 184 185 template <typename A0, typename A1, typename A2, typename A3, typename A4> 186 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element187 tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element188 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element189 typename tuple_type<A2>::const_reference get() const { return _x; } 190 private: 191 typename tuple_type<A2>::reference _x; 192 }; 193 194 template <typename A0, typename A1, typename A2, typename A3, typename A4> 195 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element196 tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element197 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element198 typename tuple_type<A3>::const_reference get() const { return _x; } 199 private: 200 typename tuple_type<A3>::reference _x; 201 }; 202 203 template <typename A0, typename A1, typename A2, typename A3, typename A4> 204 struct tuple_element<tuple<A0, A1, A2, A3, A4>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element205 tuple_element(tuple<A0, A1 , A2 , A3 , A4 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element206 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element207 typename tuple_type<A4>::const_reference get() const { return _x; } 208 private: 209 typename tuple_type<A4>::reference _x; 210 }; 211 212 213 214 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5> 215 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element216 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element217 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element218 typename tuple_type<A0>::const_reference get() const { return _x; } 219 private: 220 typename tuple_type<A0>::reference _x; 221 }; 222 223 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5> 224 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element225 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element226 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element227 typename tuple_type<A1>::const_reference get() const { return _x; } 228 private: 229 typename tuple_type<A1>::reference _x; 230 }; 231 232 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5> 233 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element234 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element235 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element236 typename tuple_type<A2>::const_reference get() const { return _x; } 237 private: 238 typename tuple_type<A2>::reference _x; 239 }; 240 241 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5> 242 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element243 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element244 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element245 typename tuple_type<A3>::const_reference get() const { return _x; } 246 private: 247 typename tuple_type<A3>::reference _x; 248 }; 249 250 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5> 251 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element252 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element253 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element254 typename tuple_type<A4>::const_reference get() const { return _x; } 255 private: 256 typename tuple_type<A4>::reference _x; 257 }; 258 259 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5> 260 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element261 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element262 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element263 typename tuple_type<A5>::const_reference get() const { return _x; } 264 private: 265 typename tuple_type<A5>::reference _x; 266 }; 267 268 269 270 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 271 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element272 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element273 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element274 typename tuple_type<A0>::const_reference get() const { return _x; } 275 private: 276 typename tuple_type<A0>::reference _x; 277 }; 278 279 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 280 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element281 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element282 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element283 typename tuple_type<A1>::const_reference get() const { return _x; } 284 private: 285 typename tuple_type<A1>::reference _x; 286 }; 287 288 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 289 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element290 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element291 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element292 typename tuple_type<A2>::const_reference get() const { return _x; } 293 private: 294 typename tuple_type<A2>::reference _x; 295 }; 296 297 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 298 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element299 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element300 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element301 typename tuple_type<A3>::const_reference get() const { return _x; } 302 private: 303 typename tuple_type<A3>::reference _x; 304 }; 305 306 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 307 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element308 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element309 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element310 typename tuple_type<A4>::const_reference get() const { return _x; } 311 private: 312 typename tuple_type<A4>::reference _x; 313 }; 314 315 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 316 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element317 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element318 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element319 typename tuple_type<A5>::const_reference get() const { return _x; } 320 private: 321 typename tuple_type<A5>::reference _x; 322 }; 323 324 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6> 325 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element326 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element327 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element328 typename tuple_type<A6>::const_reference get() const { return _x; } 329 private: 330 typename tuple_type<A6>::reference _x; 331 }; 332 333 334 335 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 336 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element337 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element338 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element339 typename tuple_type<A0>::const_reference get() const { return _x; } 340 private: 341 typename tuple_type<A0>::reference _x; 342 }; 343 344 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 345 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element346 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element347 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element348 typename tuple_type<A1>::const_reference get() const { return _x; } 349 private: 350 typename tuple_type<A1>::reference _x; 351 }; 352 353 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 354 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element355 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element356 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element357 typename tuple_type<A2>::const_reference get() const { return _x; } 358 private: 359 typename tuple_type<A2>::reference _x; 360 }; 361 362 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 363 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element364 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element365 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element366 typename tuple_type<A3>::const_reference get() const { return _x; } 367 private: 368 typename tuple_type<A3>::reference _x; 369 }; 370 371 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 372 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element373 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element374 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element375 typename tuple_type<A4>::const_reference get() const { return _x; } 376 private: 377 typename tuple_type<A4>::reference _x; 378 }; 379 380 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 381 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element382 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element383 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element384 typename tuple_type<A5>::const_reference get() const { return _x; } 385 private: 386 typename tuple_type<A5>::reference _x; 387 }; 388 389 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 390 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element391 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element392 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element393 typename tuple_type<A6>::const_reference get() const { return _x; } 394 private: 395 typename tuple_type<A6>::reference _x; 396 }; 397 398 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7> 399 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element400 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element401 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element402 typename tuple_type<A7>::const_reference get() const { return _x; } 403 private: 404 typename tuple_type<A7>::reference _x; 405 }; 406 407 408 409 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 410 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element411 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element412 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element413 typename tuple_type<A0>::const_reference get() const { return _x; } 414 private: 415 typename tuple_type<A0>::reference _x; 416 }; 417 418 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 419 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element420 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element421 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element422 typename tuple_type<A1>::const_reference get() const { return _x; } 423 private: 424 typename tuple_type<A1>::reference _x; 425 }; 426 427 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 428 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element429 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element430 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element431 typename tuple_type<A2>::const_reference get() const { return _x; } 432 private: 433 typename tuple_type<A2>::reference _x; 434 }; 435 436 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 437 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element438 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element439 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element440 typename tuple_type<A3>::const_reference get() const { return _x; } 441 private: 442 typename tuple_type<A3>::reference _x; 443 }; 444 445 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 446 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element447 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element448 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element449 typename tuple_type<A4>::const_reference get() const { return _x; } 450 private: 451 typename tuple_type<A4>::reference _x; 452 }; 453 454 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 455 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element456 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element457 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element458 typename tuple_type<A5>::const_reference get() const { return _x; } 459 private: 460 typename tuple_type<A5>::reference _x; 461 }; 462 463 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 464 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element465 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element466 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element467 typename tuple_type<A6>::const_reference get() const { return _x; } 468 private: 469 typename tuple_type<A6>::reference _x; 470 }; 471 472 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 473 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element474 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element475 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element476 typename tuple_type<A7>::const_reference get() const { return _x; } 477 private: 478 typename tuple_type<A7>::reference _x; 479 }; 480 481 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8> 482 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element483 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element484 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element485 typename tuple_type<A8>::const_reference get() const { return _x; } 486 private: 487 typename tuple_type<A8>::reference _x; 488 }; 489 490 491 492 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 493 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element494 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element495 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element496 typename tuple_type<A0>::const_reference get() const { return _x; } 497 private: 498 typename tuple_type<A0>::reference _x; 499 }; 500 501 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 502 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element503 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element504 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element505 typename tuple_type<A1>::const_reference get() const { return _x; } 506 private: 507 typename tuple_type<A1>::reference _x; 508 }; 509 510 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 511 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element512 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element513 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element514 typename tuple_type<A2>::const_reference get() const { return _x; } 515 private: 516 typename tuple_type<A2>::reference _x; 517 }; 518 519 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 520 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element521 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element522 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element523 typename tuple_type<A3>::const_reference get() const { return _x; } 524 private: 525 typename tuple_type<A3>::reference _x; 526 }; 527 528 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 529 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element530 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element531 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element532 typename tuple_type<A4>::const_reference get() const { return _x; } 533 private: 534 typename tuple_type<A4>::reference _x; 535 }; 536 537 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 538 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element539 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element540 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element541 typename tuple_type<A5>::const_reference get() const { return _x; } 542 private: 543 typename tuple_type<A5>::reference _x; 544 }; 545 546 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 547 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element548 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element549 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element550 typename tuple_type<A6>::const_reference get() const { return _x; } 551 private: 552 typename tuple_type<A6>::reference _x; 553 }; 554 555 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 556 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element557 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element558 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element559 typename tuple_type<A7>::const_reference get() const { return _x; } 560 private: 561 typename tuple_type<A7>::reference _x; 562 }; 563 564 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 565 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element566 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element567 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element568 typename tuple_type<A8>::const_reference get() const { return _x; } 569 private: 570 typename tuple_type<A8>::reference _x; 571 }; 572 573 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9> 574 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>, 9> : tuple_type<A9> { tuple_elementmsgpack::type::tuple_element575 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 >& x) : _x(x.a9) {} getmsgpack::type::tuple_element576 typename tuple_type<A9>::reference get() { return _x; } getmsgpack::type::tuple_element577 typename tuple_type<A9>::const_reference get() const { return _x; } 578 private: 579 typename tuple_type<A9>::reference _x; 580 }; 581 582 583 584 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 585 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element586 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element587 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element588 typename tuple_type<A0>::const_reference get() const { return _x; } 589 private: 590 typename tuple_type<A0>::reference _x; 591 }; 592 593 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 594 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element595 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element596 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element597 typename tuple_type<A1>::const_reference get() const { return _x; } 598 private: 599 typename tuple_type<A1>::reference _x; 600 }; 601 602 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 603 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element604 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element605 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element606 typename tuple_type<A2>::const_reference get() const { return _x; } 607 private: 608 typename tuple_type<A2>::reference _x; 609 }; 610 611 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 612 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element613 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element614 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element615 typename tuple_type<A3>::const_reference get() const { return _x; } 616 private: 617 typename tuple_type<A3>::reference _x; 618 }; 619 620 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 621 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element622 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element623 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element624 typename tuple_type<A4>::const_reference get() const { return _x; } 625 private: 626 typename tuple_type<A4>::reference _x; 627 }; 628 629 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 630 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element631 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element632 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element633 typename tuple_type<A5>::const_reference get() const { return _x; } 634 private: 635 typename tuple_type<A5>::reference _x; 636 }; 637 638 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 639 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element640 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element641 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element642 typename tuple_type<A6>::const_reference get() const { return _x; } 643 private: 644 typename tuple_type<A6>::reference _x; 645 }; 646 647 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 648 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element649 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element650 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element651 typename tuple_type<A7>::const_reference get() const { return _x; } 652 private: 653 typename tuple_type<A7>::reference _x; 654 }; 655 656 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 657 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element658 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element659 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element660 typename tuple_type<A8>::const_reference get() const { return _x; } 661 private: 662 typename tuple_type<A8>::reference _x; 663 }; 664 665 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 666 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 9> : tuple_type<A9> { tuple_elementmsgpack::type::tuple_element667 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a9) {} getmsgpack::type::tuple_element668 typename tuple_type<A9>::reference get() { return _x; } getmsgpack::type::tuple_element669 typename tuple_type<A9>::const_reference get() const { return _x; } 670 private: 671 typename tuple_type<A9>::reference _x; 672 }; 673 674 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10> 675 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>, 10> : tuple_type<A10> { tuple_elementmsgpack::type::tuple_element676 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 >& x) : _x(x.a10) {} getmsgpack::type::tuple_element677 typename tuple_type<A10>::reference get() { return _x; } getmsgpack::type::tuple_element678 typename tuple_type<A10>::const_reference get() const { return _x; } 679 private: 680 typename tuple_type<A10>::reference _x; 681 }; 682 683 684 685 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 686 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element687 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element688 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element689 typename tuple_type<A0>::const_reference get() const { return _x; } 690 private: 691 typename tuple_type<A0>::reference _x; 692 }; 693 694 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 695 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element696 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element697 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element698 typename tuple_type<A1>::const_reference get() const { return _x; } 699 private: 700 typename tuple_type<A1>::reference _x; 701 }; 702 703 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 704 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element705 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element706 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element707 typename tuple_type<A2>::const_reference get() const { return _x; } 708 private: 709 typename tuple_type<A2>::reference _x; 710 }; 711 712 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 713 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element714 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element715 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element716 typename tuple_type<A3>::const_reference get() const { return _x; } 717 private: 718 typename tuple_type<A3>::reference _x; 719 }; 720 721 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 722 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element723 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element724 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element725 typename tuple_type<A4>::const_reference get() const { return _x; } 726 private: 727 typename tuple_type<A4>::reference _x; 728 }; 729 730 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 731 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element732 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element733 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element734 typename tuple_type<A5>::const_reference get() const { return _x; } 735 private: 736 typename tuple_type<A5>::reference _x; 737 }; 738 739 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 740 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element741 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element742 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element743 typename tuple_type<A6>::const_reference get() const { return _x; } 744 private: 745 typename tuple_type<A6>::reference _x; 746 }; 747 748 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 749 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element750 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element751 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element752 typename tuple_type<A7>::const_reference get() const { return _x; } 753 private: 754 typename tuple_type<A7>::reference _x; 755 }; 756 757 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 758 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element759 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element760 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element761 typename tuple_type<A8>::const_reference get() const { return _x; } 762 private: 763 typename tuple_type<A8>::reference _x; 764 }; 765 766 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 767 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 9> : tuple_type<A9> { tuple_elementmsgpack::type::tuple_element768 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a9) {} getmsgpack::type::tuple_element769 typename tuple_type<A9>::reference get() { return _x; } getmsgpack::type::tuple_element770 typename tuple_type<A9>::const_reference get() const { return _x; } 771 private: 772 typename tuple_type<A9>::reference _x; 773 }; 774 775 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 776 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 10> : tuple_type<A10> { tuple_elementmsgpack::type::tuple_element777 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a10) {} getmsgpack::type::tuple_element778 typename tuple_type<A10>::reference get() { return _x; } getmsgpack::type::tuple_element779 typename tuple_type<A10>::const_reference get() const { return _x; } 780 private: 781 typename tuple_type<A10>::reference _x; 782 }; 783 784 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11> 785 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>, 11> : tuple_type<A11> { tuple_elementmsgpack::type::tuple_element786 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 >& x) : _x(x.a11) {} getmsgpack::type::tuple_element787 typename tuple_type<A11>::reference get() { return _x; } getmsgpack::type::tuple_element788 typename tuple_type<A11>::const_reference get() const { return _x; } 789 private: 790 typename tuple_type<A11>::reference _x; 791 }; 792 793 794 795 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 796 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element797 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element798 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element799 typename tuple_type<A0>::const_reference get() const { return _x; } 800 private: 801 typename tuple_type<A0>::reference _x; 802 }; 803 804 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 805 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element806 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element807 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element808 typename tuple_type<A1>::const_reference get() const { return _x; } 809 private: 810 typename tuple_type<A1>::reference _x; 811 }; 812 813 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 814 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element815 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element816 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element817 typename tuple_type<A2>::const_reference get() const { return _x; } 818 private: 819 typename tuple_type<A2>::reference _x; 820 }; 821 822 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 823 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element824 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element825 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element826 typename tuple_type<A3>::const_reference get() const { return _x; } 827 private: 828 typename tuple_type<A3>::reference _x; 829 }; 830 831 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 832 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element833 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element834 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element835 typename tuple_type<A4>::const_reference get() const { return _x; } 836 private: 837 typename tuple_type<A4>::reference _x; 838 }; 839 840 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 841 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element842 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element843 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element844 typename tuple_type<A5>::const_reference get() const { return _x; } 845 private: 846 typename tuple_type<A5>::reference _x; 847 }; 848 849 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 850 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element851 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element852 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element853 typename tuple_type<A6>::const_reference get() const { return _x; } 854 private: 855 typename tuple_type<A6>::reference _x; 856 }; 857 858 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 859 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element860 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element861 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element862 typename tuple_type<A7>::const_reference get() const { return _x; } 863 private: 864 typename tuple_type<A7>::reference _x; 865 }; 866 867 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 868 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element869 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element870 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element871 typename tuple_type<A8>::const_reference get() const { return _x; } 872 private: 873 typename tuple_type<A8>::reference _x; 874 }; 875 876 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 877 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 9> : tuple_type<A9> { tuple_elementmsgpack::type::tuple_element878 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a9) {} getmsgpack::type::tuple_element879 typename tuple_type<A9>::reference get() { return _x; } getmsgpack::type::tuple_element880 typename tuple_type<A9>::const_reference get() const { return _x; } 881 private: 882 typename tuple_type<A9>::reference _x; 883 }; 884 885 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 886 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 10> : tuple_type<A10> { tuple_elementmsgpack::type::tuple_element887 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a10) {} getmsgpack::type::tuple_element888 typename tuple_type<A10>::reference get() { return _x; } getmsgpack::type::tuple_element889 typename tuple_type<A10>::const_reference get() const { return _x; } 890 private: 891 typename tuple_type<A10>::reference _x; 892 }; 893 894 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 895 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 11> : tuple_type<A11> { tuple_elementmsgpack::type::tuple_element896 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a11) {} getmsgpack::type::tuple_element897 typename tuple_type<A11>::reference get() { return _x; } getmsgpack::type::tuple_element898 typename tuple_type<A11>::const_reference get() const { return _x; } 899 private: 900 typename tuple_type<A11>::reference _x; 901 }; 902 903 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12> 904 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>, 12> : tuple_type<A12> { tuple_elementmsgpack::type::tuple_element905 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 >& x) : _x(x.a12) {} getmsgpack::type::tuple_element906 typename tuple_type<A12>::reference get() { return _x; } getmsgpack::type::tuple_element907 typename tuple_type<A12>::const_reference get() const { return _x; } 908 private: 909 typename tuple_type<A12>::reference _x; 910 }; 911 912 913 914 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 915 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element916 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element917 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element918 typename tuple_type<A0>::const_reference get() const { return _x; } 919 private: 920 typename tuple_type<A0>::reference _x; 921 }; 922 923 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 924 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element925 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element926 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element927 typename tuple_type<A1>::const_reference get() const { return _x; } 928 private: 929 typename tuple_type<A1>::reference _x; 930 }; 931 932 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 933 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element934 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element935 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element936 typename tuple_type<A2>::const_reference get() const { return _x; } 937 private: 938 typename tuple_type<A2>::reference _x; 939 }; 940 941 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 942 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element943 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element944 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element945 typename tuple_type<A3>::const_reference get() const { return _x; } 946 private: 947 typename tuple_type<A3>::reference _x; 948 }; 949 950 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 951 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element952 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element953 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element954 typename tuple_type<A4>::const_reference get() const { return _x; } 955 private: 956 typename tuple_type<A4>::reference _x; 957 }; 958 959 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 960 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element961 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element962 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element963 typename tuple_type<A5>::const_reference get() const { return _x; } 964 private: 965 typename tuple_type<A5>::reference _x; 966 }; 967 968 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 969 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element970 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element971 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element972 typename tuple_type<A6>::const_reference get() const { return _x; } 973 private: 974 typename tuple_type<A6>::reference _x; 975 }; 976 977 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 978 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element979 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element980 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element981 typename tuple_type<A7>::const_reference get() const { return _x; } 982 private: 983 typename tuple_type<A7>::reference _x; 984 }; 985 986 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 987 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element988 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element989 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element990 typename tuple_type<A8>::const_reference get() const { return _x; } 991 private: 992 typename tuple_type<A8>::reference _x; 993 }; 994 995 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 996 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 9> : tuple_type<A9> { tuple_elementmsgpack::type::tuple_element997 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a9) {} getmsgpack::type::tuple_element998 typename tuple_type<A9>::reference get() { return _x; } getmsgpack::type::tuple_element999 typename tuple_type<A9>::const_reference get() const { return _x; } 1000 private: 1001 typename tuple_type<A9>::reference _x; 1002 }; 1003 1004 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 1005 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 10> : tuple_type<A10> { tuple_elementmsgpack::type::tuple_element1006 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a10) {} getmsgpack::type::tuple_element1007 typename tuple_type<A10>::reference get() { return _x; } getmsgpack::type::tuple_element1008 typename tuple_type<A10>::const_reference get() const { return _x; } 1009 private: 1010 typename tuple_type<A10>::reference _x; 1011 }; 1012 1013 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 1014 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 11> : tuple_type<A11> { tuple_elementmsgpack::type::tuple_element1015 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a11) {} getmsgpack::type::tuple_element1016 typename tuple_type<A11>::reference get() { return _x; } getmsgpack::type::tuple_element1017 typename tuple_type<A11>::const_reference get() const { return _x; } 1018 private: 1019 typename tuple_type<A11>::reference _x; 1020 }; 1021 1022 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 1023 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 12> : tuple_type<A12> { tuple_elementmsgpack::type::tuple_element1024 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a12) {} getmsgpack::type::tuple_element1025 typename tuple_type<A12>::reference get() { return _x; } getmsgpack::type::tuple_element1026 typename tuple_type<A12>::const_reference get() const { return _x; } 1027 private: 1028 typename tuple_type<A12>::reference _x; 1029 }; 1030 1031 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13> 1032 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>, 13> : tuple_type<A13> { tuple_elementmsgpack::type::tuple_element1033 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 >& x) : _x(x.a13) {} getmsgpack::type::tuple_element1034 typename tuple_type<A13>::reference get() { return _x; } getmsgpack::type::tuple_element1035 typename tuple_type<A13>::const_reference get() const { return _x; } 1036 private: 1037 typename tuple_type<A13>::reference _x; 1038 }; 1039 1040 1041 1042 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1043 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element1044 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element1045 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element1046 typename tuple_type<A0>::const_reference get() const { return _x; } 1047 private: 1048 typename tuple_type<A0>::reference _x; 1049 }; 1050 1051 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1052 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element1053 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element1054 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element1055 typename tuple_type<A1>::const_reference get() const { return _x; } 1056 private: 1057 typename tuple_type<A1>::reference _x; 1058 }; 1059 1060 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1061 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element1062 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element1063 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element1064 typename tuple_type<A2>::const_reference get() const { return _x; } 1065 private: 1066 typename tuple_type<A2>::reference _x; 1067 }; 1068 1069 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1070 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element1071 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element1072 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element1073 typename tuple_type<A3>::const_reference get() const { return _x; } 1074 private: 1075 typename tuple_type<A3>::reference _x; 1076 }; 1077 1078 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1079 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element1080 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element1081 typename tuple_type<A4>::reference get() { return _x; } getmsgpack::type::tuple_element1082 typename tuple_type<A4>::const_reference get() const { return _x; } 1083 private: 1084 typename tuple_type<A4>::reference _x; 1085 }; 1086 1087 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1088 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 5> : tuple_type<A5> { tuple_elementmsgpack::type::tuple_element1089 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a5) {} getmsgpack::type::tuple_element1090 typename tuple_type<A5>::reference get() { return _x; } getmsgpack::type::tuple_element1091 typename tuple_type<A5>::const_reference get() const { return _x; } 1092 private: 1093 typename tuple_type<A5>::reference _x; 1094 }; 1095 1096 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1097 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 6> : tuple_type<A6> { tuple_elementmsgpack::type::tuple_element1098 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a6) {} getmsgpack::type::tuple_element1099 typename tuple_type<A6>::reference get() { return _x; } getmsgpack::type::tuple_element1100 typename tuple_type<A6>::const_reference get() const { return _x; } 1101 private: 1102 typename tuple_type<A6>::reference _x; 1103 }; 1104 1105 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1106 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 7> : tuple_type<A7> { tuple_elementmsgpack::type::tuple_element1107 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a7) {} getmsgpack::type::tuple_element1108 typename tuple_type<A7>::reference get() { return _x; } getmsgpack::type::tuple_element1109 typename tuple_type<A7>::const_reference get() const { return _x; } 1110 private: 1111 typename tuple_type<A7>::reference _x; 1112 }; 1113 1114 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1115 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 8> : tuple_type<A8> { tuple_elementmsgpack::type::tuple_element1116 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a8) {} getmsgpack::type::tuple_element1117 typename tuple_type<A8>::reference get() { return _x; } getmsgpack::type::tuple_element1118 typename tuple_type<A8>::const_reference get() const { return _x; } 1119 private: 1120 typename tuple_type<A8>::reference _x; 1121 }; 1122 1123 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1124 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 9> : tuple_type<A9> { tuple_elementmsgpack::type::tuple_element1125 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a9) {} getmsgpack::type::tuple_element1126 typename tuple_type<A9>::reference get() { return _x; } getmsgpack::type::tuple_element1127 typename tuple_type<A9>::const_reference get() const { return _x; } 1128 private: 1129 typename tuple_type<A9>::reference _x; 1130 }; 1131 1132 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1133 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 10> : tuple_type<A10> { tuple_elementmsgpack::type::tuple_element1134 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a10) {} getmsgpack::type::tuple_element1135 typename tuple_type<A10>::reference get() { return _x; } getmsgpack::type::tuple_element1136 typename tuple_type<A10>::const_reference get() const { return _x; } 1137 private: 1138 typename tuple_type<A10>::reference _x; 1139 }; 1140 1141 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1142 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 11> : tuple_type<A11> { tuple_elementmsgpack::type::tuple_element1143 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a11) {} getmsgpack::type::tuple_element1144 typename tuple_type<A11>::reference get() { return _x; } getmsgpack::type::tuple_element1145 typename tuple_type<A11>::const_reference get() const { return _x; } 1146 private: 1147 typename tuple_type<A11>::reference _x; 1148 }; 1149 1150 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1151 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 12> : tuple_type<A12> { tuple_elementmsgpack::type::tuple_element1152 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a12) {} getmsgpack::type::tuple_element1153 typename tuple_type<A12>::reference get() { return _x; } getmsgpack::type::tuple_element1154 typename tuple_type<A12>::const_reference get() const { return _x; } 1155 private: 1156 typename tuple_type<A12>::reference _x; 1157 }; 1158 1159 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1160 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 13> : tuple_type<A13> { tuple_elementmsgpack::type::tuple_element1161 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a13) {} getmsgpack::type::tuple_element1162 typename tuple_type<A13>::reference get() { return _x; } getmsgpack::type::tuple_element1163 typename tuple_type<A13>::const_reference get() const { return _x; } 1164 private: 1165 typename tuple_type<A13>::reference _x; 1166 }; 1167 1168 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14> 1169 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>, 14> : tuple_type<A14> { tuple_elementmsgpack::type::tuple_element1170 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 >& x) : _x(x.a14) {} getmsgpack::type::tuple_element1171 typename tuple_type<A14>::reference get() { return _x; } getmsgpack::type::tuple_element1172 typename tuple_type<A14>::const_reference get() const { return _x; } 1173 private: 1174 typename tuple_type<A14>::reference _x; 1175 }; 1176 1177 1178 1179 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15> 1180 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 0> : tuple_type<A0> { tuple_elementmsgpack::type::tuple_element1181 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : _x(x.a0) {} getmsgpack::type::tuple_element1182 typename tuple_type<A0>::reference get() { return _x; } getmsgpack::type::tuple_element1183 typename tuple_type<A0>::const_reference get() const { return _x; } 1184 private: 1185 typename tuple_type<A0>::reference _x; 1186 }; 1187 1188 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15> 1189 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 1> : tuple_type<A1> { tuple_elementmsgpack::type::tuple_element1190 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : _x(x.a1) {} getmsgpack::type::tuple_element1191 typename tuple_type<A1>::reference get() { return _x; } getmsgpack::type::tuple_element1192 typename tuple_type<A1>::const_reference get() const { return _x; } 1193 private: 1194 typename tuple_type<A1>::reference _x; 1195 }; 1196 1197 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15> 1198 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 2> : tuple_type<A2> { tuple_elementmsgpack::type::tuple_element1199 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : _x(x.a2) {} getmsgpack::type::tuple_element1200 typename tuple_type<A2>::reference get() { return _x; } getmsgpack::type::tuple_element1201 typename tuple_type<A2>::const_reference get() const { return _x; } 1202 private: 1203 typename tuple_type<A2>::reference _x; 1204 }; 1205 1206 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15> 1207 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 3> : tuple_type<A3> { tuple_elementmsgpack::type::tuple_element1208 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : _x(x.a3) {} getmsgpack::type::tuple_element1209 typename tuple_type<A3>::reference get() { return _x; } getmsgpack::type::tuple_element1210 typename tuple_type<A3>::const_reference get() const { return _x; } 1211 private: 1212 typename tuple_type<A3>::reference _x; 1213 }; 1214 1215 template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15> 1216 struct tuple_element<tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>, 4> : tuple_type<A4> { tuple_elementmsgpack::type::tuple_element1217 tuple_element(tuple<A0, A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 >& x) : _x(x.a4) {} getmsgpack::type::tuple_element1218