Continuation of issue 21209
Scope inference fails on foreach loops of tuples / alias sequences:
```
@safe:
void foo(A...)(A args)
{
static int x; x++; // force impure for issue 20150
foreach(a; args)
{
// gets lowered to unrolled loop with `string a = _param_0;`
}
}
void main()
{
scope string x = "hey";
foo(x);
}
```
Error: scope variable `x` assigned to non-scope parameter `_param_0` calling foo!string.foo
It gets lowered to a special 'unrolled' loop which puts the loop variable in a temporary (`string a = _param_0;`), which makes _param_0 non-scope.
Comment #1 by robert.schadek — 2024-12-13T19:16:47Z