Recursive mixins problem

Max Samukha samukha at voliacable.com
Mon Apr 9 23:41:28 PDT 2007


On Sat, 07 Apr 2007 16:55:16 +0300, Max Samukha
<samukha at 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?

  


More information about the Digitalmars-d-learn mailing list