digitalmars.D.learn - Recursive mixins problem
- Max Samukha <samukha voliacable.com> Apr 07 2007
- Max Samukha <samukha voliacable.com> Apr 09 2007
Why recursive mixins are disallowed?
template Call(A...)
{
static if (A.length > 0)
{
void call(A[0] fn)
{
}
mixin Call!(A[1..$]);
}
}
class Caller(A...)
{
mixin Call!(A);
}
void main()
{
auto caller = new Caller!(int delegate(), char[] delegate());
}
hello.d(15): mixin hello.Caller!(int delegate(),char[]
delegate()).Caller.Call!(int delegate(),char[]
delegate()).Call!(char[] delegate()).Call!() recursive mixin
instantiation
hello.d(26): template instance hello.Caller!(int delegate(),char[]
delegate()) error instantiating
Apr 07 2007
On Sat, 07 Apr 2007 16:55:16 +0300, Max Samukha <samukha voliacable.com> wrote:Why recursive mixins are disallowed? template Call(A...) { static if (A.length > 0) { void call(A[0] fn) { } mixin Call!(A[1..$]); } } class Caller(A...) { mixin Call!(A); } void main() { auto caller = new Caller!(int delegate(), char[] delegate()); } hello.d(15): mixin hello.Caller!(int delegate(),char[] delegate()).Caller.Call!(int delegate(),char[] delegate()).Call!(char[] delegate()).Call!() recursive mixin instantiation hello.d(26): template instance hello.Caller!(int delegate(),char[] delegate()) error instantiating
In the example above, char[] delegate() should be replaced with something like int delegate(char[]) for proper function overloading. Anyway, the problem remains. Is it a bug or temporary restriction? If not, should a note be added to the specs?
Apr 09 2007








Max Samukha <samukha voliacable.com>