alias seq(T...)=T; template foo(T...){ alias bar=seq!(); static foreach(i,A;T){ alias bar_(alias B:A)=bar; bar=seq!(bar_!A,A); } alias foo=bar; } void main(){ import std; alias foobar=foo!(int,bool,float); foobar.stringof.writeln; } expected: (int,bool,float) actaul: (int,bool) ``` 2.095.1 to 2.100.2: Success with output: (int, bool, float) Since 2.101.2: Success with output: (int, bool) ```
We identified the cause in OpenD as dsymbolsem.d look for "Try AliasSeq optimization" Commenting that out fixes the problem. // Try AliasSeq optimization /+ // actually don't because it is cause of https://issues.dlang.org/show_bug.cgi?id=24366 if (auto ti = ds.type.isTypeInstance()) { if (!ti.tempinst.findTempDecl(sc, null)) return errorRet(); if (auto tempinst = isAliasSeq(sc, ti)) { s = aliasAssignInPlace(sc, tempinst, aliassym); if (!s) return errorRet(); goto Lsymdone; } } +/