Can someone explain this error?

Bill Baxter wbaxter at gmail.com
Tue Sep 23 16:55:50 PDT 2008


On Wed, Sep 24, 2008 at 8:40 AM, Jarrett Billingsley
<jarrett.billingsley at gmail.com> wrote:
> 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)()").

Ah, that works now?  Good to know.  At some point that wasn't working
unless you did the full alloc!(C).alloc(params).

--bb


More information about the Digitalmars-d-learn mailing list