sumtype: avoid template recursion in handlerArgs

This commit is contained in:
Paul Backus 2024-11-20 15:05:10 -05:00
parent 7362ac5bee
commit be59d94737

View file

@ -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