[Issue 16075] Compiler rejects basic mixin template

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Wed May 25 14:23:11 PDT 2016


https://issues.dlang.org/show_bug.cgi?id=16075

b2.temp at gmx.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |b2.temp at gmx.com
         Resolution|---                         |INVALID

--- Comment #1 from b2.temp at 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.

--


More information about the Digitalmars-d-bugs mailing list