@@ -160,17 +160,54 @@ inline constexpr auto CountMembers = [] {
160160
161161constexpr size_t MaxReflectionMemerCount = 5 ; // should go as high as 256, I guess?
162162
163+
164+ /* *
165+
166+ elisp functions to fill the ToTuple function
167+
168+ (defun create_params (n)
169+ (let ((res "") (counter 0))
170+ (while (< counter n)
171+ (setq res (concat res "p" (number-to-string counter)))
172+ (if (< counter (- n 1))
173+ (setq res (concat res ", "))
174+ )
175+ (setq counter (1+ counter)))
176+ res)
177+ )
178+
179+ (defun for_one_value (n)
180+ (setq params (create_params n))
181+ (concat " else if constexpr (N == " (number-to-string n) ")\n"
182+ " {\n"
183+ " auto& [" params "] = t;\n"
184+ " return std::tie(" params ");\n"
185+ " }\n"
186+ )
187+ )
188+
189+ (defun fill_ToTuple()
190+ (interactive)
191+ (let ((total 1))
192+ (while (<= total 20)
193+ (insert (for_one_value total))
194+ (setq total (+ total 1))
195+ total))
196+ )
197+
198+ **/
199+
163200template <class T , size_t N = CountMembers<T>>
164201 requires (N <= MaxReflectionMemerCount)
165202inline constexpr decltype (auto ) ToTuple(T&& t) noexcept
166203{
167204 if constexpr (N == 0 )
168205 return std::tuple {};
169-
206+ // clang-format off
170207 else if constexpr (N == 1 )
171208 {
172- auto & [p ] = t;
173- return std::tie (p );
209+ auto & [p0 ] = t;
210+ return std::tie (p0 );
174211 }
175212 else if constexpr (N == 2 )
176213 {
@@ -192,6 +229,82 @@ inline constexpr decltype(auto) ToTuple(T&& t) noexcept
192229 auto & [p0, p1, p2, p3, p4] = t;
193230 return std::tie (p0, p1, p2, p3, p4);
194231 }
232+ else if constexpr (N == 6 )
233+ {
234+ auto & [p0, p1, p2, p3, p4, p5] = t;
235+ return std::tie (p0, p1, p2, p3, p4, p5);
236+ }
237+ else if constexpr (N == 7 )
238+ {
239+ auto & [p0, p1, p2, p3, p4, p5, p6] = t;
240+ return std::tie (p0, p1, p2, p3, p4, p5, p6);
241+ }
242+ else if constexpr (N == 8 )
243+ {
244+ auto & [p0, p1, p2, p3, p4, p5, p6, p7] = t;
245+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7);
246+ }
247+ else if constexpr (N == 9 )
248+ {
249+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
250+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8);
251+ }
252+ else if constexpr (N == 10 )
253+ {
254+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
255+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
256+ }
257+ else if constexpr (N == 11 )
258+ {
259+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
260+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
261+ }
262+ else if constexpr (N == 12 )
263+ {
264+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
265+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
266+ }
267+ else if constexpr (N == 13 )
268+ {
269+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
270+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
271+ }
272+ else if constexpr (N == 14 )
273+ {
274+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
275+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
276+ }
277+ else if constexpr (N == 15 )
278+ {
279+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t;
280+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
281+ }
282+ else if constexpr (N == 16 )
283+ {
284+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t;
285+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
286+ }
287+ else if constexpr (N == 17 )
288+ {
289+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t;
290+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
291+ }
292+ else if constexpr (N == 18 )
293+ {
294+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t;
295+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
296+ }
297+ else if constexpr (N == 19 )
298+ {
299+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t;
300+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
301+ }
302+ else if constexpr (N == 20 )
303+ {
304+ auto & [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t;
305+ return std::tie (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
306+ }
307+ // clang-format on
195308}
196309
197310template <class T >
0 commit comments