Can someone explain this error?

Jarrett Billingsley jarrett.billingsley at gmail.com
Tue Sep 23 16:40:37 PDT 2008


On Tue, Sep 23, 2008 at 7:26 PM, Sean Kelly <sean at invisibleduck.org> wrote:
>    class C
>    {
>        this() {}
>        this( int x, int y ) {}
>    }
>
>    void main()
>    {
>        auto c = alloc!(C);
>        auto d = alloc!(C)( 1, 2 );
>    }
>
>    T alloc(T, Params ...)( Params params )
>    {
>        return new T( params );
>    }
>
> $ dmd test
> test.d(10): Error: expected 0 arguments, not 2
>

You cannot partially specify a template.  alloc!(C) means that
Params... is the empty tuple: hence, 0 arguments expected.

template alloc(T)
{
    T alloc(Params ...)( Params params )
    {
        return new T( params );
    }
}

does the trick, but requires you to call it with empty parens in the
0-param case (like "alloc!(C)()").


More information about the Digitalmars-d-learn mailing list