@@ -163,13 +163,19 @@ consteval auto brace_constructible_size(auto... Members)
163163 return std::array<decltype (l (p0)), d##0 >{DPL_FENUM_##d##0 (l, p, )}; \
164164 }
165165
166- template <bool B = false , typename L, class T >
167- auto homogeneous_apply_refs (L l, T&& object )
166+ template <bool B, typename T>
167+ consteval int nested_brace_constructible_size ( )
168168{
169169 using type = std::decay_t <T>;
170170 constexpr int nesting = B ? 1 : 0 ;
171- constexpr unsigned long numElements = brace_constructible_size<type>() - nesting;
172- static_assert (numElements < 99 , " Too many elements in the struct" );
171+ return brace_constructible_size<type>() - nesting;
172+ }
173+
174+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
175+ requires (D == 9 )
176+ auto homogeneous_apply_refs (L l, T&& object)
177+ {
178+ constexpr int numElements = nested_brace_constructible_size<B, T>();
173179 // clang-format off
174180 if DPL_HOMOGENEOUS_APPLY_ENTRY (9 , 9 )
175181 else if DPL_HOMOGENEOUS_APPLY_ENTRY (9 , 8 )
@@ -181,7 +187,17 @@ auto homogeneous_apply_refs(L l, T&& object)
181187 else if DPL_HOMOGENEOUS_APPLY_ENTRY (9 , 2 )
182188 else if DPL_HOMOGENEOUS_APPLY_ENTRY (9 , 1 )
183189 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (9 )
184- else if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 9 )
190+ else { return std::array<bool ,0 >(); }
191+ // clang-format on
192+ }
193+
194+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
195+ requires (D == 8 )
196+ auto homogeneous_apply_refs (L l, T&& object)
197+ {
198+ constexpr int numElements = nested_brace_constructible_size<B, T>();
199+ // clang-format off
200+ if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 9 )
185201 else if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 8 )
186202 else if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 7 )
187203 else if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 6 )
@@ -191,7 +207,17 @@ auto homogeneous_apply_refs(L l, T&& object)
191207 else if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 2 )
192208 else if DPL_HOMOGENEOUS_APPLY_ENTRY (8 , 1 )
193209 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (8 )
194- else if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 9 )
210+ else { return std::array<bool ,0 >(); }
211+ // clang-format on
212+ }
213+
214+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
215+ requires (D == 7 )
216+ auto homogeneous_apply_refs (L l, T&& object)
217+ {
218+ constexpr int numElements = nested_brace_constructible_size<B, T>();
219+ // clang-format off
220+ if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 9 )
195221 else if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 8 )
196222 else if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 7 )
197223 else if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 6 )
@@ -201,7 +227,17 @@ auto homogeneous_apply_refs(L l, T&& object)
201227 else if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 2 )
202228 else if DPL_HOMOGENEOUS_APPLY_ENTRY (7 , 1 )
203229 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (7 )
204- else if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 9 )
230+ else { return std::array<bool ,0 >(); }
231+ // clang-format on
232+ }
233+
234+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
235+ requires (D == 6 )
236+ auto homogeneous_apply_refs (L l, T&& object)
237+ {
238+ constexpr int numElements = nested_brace_constructible_size<B, T>();
239+ // clang-format off
240+ if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 9 )
205241 else if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 8 )
206242 else if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 7 )
207243 else if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 6 )
@@ -211,7 +247,17 @@ auto homogeneous_apply_refs(L l, T&& object)
211247 else if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 2 )
212248 else if DPL_HOMOGENEOUS_APPLY_ENTRY (6 , 1 )
213249 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (6 )
214- else if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 9 )
250+ else { return std::array<bool ,0 >(); }
251+ // clang-format on
252+ }
253+
254+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
255+ requires (D == 5 )
256+ auto homogeneous_apply_refs (L l, T&& object)
257+ {
258+ constexpr int numElements = nested_brace_constructible_size<B, T>();
259+ // clang-format off
260+ if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 9 )
215261 else if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 8 )
216262 else if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 7 )
217263 else if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 6 )
@@ -221,7 +267,17 @@ auto homogeneous_apply_refs(L l, T&& object)
221267 else if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 2 )
222268 else if DPL_HOMOGENEOUS_APPLY_ENTRY (5 , 1 )
223269 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (5 )
224- else if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 9 )
270+ else { return std::array<bool ,0 >(); }
271+ // clang-format on
272+ }
273+
274+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
275+ requires (D == 4 )
276+ auto homogeneous_apply_refs (L l, T&& object)
277+ {
278+ constexpr int numElements = nested_brace_constructible_size<B, T>();
279+ // clang-format off
280+ if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 9 )
225281 else if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 8 )
226282 else if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 7 )
227283 else if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 6 )
@@ -231,7 +287,17 @@ auto homogeneous_apply_refs(L l, T&& object)
231287 else if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 2 )
232288 else if DPL_HOMOGENEOUS_APPLY_ENTRY (4 , 1 )
233289 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (4 )
234- else if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 9 )
290+ else { return std::array<bool ,0 >(); }
291+ // clang-format on
292+ }
293+
294+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
295+ requires (D == 3 )
296+ auto homogeneous_apply_refs (L l, T&& object)
297+ {
298+ constexpr int numElements = nested_brace_constructible_size<B, T>();
299+ // clang-format off
300+ if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 9 )
235301 else if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 8 )
236302 else if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 7 )
237303 else if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 6 )
@@ -241,7 +307,17 @@ auto homogeneous_apply_refs(L l, T&& object)
241307 else if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 2 )
242308 else if DPL_HOMOGENEOUS_APPLY_ENTRY (3 , 1 )
243309 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (3 )
244- else if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 9 )
310+ else { return std::array<bool ,0 >(); }
311+ // clang-format on
312+ }
313+
314+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
315+ requires (D == 2 )
316+ auto homogeneous_apply_refs (L l, T&& object)
317+ {
318+ constexpr int numElements = nested_brace_constructible_size<B, T>();
319+ // clang-format off
320+ if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 9 )
245321 else if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 8 )
246322 else if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 7 )
247323 else if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 6 )
@@ -251,7 +327,17 @@ auto homogeneous_apply_refs(L l, T&& object)
251327 else if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 2 )
252328 else if DPL_HOMOGENEOUS_APPLY_ENTRY (2 , 1 )
253329 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (2 )
254- else if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 9 )
330+ else { return std::array<bool ,0 >(); }
331+ // clang-format on
332+ }
333+
334+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
335+ requires (D == 1 )
336+ auto homogeneous_apply_refs (L l, T&& object)
337+ {
338+ constexpr int numElements = nested_brace_constructible_size<B, T>();
339+ // clang-format off
340+ if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 9 )
255341 else if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 8 )
256342 else if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 7 )
257343 else if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 6 )
@@ -261,7 +347,17 @@ auto homogeneous_apply_refs(L l, T&& object)
261347 else if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 2 )
262348 else if DPL_HOMOGENEOUS_APPLY_ENTRY (1 , 1 )
263349 else if DPL_HOMOGENEOUS_APPLY_ENTRY_TENS (1 )
264- else if DPL_HOMOGENEOUS_APPLY_ENTRY_LOW (9 )
350+ else { return std::array<bool ,0 >(); }
351+ // clang-format on
352+ }
353+
354+ template <bool B = false , typename L, class T , int D = nested_brace_constructible_size<B, T>() / 10 >
355+ requires (D == 0 )
356+ auto homogeneous_apply_refs (L l, T&& object)
357+ {
358+ constexpr int numElements = nested_brace_constructible_size<B, T>();
359+ // clang-format off
360+ if DPL_HOMOGENEOUS_APPLY_ENTRY_LOW (9 )
265361 else if DPL_HOMOGENEOUS_APPLY_ENTRY_LOW (8 )
266362 else if DPL_HOMOGENEOUS_APPLY_ENTRY_LOW (7 )
267363 else if DPL_HOMOGENEOUS_APPLY_ENTRY_LOW (6 )
0 commit comments