https://issues.dlang.org/show_bug.cgi?id=16075
b2.t...@gmx.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |b2.t...@gmx.com Resolution|--- |INVALID --- Comment #1 from b2.t...@gmx.com --- (In reply to Max Samukha from comment #0) > mixin template Foo(A...) { > static if (A.length) { > void foo(A[0] a) { > } > > mixin Foo!(A[1..$]) F; > alias foo = F.foo; > } > } > > mixin Foo!(int, string, bool); > > void main() { > } > > Error: alias test.Foo!(int, string, bool).Foo!(string, bool).Foo!bool.foo > recursive alias declaration > > > The mixin should produce properly nested overload sets of foo: > > foo(int); foo(string); foo(bool); > F.foo(string); F.foo(bool); > F.F.foo(bool); Hi, there is an error in your code, the correct way to write your template is: mixin template Foo(A...) { static if (A.length) { void foo(A[0] a) {} static if (A.length > 1) // here !! { mixin Foo!(A[1..$]) F; alias foo = F.foo; } } } mixin Foo!(int,string,bool); void main() {} otherwise the instanciation continues endlessly with an empty A. --