From be59d94737e89d1d201c0731f2050935ae53a28d Mon Sep 17 00:00:00 2001 From: Paul Backus Date: Wed, 20 Nov 2024 15:05:10 -0500 Subject: [PATCH] sumtype: avoid template recursion in handlerArgs --- std/sumtype.d | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/std/sumtype.d b/std/sumtype.d index 015510eb4..849cf97ab 100644 --- a/std/sumtype.d +++ b/std/sumtype.d @@ -2102,10 +2102,17 @@ private size_t stride(size_t dim, lengths...)() private template handlerArgs(size_t caseId, typeCounts...) { enum tags = TagTuple!typeCounts.fromCaseId(caseId); - enum argsFrom(size_t i : tags.length) = ""; - enum argsFrom(size_t i) = "args[" ~ toCtString!i ~ "].get!(SumTypes[" ~ toCtString!i ~ "]" ~ - ".Types[" ~ toCtString!(tags[i]) ~ "])(), " ~ argsFrom!(i + 1); - enum handlerArgs = argsFrom!0; + + alias handlerArgs = AliasSeq!(); + + static foreach (i; 0 .. tags.length) + { + handlerArgs = AliasSeq!( + handlerArgs, + "args[" ~ toCtString!i ~ "].get!(SumTypes[" ~ toCtString!i ~ "]" ~ + ".Types[" ~ toCtString!(tags[i]) ~ "])(), " + ); + } } // Matching