From 95374a7878e5288f6db286c58227511aa7581390 Mon Sep 17 00:00:00 2001 From: Zach Laine Date: Sat, 30 Dec 2023 02:58:08 -0600 Subject: [PATCH] Add initial sketch of struct -> tuple assignment machinery. Partially addresses #28. --- .../parser/detail/aggr_to_tuple_generated.hpp | 2448 +++++++++++++++++ include/boost/parser/tuple.hpp | 40 +- misc/generate_aggr_to_tuple.py | 58 + 3 files changed, 2539 insertions(+), 7 deletions(-) create mode 100644 include/boost/parser/detail/aggr_to_tuple_generated.hpp create mode 100755 misc/generate_aggr_to_tuple.py diff --git a/include/boost/parser/detail/aggr_to_tuple_generated.hpp b/include/boost/parser/detail/aggr_to_tuple_generated.hpp new file mode 100644 index 00000000..a0e03e32 --- /dev/null +++ b/include/boost/parser/detail/aggr_to_tuple_generated.hpp @@ -0,0 +1,2448 @@ +// Copyright (c) 2023 T. Zachary Laine +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Warning: This header is auto-generated (see misc/generate_aggr_to_tuple.py). +// The lack of include guards is intentional. + +namespace boost::parser::detail { + + +template<> struct aggregate_to_tuple_impl<1> { +template static constexpr auto call(T x) { +auto & [ + _01 +] = x; +return parser::tuple( + std::move(_01) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<2> { +template static constexpr auto call(T x) { +auto & [ + _01, _02 +] = x; +return parser::tuple( + std::move(_01), std::move(_02) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<3> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<4> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<5> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<6> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<7> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<8> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<9> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<10> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<11> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<12> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<13> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<14> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<15> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<16> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<17> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<18> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<19> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<20> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<21> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<22> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<23> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<24> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<25> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<26> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<27> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<28> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<29> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<30> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<31> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<32> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<33> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<34> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<35> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<36> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<37> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<38> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<39> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<40> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<41> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<42> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<43> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<44> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<45> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<46> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<47> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<48> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<49> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<50> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<51> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<52> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<53> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<54> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<55> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<56> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<57> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<58> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<59> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<60> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<61> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<62> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<63> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<64> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<65> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<66> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<67> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<68> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<69> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<70> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<71> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<72> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<73> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<74> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<75> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<76> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<77> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<78> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<79> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<80> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<81> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<82> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<83> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<84> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<85> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<86> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<87> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<88> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<89> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<90> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<91> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<92> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<93> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<94> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<95> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e, _5f +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e), std::move(_5f) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<96> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e, _5f, _60 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e), std::move(_5f), + std::move(_60) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<97> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e, _5f, _60, _61 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e), std::move(_5f), + std::move(_60), std::move(_61) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<98> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e, _5f, _60, _61, _62 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e), std::move(_5f), + std::move(_60), std::move(_61), std::move(_62) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<99> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e, _5f, _60, _61, _62, _63 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e), std::move(_5f), + std::move(_60), std::move(_61), std::move(_62), std::move(_63) +); +} +}; + + +template<> struct aggregate_to_tuple_impl<100> { +template static constexpr auto call(T x) { +auto & [ + _01, _02, _03, _04, _05, _06, _07, _08, _09, _0a, _0b, _0c, _0d, _0e, _0f, + _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _1a, _1b, _1c, _1d, _1e, + _1f, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _2a, _2b, _2c, _2d, + _2e, _2f, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _3a, _3b, _3c, + _3d, _3e, _3f, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _4a, _4b, + _4c, _4d, _4e, _4f, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _5a, + _5b, _5c, _5d, _5e, _5f, _60, _61, _62, _63, _64 +] = x; +return parser::tuple( + std::move(_01), std::move(_02), std::move(_03), std::move(_04), std::move(_05), + std::move(_06), std::move(_07), std::move(_08), std::move(_09), std::move(_0a), + std::move(_0b), std::move(_0c), std::move(_0d), std::move(_0e), std::move(_0f), + std::move(_10), std::move(_11), std::move(_12), std::move(_13), std::move(_14), + std::move(_15), std::move(_16), std::move(_17), std::move(_18), std::move(_19), + std::move(_1a), std::move(_1b), std::move(_1c), std::move(_1d), std::move(_1e), + std::move(_1f), std::move(_20), std::move(_21), std::move(_22), std::move(_23), + std::move(_24), std::move(_25), std::move(_26), std::move(_27), std::move(_28), + std::move(_29), std::move(_2a), std::move(_2b), std::move(_2c), std::move(_2d), + std::move(_2e), std::move(_2f), std::move(_30), std::move(_31), std::move(_32), + std::move(_33), std::move(_34), std::move(_35), std::move(_36), std::move(_37), + std::move(_38), std::move(_39), std::move(_3a), std::move(_3b), std::move(_3c), + std::move(_3d), std::move(_3e), std::move(_3f), std::move(_40), std::move(_41), + std::move(_42), std::move(_43), std::move(_44), std::move(_45), std::move(_46), + std::move(_47), std::move(_48), std::move(_49), std::move(_4a), std::move(_4b), + std::move(_4c), std::move(_4d), std::move(_4e), std::move(_4f), std::move(_50), + std::move(_51), std::move(_52), std::move(_53), std::move(_54), std::move(_55), + std::move(_56), std::move(_57), std::move(_58), std::move(_59), std::move(_5a), + std::move(_5b), std::move(_5c), std::move(_5d), std::move(_5e), std::move(_5f), + std::move(_60), std::move(_61), std::move(_62), std::move(_63), std::move(_64) +); +} +}; + + +} + diff --git a/include/boost/parser/tuple.hpp b/include/boost/parser/tuple.hpp index 94bdfb7a..7163860c 100644 --- a/include/boost/parser/tuple.hpp +++ b/include/boost/parser/tuple.hpp @@ -189,7 +189,7 @@ namespace boost { namespace parser { -> decltype(T{whatever{Is}...}, ce_int<1>{}); template - using constructible_expr = decltype(constructible_expr_impl( + using constructible_expr = decltype(detail::constructible_expr_impl( std::make_integer_sequence())); template @@ -206,8 +206,10 @@ namespace boost { namespace parser { // Fortunately, we don't care -- we never assign from tuples of size // 1. template - constexpr int struct_arity_v = - struct_arity_impl(std::make_integer_sequence()) - 1; + constexpr int + struct_arity_v = detail::struct_arity_impl( + std::make_integer_sequence()) - + 1; template constexpr int tuple_size_ = -1; @@ -224,18 +226,42 @@ namespace boost { namespace parser { } template - using initialize_from_tuple_expr = decltype(initialize_from_tuple( - std::declval(), - std::declval(), - std::make_integer_sequence>())); + using initialize_from_tuple_expr = + decltype(detail::initialize_from_tuple( + std::declval(), + std::declval(), + std::make_integer_sequence>())); template constexpr bool is_struct_assignable_v = struct_arity_v == tuple_size_ ? is_detected_v : false; + + template + struct aggregate_to_tuple_impl + { + template + static constexpr auto call(T x) + { + static_assert( + sizeof(T) && false, + "It looks like you're trying to use a struct larger than " + "the limit."); + } + }; + + template + constexpr auto aggregate_to_tuple(T x) + { + static_assert(!std::is_union_v); + return aggregate_to_tuple_impl>::call( + std::move(x)); + } } }} +#include + #endif diff --git a/misc/generate_aggr_to_tuple.py b/misc/generate_aggr_to_tuple.py new file mode 100755 index 00000000..9a33dd93 --- /dev/null +++ b/misc/generate_aggr_to_tuple.py @@ -0,0 +1,58 @@ +#!/usr/bin/python3 + +# Copyright (c) 2023 T. Zachary Laine +# +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +print('''// Copyright (c) 2023 T. Zachary Laine +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Warning: This header is auto-generated (see misc/generate_aggr_to_tuple.py). +// The lack of include guards is intentional. + +namespace boost::parser::detail { + +''') + +specializations = 100 +bindings = [] + +def bindings_str(fn, max_bindings_on_a_line): + num_bindings = len(bindings) + mapped = map(fn, bindings) + retval = '' + for i in range(int(num_bindings / max_bindings_on_a_line) + 1): + lo = i * max_bindings_on_a_line + if num_bindings <= lo: + return retval + hi = min(lo + max_bindings_on_a_line, num_bindings) + retval += ' ' + ', '.join(map(fn, bindings[lo:hi])) + if hi < num_bindings: + retval += ',' + retval += '\n' + return retval + +def destructuring_str(): + return f'''auto & [ +{bindings_str(lambda x: x, 15)}] = x;''' + +def initializers_str(): + return f'''return parser::tuple( +{bindings_str(lambda x: f'std::move({x})', 5)});''' + +for i in range(1, specializations + 1): + bindings.append('_{:02x}'.format(i)) + + print(f'''template<> struct aggregate_to_tuple_impl<{i}> {{ +template static constexpr auto call(T x) {{''') + print(destructuring_str()) + print(initializers_str()) + print('''} +}; + +''') + +print('}\n')