how to resolve "matches more than one template declaration"?

Jonathan M Davis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 20 14:14:57 PDT 2014


On Fri, 20 Jun 2014 20:40:49 +0000
Juanjo Alvarez via Digitalmars-d-learn <digitalmars-d-learn at 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


More information about the Digitalmars-d-learn mailing list