conststr 0.2.1
Loading...
Searching...
No Matches
reflect.hpp
Go to the documentation of this file.
1/* MIT License
2 *
3 * Copyright (c) 2024 Nichts Hsu
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in all
13 * copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 * SOFTWARE.
22 */
23
29#ifndef REFLECT_HPP
30#define REFLECT_HPP
31
32#include <functional>
33
34#include "conststr.hpp"
35
39namespace reflect {
44template <typename T>
45extern const T fake_obj;
46
47#if defined(__clang__)
48#pragma clang diagnostic push
49#pragma clang diagnostic ignored "-Weverything"
50#elif defined(__GNUC__)
51#pragma GCC diagnostic push
52#pragma GCC diagnostic ignored "-Wmissing-declarations"
53#endif
54
59struct any_type {
65 template <typename T>
66 [[maybe_unused]] constexpr operator T() const noexcept;
67};
68
69#if defined(__clang__)
70#pragma clang diagnostic pop
71#elif defined(__GNUC__)
72#pragma GCC diagnostic pop
73#endif
74
88template <typename T, typename... Args>
89consteval std::size_t number_of_members_impl()
90 requires(std::is_aggregate_v<std::remove_cvref_t<T>> &&
91 std::is_default_constructible_v<std::remove_cvref_t<T>>)
92{
93 using T_ = std::remove_cvref_t<T>;
94 if constexpr (requires { T_{{Args{}}..., {any_type{}}}; })
95 return number_of_members_impl<T_, Args..., any_type>();
96 else if constexpr (requires { T_{{Args{}}..., {std::nullptr_t{}}}; })
97 return number_of_members_impl<T_, Args..., std::nullptr_t>();
98 else
99 return sizeof...(Args);
100}
101
106template <typename T>
107constexpr std::size_t number_of_members = number_of_members_impl<T>();
108
117template <class T, std::size_t N = number_of_members<T>>
118constexpr decltype(auto) to_tuple(T &&t)
119 requires(N <= 128)
120{
121 if constexpr (N == 0) {
122 return std::tuple{};
123 } else if constexpr (N == 1) {
124 auto &&[p] = t;
125 return std::tie(p);
126 } else if constexpr (N == 2) {
127 auto &&[p0, p1] = t;
128 return std::tie(p0, p1);
129 } else if constexpr (N == 3) {
130 auto &&[p0, p1, p2] = t;
131 return std::tie(p0, p1, p2);
132 } else if constexpr (N == 4) {
133 auto &&[p0, p1, p2, p3] = t;
134 return std::tie(p0, p1, p2, p3);
135 } else if constexpr (N == 5) {
136 auto &&[p0, p1, p2, p3, p4] = t;
137 return std::tie(p0, p1, p2, p3, p4);
138 } else if constexpr (N == 6) {
139 auto &&[p0, p1, p2, p3, p4, p5] = t;
140 return std::tie(p0, p1, p2, p3, p4, p5);
141 } else if constexpr (N == 7) {
142 auto &&[p0, p1, p2, p3, p4, p5, p6] = t;
143 return std::tie(p0, p1, p2, p3, p4, p5, p6);
144 } else if constexpr (N == 8) {
145 auto &&[p0, p1, p2, p3, p4, p5, p6, p7] = t;
146 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7);
147 } else if constexpr (N == 9) {
148 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
149 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8);
150 } else if constexpr (N == 10) {
151 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
152 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
153 } else if constexpr (N == 11) {
154 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
155 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
156 } else if constexpr (N == 12) {
157 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
158 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
159 } else if constexpr (N == 13) {
160 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
161 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
162 } else if constexpr (N == 14) {
163 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
164 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
165 p13);
166 } else if constexpr (N == 15) {
167 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13,
168 p14] = t;
169 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
170 p13, p14);
171 } else if constexpr (N == 16) {
172 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
173 p15] = t;
174 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
175 p13, p14, p15);
176 } else if constexpr (N == 17) {
177 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
178 p15, p16] = t;
179 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
180 p13, p14, p15, p16);
181 } else if constexpr (N == 18) {
182 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
183 p15, p16, p17] = t;
184 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
185 p13, p14, p15, p16, p17);
186 } else if constexpr (N == 19) {
187 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
188 p15, p16, p17, p18] = t;
189 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
190 p13, p14, p15, p16, p17, p18);
191 } else if constexpr (N == 20) {
192 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
193 p15, p16, p17, p18, p19] = t;
194 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
195 p13, p14, p15, p16, p17, p18, p19);
196 } else if constexpr (N == 21) {
197 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
198 p15, p16, p17, p18, p19, p20] = t;
199 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
200 p13, p14, p15, p16, p17, p18, p19, p20);
201 } else if constexpr (N == 22) {
202 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
203 p15, p16, p17, p18, p19, p20, p21] = t;
204 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
205 p13, p14, p15, p16, p17, p18, p19, p20, p21);
206 } else if constexpr (N == 23) {
207 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
208 p15, p16, p17, p18, p19, p20, p21, p22] = t;
209 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
210 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22);
211 } else if constexpr (N == 24) {
212 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
213 p15, p16, p17, p18, p19, p20, p21, p22, p23] = t;
214 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
215 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23);
216 } else if constexpr (N == 25) {
217 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
218 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24] = t;
219 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
220 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
221 p24);
222 } else if constexpr (N == 26) {
223 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
224 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25] = t;
225 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
226 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
227 p24, p25);
228 } else if constexpr (N == 27) {
229 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
230 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26] = t;
231 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
232 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
233 p24, p25, p26);
234 } else if constexpr (N == 28) {
235 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
236 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26,
237 p27] = t;
238 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
239 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
240 p24, p25, p26, p27);
241 } else if constexpr (N == 29) {
242 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
243 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
244 p28] = t;
245 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
246 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
247 p24, p25, p26, p27, p28);
248 } else if constexpr (N == 30) {
249 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
250 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
251 p28, p29] = t;
252 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
253 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
254 p24, p25, p26, p27, p28, p29);
255 } else if constexpr (N == 31) {
256 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
257 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
258 p28, p29, p30] = t;
259 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
260 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
261 p24, p25, p26, p27, p28, p29, p30);
262 } else if constexpr (N == 32) {
263 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
264 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
265 p28, p29, p30, p31] = t;
266 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
267 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
268 p24, p25, p26, p27, p28, p29, p30, p31);
269 } else if constexpr (N == 33) {
270 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
271 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
272 p28, p29, p30, p31, p32] = t;
273 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
274 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
275 p24, p25, p26, p27, p28, p29, p30, p31, p32);
276 } else if constexpr (N == 34) {
277 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
278 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
279 p28, p29, p30, p31, p32, p33] = t;
280 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
281 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
282 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33);
283 } else if constexpr (N == 35) {
284 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
285 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
286 p28, p29, p30, p31, p32, p33, p34] = t;
287 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
288 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
289 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34);
290 } else if constexpr (N == 36) {
291 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
292 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
293 p28, p29, p30, p31, p32, p33, p34, p35] = t;
294 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
295 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
296 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
297 p35);
298 } else if constexpr (N == 37) {
299 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
300 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
301 p28, p29, p30, p31, p32, p33, p34, p35, p36] = t;
302 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
303 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
304 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
305 p35, p36);
306 } else if constexpr (N == 38) {
307 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
308 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
309 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = t;
310 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
311 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
312 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
313 p35, p36, p37);
314 } else if constexpr (N == 39) {
315 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
316 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
317 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = t;
318 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
319 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
320 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
321 p35, p36, p37, p38);
322 } else if constexpr (N == 40) {
323 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
324 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
325 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = t;
326 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
327 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
328 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
329 p35, p36, p37, p38, p39);
330 } else if constexpr (N == 41) {
331 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
332 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
333 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
334 p40] = t;
335 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
336 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
337 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
338 p35, p36, p37, p38, p39, p40);
339 } else if constexpr (N == 42) {
340 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
341 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
342 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
343 p41] = t;
344 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
345 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
346 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
347 p35, p36, p37, p38, p39, p40, p41);
348 } else if constexpr (N == 43) {
349 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
350 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
351 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
352 p41, p42] = t;
353 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
354 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
355 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
356 p35, p36, p37, p38, p39, p40, p41, p42);
357 } else if constexpr (N == 44) {
358 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
359 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
360 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
361 p41, p42, p43] = t;
362 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
363 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
364 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
365 p35, p36, p37, p38, p39, p40, p41, p42, p43);
366 } else if constexpr (N == 45) {
367 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
368 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
369 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
370 p41, p42, p43, p44] = t;
371 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
372 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
373 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
374 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44);
375 } else if constexpr (N == 46) {
376 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
377 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
378 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
379 p41, p42, p43, p44, p45] = t;
380 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
381 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
382 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
383 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45);
384 } else if constexpr (N == 47) {
385 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
386 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
387 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
388 p41, p42, p43, p44, p45, p46] = t;
389 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
390 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
391 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
392 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
393 p46);
394 } else if constexpr (N == 48) {
395 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
396 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
397 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
398 p41, p42, p43, p44, p45, p46, p47] = t;
399 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
400 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
401 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
402 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
403 p46, p47);
404 } else if constexpr (N == 49) {
405 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
406 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
407 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
408 p41, p42, p43, p44, p45, p46, p47, p48] = t;
409 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
410 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
411 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
412 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
413 p46, p47, p48);
414 } else if constexpr (N == 50) {
415 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
416 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
417 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
418 p41, p42, p43, p44, p45, p46, p47, p48, p49] = t;
419 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
420 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
421 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
422 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
423 p46, p47, p48, p49);
424 } else if constexpr (N == 51) {
425 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
426 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
427 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
428 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50] = t;
429 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
430 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
431 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
432 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
433 p46, p47, p48, p49, p50);
434 } else if constexpr (N == 52) {
435 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
436 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
437 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
438 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51] = t;
439 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
440 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
441 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
442 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
443 p46, p47, p48, p49, p50, p51);
444 } else if constexpr (N == 53) {
445 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
446 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
447 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
448 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52] = t;
449 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
450 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
451 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
452 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
453 p46, p47, p48, p49, p50, p51, p52);
454 } else if constexpr (N == 54) {
455 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
456 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
457 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
458 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52,
459 p53] = t;
460 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
461 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
462 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
463 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
464 p46, p47, p48, p49, p50, p51, p52, p53);
465 } else if constexpr (N == 55) {
466 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
467 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
468 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
469 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
470 p54] = t;
471 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
472 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
473 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
474 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
475 p46, p47, p48, p49, p50, p51, p52, p53, p54);
476 } else if constexpr (N == 56) {
477 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
478 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
479 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
480 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
481 p54, p55] = t;
482 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
483 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
484 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
485 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
486 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55);
487 } else if constexpr (N == 57) {
488 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
489 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
490 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
491 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
492 p54, p55, p56] = t;
493 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
494 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
495 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
496 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
497 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56);
498 } else if constexpr (N == 58) {
499 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
500 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
501 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
502 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
503 p54, p55, p56, p57] = t;
504 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
505 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
506 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
507 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
508 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
509 p57);
510 } else if constexpr (N == 59) {
511 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
512 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
513 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
514 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
515 p54, p55, p56, p57, p58] = t;
516 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
517 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
518 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
519 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
520 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
521 p57, p58);
522 } else if constexpr (N == 60) {
523 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
524 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
525 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
526 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
527 p54, p55, p56, p57, p58, p59] = t;
528 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
529 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
530 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
531 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
532 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
533 p57, p58, p59);
534 } else if constexpr (N == 61) {
535 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
536 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
537 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
538 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
539 p54, p55, p56, p57, p58, p59, p60] = t;
540 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
541 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
542 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
543 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
544 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
545 p57, p58, p59, p60);
546 } else if constexpr (N == 62) {
547 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
548 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
549 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
550 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
551 p54, p55, p56, p57, p58, p59, p60, p61] = t;
552 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
553 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
554 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
555 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
556 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
557 p57, p58, p59, p60, p61);
558 } else if constexpr (N == 63) {
559 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
560 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
561 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
562 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
563 p54, p55, p56, p57, p58, p59, p60, p61, p62] = t;
564 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
565 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
566 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
567 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
568 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
569 p57, p58, p59, p60, p61, p62);
570 } else if constexpr (N == 64) {
571 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
572 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
573 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
574 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
575 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63] = t;
576 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
577 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
578 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
579 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
580 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
581 p57, p58, p59, p60, p61, p62, p63);
582 } else if constexpr (N == 65) {
583 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
584 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
585 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
586 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
587 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64] = t;
588 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
589 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
590 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
591 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
592 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
593 p57, p58, p59, p60, p61, p62, p63, p64);
594 } else if constexpr (N == 66) {
595 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
596 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
597 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
598 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
599 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65] = t;
600 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
601 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
602 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
603 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
604 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
605 p57, p58, p59, p60, p61, p62, p63, p64, p65);
606 } else if constexpr (N == 67) {
607 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
608 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
609 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
610 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
611 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65,
612 p66] = t;
613 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
614 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
615 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
616 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
617 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
618 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66);
619 } else if constexpr (N == 68) {
620 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
621 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
622 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
623 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
624 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
625 p67] = t;
626 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
627 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
628 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
629 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
630 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
631 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67);
632 } else if constexpr (N == 69) {
633 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
634 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
635 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
636 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
637 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
638 p67, p68] = t;
639 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
640 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
641 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
642 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
643 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
644 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
645 p68);
646 } else if constexpr (N == 70) {
647 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
648 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
649 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
650 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
651 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
652 p67, p68, p69] = t;
653 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
654 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
655 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
656 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
657 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
658 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
659 p68, p69);
660 } else if constexpr (N == 71) {
661 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
662 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
663 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
664 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
665 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
666 p67, p68, p69, p70] = t;
667 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
668 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
669 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
670 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
671 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
672 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
673 p68, p69, p70);
674 } else if constexpr (N == 72) {
675 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
676 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
677 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
678 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
679 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
680 p67, p68, p69, p70, p71] = t;
681 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
682 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
683 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
684 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
685 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
686 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
687 p68, p69, p70, p71);
688 } else if constexpr (N == 73) {
689 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
690 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
691 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
692 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
693 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
694 p67, p68, p69, p70, p71, p72] = t;
695 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
696 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
697 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
698 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
699 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
700 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
701 p68, p69, p70, p71, p72);
702 } else if constexpr (N == 74) {
703 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
704 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
705 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
706 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
707 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
708 p67, p68, p69, p70, p71, p72, p73] = t;
709 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
710 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
711 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
712 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
713 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
714 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
715 p68, p69, p70, p71, p72, p73);
716 } else if constexpr (N == 75) {
717 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
718 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
719 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
720 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
721 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
722 p67, p68, p69, p70, p71, p72, p73, p74] = t;
723 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
724 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
725 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
726 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
727 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
728 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
729 p68, p69, p70, p71, p72, p73, p74);
730 } else if constexpr (N == 76) {
731 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
732 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
733 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
734 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
735 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
736 p67, p68, p69, p70, p71, p72, p73, p74, p75] = t;
737 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
738 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
739 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
740 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
741 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
742 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
743 p68, p69, p70, p71, p72, p73, p74, p75);
744 } else if constexpr (N == 77) {
745 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
746 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
747 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
748 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
749 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
750 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76] = t;
751 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
752 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
753 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
754 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
755 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
756 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
757 p68, p69, p70, p71, p72, p73, p74, p75, p76);
758 } else if constexpr (N == 78) {
759 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
760 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
761 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
762 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
763 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
764 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77] = t;
765 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
766 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
767 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
768 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
769 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
770 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
771 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77);
772 } else if constexpr (N == 79) {
773 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
774 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
775 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
776 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
777 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
778 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78] = t;
779 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
780 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
781 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
782 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
783 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
784 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
785 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78);
786 } else if constexpr (N == 80) {
787 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
788 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
789 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
790 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
791 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
792 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
793 p79] = t;
794 return std::tie(
795 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
796 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
797 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
798 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
799 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
800 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79);
801 } else if constexpr (N == 81) {
802 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
803 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
804 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
805 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
806 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
807 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
808 p80] = t;
809 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
810 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
811 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
812 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
813 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
814 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
815 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
816 p79, p80);
817 } else if constexpr (N == 82) {
818 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
819 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
820 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
821 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
822 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
823 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
824 p80, p81] = t;
825 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
826 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
827 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
828 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
829 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
830 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
831 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
832 p79, p80, p81);
833 } else if constexpr (N == 83) {
834 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
835 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
836 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
837 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
838 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
839 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
840 p80, p81, p82] = t;
841 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
842 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
843 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
844 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
845 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
846 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
847 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
848 p79, p80, p81, p82);
849 } else if constexpr (N == 84) {
850 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
851 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
852 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
853 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
854 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
855 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
856 p80, p81, p82, p83] = t;
857 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
858 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
859 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
860 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
861 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
862 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
863 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
864 p79, p80, p81, p82, p83);
865 } else if constexpr (N == 85) {
866 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
867 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
868 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
869 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
870 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
871 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
872 p80, p81, p82, p83, p84] = t;
873 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
874 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
875 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
876 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
877 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
878 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
879 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
880 p79, p80, p81, p82, p83, p84);
881 } else if constexpr (N == 86) {
882 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
883 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
884 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
885 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
886 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
887 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
888 p80, p81, p82, p83, p84, p85] = t;
889 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
890 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
891 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
892 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
893 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
894 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
895 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
896 p79, p80, p81, p82, p83, p84, p85);
897 } else if constexpr (N == 87) {
898 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
899 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
900 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
901 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
902 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
903 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
904 p80, p81, p82, p83, p84, p85, p86] = t;
905 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
906 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
907 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
908 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
909 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
910 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
911 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
912 p79, p80, p81, p82, p83, p84, p85, p86);
913 } else if constexpr (N == 88) {
914 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
915 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
916 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
917 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
918 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
919 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
920 p80, p81, p82, p83, p84, p85, p86, p87] = t;
921 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
922 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
923 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
924 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
925 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
926 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
927 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
928 p79, p80, p81, p82, p83, p84, p85, p86, p87);
929 } else if constexpr (N == 89) {
930 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
931 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
932 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
933 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
934 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
935 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
936 p80, p81, p82, p83, p84, p85, p86, p87, p88] = t;
937 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
938 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
939 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
940 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
941 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
942 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
943 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
944 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88);
945 } else if constexpr (N == 90) {
946 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
947 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
948 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
949 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
950 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
951 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
952 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89] = t;
953 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
954 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
955 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
956 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
957 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
958 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
959 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
960 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89);
961 } else if constexpr (N == 91) {
962 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
963 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
964 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
965 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
966 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
967 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
968 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90] = t;
969 return std::tie(
970 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
971 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
972 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
973 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
974 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
975 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
976 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90);
977 } else if constexpr (N == 92) {
978 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
979 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
980 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
981 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
982 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
983 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
984 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91] = t;
985 return std::tie(
986 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
987 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
988 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
989 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
990 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
991 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
992 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91);
993 } else if constexpr (N == 93) {
994 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
995 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
996 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
997 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
998 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
999 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1000 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91,
1001 p92] = t;
1002 return std::tie(
1003 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1004 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1005 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1006 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1007 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1008 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1009 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92);
1010 } else if constexpr (N == 94) {
1011 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1012 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1013 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1014 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1015 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1016 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1017 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1018 p93] = t;
1019 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1020 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1021 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1022 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1023 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1024 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1025 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1026 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1027 p90, p91, p92, p93);
1028 } else if constexpr (N == 95) {
1029 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1030 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1031 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1032 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1033 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1034 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1035 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1036 p93, p94] = t;
1037 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1038 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1039 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1040 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1041 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1042 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1043 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1044 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1045 p90, p91, p92, p93, p94);
1046 } else if constexpr (N == 96) {
1047 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1048 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1049 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1050 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1051 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1052 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1053 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1054 p93, p94, p95] = t;
1055 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1056 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1057 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1058 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1059 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1060 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1061 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1062 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1063 p90, p91, p92, p93, p94, p95);
1064 } else if constexpr (N == 97) {
1065 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1066 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1067 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1068 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1069 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1070 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1071 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1072 p93, p94, p95, p96] = t;
1073 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1074 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1075 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1076 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1077 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1078 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1079 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1080 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1081 p90, p91, p92, p93, p94, p95, p96);
1082 } else if constexpr (N == 98) {
1083 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1084 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1085 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1086 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1087 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1088 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1089 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1090 p93, p94, p95, p96, p97] = t;
1091 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1092 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1093 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1094 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1095 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1096 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1097 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1098 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1099 p90, p91, p92, p93, p94, p95, p96, p97);
1100 } else if constexpr (N == 99) {
1101 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1102 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1103 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1104 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1105 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1106 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1107 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1108 p93, p94, p95, p96, p97, p98] = t;
1109 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1110 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1111 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1112 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1113 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1114 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1115 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1116 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1117 p90, p91, p92, p93, p94, p95, p96, p97, p98);
1118 } else if constexpr (N == 100) {
1119 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1120 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1121 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1122 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1123 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1124 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1125 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1126 p93, p94, p95, p96, p97, p98, p99] = t;
1127 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1128 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1129 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1130 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1131 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1132 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1133 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1134 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1135 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99);
1136 } else if constexpr (N == 101) {
1137 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1138 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1139 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1140 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1141 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1142 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1143 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1144 p93, p94, p95, p96, p97, p98, p99, p100] = t;
1145 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1146 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1147 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1148 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1149 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1150 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1151 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1152 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1153 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100);
1154 } else if constexpr (N == 102) {
1155 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1156 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1157 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1158 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1159 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1160 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1161 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1162 p93, p94, p95, p96, p97, p98, p99, p100, p101] = t;
1163 return std::tie(
1164 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1165 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1166 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1167 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1168 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1169 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1170 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1171 p93, p94, p95, p96, p97, p98, p99, p100, p101);
1172 } else if constexpr (N == 103) {
1173 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1174 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1175 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1176 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1177 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1178 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1179 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1180 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102] = t;
1181 return std::tie(
1182 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1183 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1184 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1185 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1186 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1187 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1188 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1189 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102);
1190 } else if constexpr (N == 104) {
1191 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1192 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1193 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1194 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1195 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1196 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1197 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1198 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103] = t;
1199 return std::tie(
1200 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1201 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1202 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1203 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1204 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1205 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1206 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1207 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103);
1208 } else if constexpr (N == 105) {
1209 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1210 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1211 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1212 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1213 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1214 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1215 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1216 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103,
1217 p104] = t;
1218 return std::tie(
1219 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1220 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1221 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1222 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1223 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1224 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1225 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1226 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104);
1227 } else if constexpr (N == 106) {
1228 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1229 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1230 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1231 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1232 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1233 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1234 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1235 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1236 p105] = t;
1237 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1238 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1239 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1240 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1241 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1242 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1243 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1244 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1245 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1246 p101, p102, p103, p104, p105);
1247 } else if constexpr (N == 107) {
1248 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1249 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1250 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1251 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1252 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1253 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1254 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1255 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1256 p105, p106] = t;
1257 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1258 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1259 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1260 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1261 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1262 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1263 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1264 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1265 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1266 p101, p102, p103, p104, p105, p106);
1267 } else if constexpr (N == 108) {
1268 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1269 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1270 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1271 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1272 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1273 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1274 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1275 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1276 p105, p106, p107] = t;
1277 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1278 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1279 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1280 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1281 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1282 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1283 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1284 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1285 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1286 p101, p102, p103, p104, p105, p106, p107);
1287 } else if constexpr (N == 109) {
1288 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1289 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1290 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1291 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1292 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1293 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1294 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1295 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1296 p105, p106, p107, p108] = t;
1297 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1298 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1299 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1300 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1301 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1302 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1303 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1304 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1305 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1306 p101, p102, p103, p104, p105, p106, p107, p108);
1307 } else if constexpr (N == 110) {
1308 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1309 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1310 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1311 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1312 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1313 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1314 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1315 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1316 p105, p106, p107, p108, p109] = t;
1317 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1318 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1319 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1320 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1321 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1322 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1323 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1324 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1325 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1326 p101, p102, p103, p104, p105, p106, p107, p108, p109);
1327 } else if constexpr (N == 111) {
1328 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1329 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1330 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1331 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1332 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1333 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1334 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1335 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1336 p105, p106, p107, p108, p109, p110] = t;
1337 return std::tie(
1338 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1339 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1340 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1341 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1342 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1343 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1344 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1345 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1346 p105, p106, p107, p108, p109, p110);
1347 } else if constexpr (N == 112) {
1348 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1349 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1350 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1351 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1352 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1353 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1354 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1355 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1356 p105, p106, p107, p108, p109, p110, p111] = t;
1357 return std::tie(
1358 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1359 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1360 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1361 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1362 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1363 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1364 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1365 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1366 p105, p106, p107, p108, p109, p110, p111);
1367 } else if constexpr (N == 113) {
1368 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1369 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1370 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1371 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1372 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1373 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1374 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1375 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1376 p105, p106, p107, p108, p109, p110, p111, p112] = t;
1377 return std::tie(
1378 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1379 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1380 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1381 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1382 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1383 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1384 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1385 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1386 p105, p106, p107, p108, p109, p110, p111, p112);
1387 } else if constexpr (N == 114) {
1388 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1389 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1390 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1391 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1392 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1393 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1394 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1395 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1396 p105, p106, p107, p108, p109, p110, p111, p112, p113] = t;
1397 return std::tie(
1398 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1399 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1400 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1401 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1402 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1403 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1404 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1405 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1406 p105, p106, p107, p108, p109, p110, p111, p112, p113);
1407 } else if constexpr (N == 115) {
1408 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1409 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1410 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1411 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1412 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1413 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1414 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1415 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1416 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114] = t;
1417 return std::tie(
1418 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1419 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1420 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1421 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1422 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1423 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1424 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1425 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1426 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114);
1427 } else if constexpr (N == 116) {
1428 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1429 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1430 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1431 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1432 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1433 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1434 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1435 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1436 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1437 p115] = t;
1438 return std::tie(
1439 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1440 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1441 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1442 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1443 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1444 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1445 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1446 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1447 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115);
1448 } else if constexpr (N == 117) {
1449 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1450 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1451 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1452 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1453 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1454 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1455 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1456 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1457 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1458 p115, p116] = t;
1459 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1460 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1461 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1462 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1463 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1464 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1465 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1466 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1467 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1468 p101, p102, p103, p104, p105, p106, p107, p108, p109,
1469 p110, p111, p112, p113, p114, p115, p116);
1470 } else if constexpr (N == 118) {
1471 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1472 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1473 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1474 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1475 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1476 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1477 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1478 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1479 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1480 p115, p116, p117] = t;
1481 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1482 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1483 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1484 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1485 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1486 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1487 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1488 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1489 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1490 p101, p102, p103, p104, p105, p106, p107, p108, p109,
1491 p110, p111, p112, p113, p114, p115, p116, p117);
1492 } else if constexpr (N == 119) {
1493 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1494 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1495 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1496 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1497 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1498 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1499 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1500 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1501 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1502 p115, p116, p117, p118] = t;
1503 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1504 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1505 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1506 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1507 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1508 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1509 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1510 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1511 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1512 p101, p102, p103, p104, p105, p106, p107, p108, p109,
1513 p110, p111, p112, p113, p114, p115, p116, p117, p118);
1514 } else if constexpr (N == 120) {
1515 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1516 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1517 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1518 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1519 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1520 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1521 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1522 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1523 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1524 p115, p116, p117, p118, p119] = t;
1525 return std::tie(
1526 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1527 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1528 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1529 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1530 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1531 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1532 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1533 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1534 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1535 p116, p117, p118, p119);
1536 } else if constexpr (N == 121) {
1537 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1538 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1539 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1540 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1541 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1542 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1543 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1544 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1545 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1546 p115, p116, p117, p118, p119, p120] = t;
1547 return std::tie(
1548 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1549 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1550 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1551 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1552 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1553 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1554 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1555 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1556 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1557 p116, p117, p118, p119, p120);
1558 } else if constexpr (N == 122) {
1559 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1560 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1561 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1562 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1563 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1564 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1565 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1566 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1567 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1568 p115, p116, p117, p118, p119, p120, p121] = t;
1569 return std::tie(
1570 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1571 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1572 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1573 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1574 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1575 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1576 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1577 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1578 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1579 p116, p117, p118, p119, p120, p121);
1580 } else if constexpr (N == 123) {
1581 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1582 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1583 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1584 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1585 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1586 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1587 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1588 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1589 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1590 p115, p116, p117, p118, p119, p120, p121, p122] = t;
1591 return std::tie(
1592 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1593 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1594 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1595 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1596 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1597 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1598 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1599 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1600 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1601 p116, p117, p118, p119, p120, p121, p122);
1602 } else if constexpr (N == 124) {
1603 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1604 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1605 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1606 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1607 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1608 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1609 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1610 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1611 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1612 p115, p116, p117, p118, p119, p120, p121, p122, p123] = t;
1613 return std::tie(
1614 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1615 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1616 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1617 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1618 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1619 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1620 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1621 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1622 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1623 p116, p117, p118, p119, p120, p121, p122, p123);
1624 } else if constexpr (N == 125) {
1625 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1626 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1627 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1628 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1629 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1630 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1631 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1632 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1633 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1634 p115, p116, p117, p118, p119, p120, p121, p122, p123, p124] = t;
1635 return std::tie(
1636 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1637 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1638 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1639 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1640 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1641 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1642 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1643 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1644 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1645 p116, p117, p118, p119, p120, p121, p122, p123, p124);
1646 } else if constexpr (N == 126) {
1647 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1648 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1649 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1650 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1651 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1652 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1653 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1654 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1655 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1656 p115, p116, p117, p118, p119, p120, p121, p122, p123, p124,
1657 p125] = t;
1658 return std::tie(
1659 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1660 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1661 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1662 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1663 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1664 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1665 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1666 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1667 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1668 p116, p117, p118, p119, p120, p121, p122, p123, p124, p125);
1669 } else if constexpr (N == 127) {
1670 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1671 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1672 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1673 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1674 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1675 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1676 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1677 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1678 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1679 p115, p116, p117, p118, p119, p120, p121, p122, p123, p124,
1680 p125, p126] = t;
1681 return std::tie(
1682 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1683 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1684 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1685 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1686 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1687 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1688 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1689 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1690 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115,
1691 p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126);
1692 } else if constexpr (N == 128) {
1693 auto &&[p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14,
1694 p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27,
1695 p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40,
1696 p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53,
1697 p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64, p65, p66,
1698 p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79,
1699 p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92,
1700 p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
1701 p105, p106, p107, p108, p109, p110, p111, p112, p113, p114,
1702 p115, p116, p117, p118, p119, p120, p121, p122, p123, p124,
1703 p125, p126, p127] = t;
1704 return std::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1705 p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23,
1706 p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34,
1707 p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45,
1708 p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56,
1709 p57, p58, p59, p60, p61, p62, p63, p64, p65, p66, p67,
1710 p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78,
1711 p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89,
1712 p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100,
1713 p101, p102, p103, p104, p105, p106, p107, p108, p109,
1714 p110, p111, p112, p113, p114, p115, p116, p117, p118,
1715 p119, p120, p121, p122, p123, p124, p125, p126, p127);
1716 }
1717}
1718
1728template <typename T>
1729struct cptr {
1730 const T *ptr;
1731};
1732
1733#if defined(__clang__)
1734#pragma clang diagnostic push
1735#pragma clang diagnostic ignored "-Wundefined-var-template"
1736#endif
1737
1743template <typename T, std::size_t N>
1744using type_of = std::remove_cvref_t<
1745 std::tuple_element_t<N, decltype(to_tuple(fake_obj<T>))>>;
1746
1753template <typename T, std::size_t N>
1754consteval auto cptr_of_member() {
1755 decltype(auto) member = std::get<N>(to_tuple(fake_obj<T>));
1756 return cptr<std::remove_cvref_t<decltype(member)>>{&member};
1757}
1758
1759#if defined(__clang__)
1760#pragma clang diagnostic pop
1761#endif
1762
1780template <cptr Ptr>
1781consteval auto pretty_name() {
1782#if defined(__clang__) || defined(__GNUC__)
1783 return conststr::cstr(__PRETTY_FUNCTION__);
1784#elif defined(_MSC_VER)
1785 return conststr::cstr(__FUNCSIG__);
1786#endif
1787}
1788
1796template <conststr::cstr Name>
1797consteval auto basename_of_impl() {
1798 constexpr auto isident = [](const char &ch) {
1799 return conststr::charutils::isalnum(ch) || ch == '_';
1800 };
1801 constexpr std::size_t end = Name.rfind_if(isident) + 1;
1802 constexpr std::size_t begin = Name.rfind_if(std::not_fn(isident), end) + 1;
1803 return Name.template substr<begin, end - begin>();
1804}
1805
1812template <conststr::cstr Name>
1813constexpr auto basename_of = basename_of_impl<Name>();
1814
1822template <cptr Ptr>
1823consteval auto name_of_ptr_impl() {
1824 constexpr auto name = pretty_name<Ptr>();
1825#if defined(__clang__)
1826 constexpr auto prefix = conststr::cstr("{&");
1827 constexpr auto suffix = conststr::cstr("}]");
1828#elif defined(__GNUC__)
1829 constexpr auto prefix = conststr::cstr("{(& ");
1830 constexpr auto suffix = conststr::cstr(")}]");
1831#elif defined(_MSC_VER)
1832 constexpr auto prefix = conststr::cstr("reflect::fake_obj<");
1833 constexpr auto suffix = conststr::cstr("}>");
1834#endif
1835 constexpr auto begin = name.find(prefix) + prefix.size();
1836 constexpr auto end = name.rfind(suffix);
1837 constexpr auto path = name.template substr<begin, end - begin>();
1838
1839 return basename_of<path>;
1840}
1841
1842#ifdef _MSC_VER
1850template <typename T, std::size_t N>
1851constexpr auto name_of = name_of_ptr_impl<cptr_of_member<T, N>()>();
1852#else
1858template <cptr Ptr>
1859constexpr auto name_of_ptr = name_of_ptr_impl<Ptr>();
1860
1866template <typename T, std::size_t N>
1867constexpr auto name_of = name_of_ptr<cptr_of_member<T, N>()>;
1868#endif
1869
1879template <typename T, conststr::cstr Name, std::size_t SrchIdx>
1880constexpr size_t index_of_impl()
1881 requires(number_of_members<T> > SrchIdx)
1882{
1883 if constexpr (Name == name_of<T, SrchIdx>)
1884 return SrchIdx;
1885 else
1886 return index_of_impl<T, Name, SrchIdx + 1>();
1887}
1888
1897template <typename T, conststr::cstr Name>
1898constexpr size_t index_of = index_of_impl<T, Name, 0>();
1899
1907template <typename T, conststr::cstr Name>
1909
1933template <std::size_t N, typename T>
1934constexpr decltype(auto) member_of(T &&t) {
1935 if constexpr (std::is_lvalue_reference_v<T>)
1936 return std::get<N>(to_tuple(std::forward<T>(t)));
1937 else
1938 return std::move(std::get<N>(to_tuple(std::forward<T>(t))));
1939}
1940
1964template <conststr::cstr Name, typename T>
1965constexpr decltype(auto) member_of(T &&t)
1966 requires std::same_as<typename decltype(Name)::value_type, char>
1967{
1968 return member_of<index_of<std::remove_cvref_t<T>, Name>, T>(
1969 std::forward<T>(t));
1970}
1971} // namespace reflect
1972
1973#endif
Main header file for the constant string type.
constexpr bool isalnum(T ch)
constexpr re-implementation of std::isalnum.
Definition: conststr.hpp:394
Compile-time reflection for aggregate types.
Definition: reflect.hpp:39
consteval auto basename_of_impl()
Internal implementation of basename_of. get the Base name of a full qualified name.
Definition: reflect.hpp:1797
consteval auto pretty_name()
Core function to get member name via compiler built-in macro.
Definition: reflect.hpp:1781
constexpr decltype(auto) member_of(T &&t)
Get member reference of object t.
Definition: reflect.hpp:1934
constexpr auto basename_of
Base name of a full qualified name.
Definition: reflect.hpp:1813
type_of< T, index_of< T, Name > > type_of_member
Get the type of the member by its name.
Definition: reflect.hpp:1908
consteval auto name_of_ptr_impl()
Internal implementation of name_of_ptr. Extract the real name from the output of pretty_name().
Definition: reflect.hpp:1823
constexpr auto name_of_ptr
Get the variable or class member name from its pointer.
Definition: reflect.hpp:1859
constexpr std::size_t number_of_members
The number of a default-constructible aggregate type's members.
Definition: reflect.hpp:107
std::remove_cvref_t< std::tuple_element_t< N, decltype(to_tuple(fake_obj< T >))> > type_of
Type of N-th member of a default-constructible aggregate type T.
Definition: reflect.hpp:1745
const T fake_obj
An object of T that can be used in constant context without really construct it.
constexpr decltype(auto) to_tuple(T &&t)
Convert a value of type T to a tuple containing references to all its members.
Definition: reflect.hpp:118
constexpr size_t index_of
Get the index of the member by its name.
Definition: reflect.hpp:1898
consteval auto cptr_of_member()
Get the pointer of the N-th member as a constexpr value.
Definition: reflect.hpp:1754
consteval std::size_t number_of_members_impl()
Internal implementation of number_of_members. Get The number of a default-constructible aggregate typ...
Definition: reflect.hpp:89
constexpr auto name_of
Name of N-th member of a default-constructible aggregate type T.
Definition: reflect.hpp:1867
constexpr size_t index_of_impl()
Internal implementation of index_of. Get the index of the member by its name.
Definition: reflect.hpp:1880
String type that can be evaluated in a constant context.
Definition: conststr.hpp:657
Type that can be implicitly converted to any type.
Definition: reflect.hpp:59
Wrapper of pointer type.
Definition: reflect.hpp:1729