The problem is not the alias. The error message is about using the same identifier for two different things:

C:\...\temp_0186F968.d(13,1): Error: declaration foo(T)(T t, int i) is already defined.
I'm not sure what is giving you that particular error. Without the alias it compiles and runs fine for me.

When I wrap them individually in the template statement, it gives:
---
src\app.d(24): Error: template app.foo cannot deduce function from argument types !()(int), candidates are:
src\app.d(40):        app.foo(T)
src\app.d(45):        app.foo(T)
---

When I wrap them together, I can indeed alias it, thanks!

What you seem to forget is that the declarations:
---------------------
void foo(T)(T t) {}
void foo(T)(T t, int i) {}
---------------------
are actually a two **Eponymous template** with the same name:
---------------------
template foo(T){
    void foo(T t) {}
}
template foo(T){
    void foo(T t, int i) {}
}
---------------------
Yes I had forgotten, assuming I ever knew :)

Reply via email to