June 20, 2014
Hi,

Newbie question:

void foo(S)(S oneparam){}
void foo(S)(S oneparam, int anotherParam){}
alias fooStr = foo!string;

Gives:

"Error: template test.foo matches more than one template declaration:"

How could I fix it so the alias aliases one of the two versions? Also, why can't "fooStr" be an alias for both templates? Considering than the generic parameter is not what changes between both, I tough I could do fooStr(somestring) or fooStr(somestring, someint) with this alias.
June 20, 2014
On Fri, 20 Jun 2014 20:40:49 +0000
Juanjo Alvarez via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

> Hi,
>
> Newbie question:
>
> void foo(S)(S oneparam){}
> void foo(S)(S oneparam, int anotherParam){}
> alias fooStr = foo!string;
>
> Gives:
>
> "Error: template test.foo matches more than one template declaration:"
>
> How could I fix it so the alias aliases one of the two versions? Also, why can't "fooStr" be an alias for both templates? Considering than the generic parameter is not what changes between both, I tough I could do fooStr(somestring) or fooStr(somestring, someint) with this alias.

void foo(S)(S oneparam) {}

is equivalent to

template foo(S)
{
    void foo(S oneparam) {}
}

so do this:

template foo(S)
{
    void foo(S oneparam){}
    void foo(S oneparam, int anotherParam){}
}

alias fooStr = foo!string;

- Jonathan M Davis