You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Apparently, this is according to spec, but I think it should be legal.
Simple functions? No problem:
//----
void foo();
void bar(int);
alias foo = bar;
void main()
{
foo();
foo(5);
}
//----
Templates? Problem:
//----
void foo()(); //Template here
void bar(int);
alias foo = bar;
void main()
{
foo();
foo(5);
}
//----
main.d(4): Error: alias main.foo conflicts with template main.foo()() at main.d(1)
//----
I think there should not be such a conflict. There is no reason for the alias not to work.
The above code is trivial, but a real world scenario where this can happen, is when a module wants to publicly import a named template function overload:
A.d
//----
module a;
foo(int); //Special "int" overload
//----
B.d
//----
module b;
foo()(); //Standard 0-arg signature;
public import A : foo; //re-use "int"
//----
Because of this,
The text was updated successfully, but these errors were encountered:
(In reply to comment #0)
> Templates? Problem:> //----> void foo()(); //Template here> void bar(int);> > alias foo = bar;> > void main()> {> foo();> foo(5);> }> //----> main.d(4): Error: alias main.foo conflicts with template main.foo()() at> main.d(1)> //----> > I think there should not be such a conflict. There is no reason for the alias> not to work.
Just to be clear, I think this should be legal, as there is absolutly no conflict between the original symbol, and the alias anyways.
Perfectly legal:
//----
void foo()();
void foo(int);
void main()
{
foo();
foo(5);
}
//----
If that works, why does the alias create a conflict?
monarchdodra reported this on 2014-01-05T13:34:13Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=11873
Description
Apparently, this is according to spec, but I think it should be legal. Simple functions? No problem: //---- void foo(); void bar(int); alias foo = bar; void main() { foo(); foo(5); } //---- Templates? Problem: //---- void foo()(); //Template here void bar(int); alias foo = bar; void main() { foo(); foo(5); } //---- main.d(4): Error: alias main.foo conflicts with template main.foo()() at main.d(1) //---- I think there should not be such a conflict. There is no reason for the alias not to work. The above code is trivial, but a real world scenario where this can happen, is when a module wants to publicly import a named template function overload: A.d //---- module a; foo(int); //Special "int" overload //---- B.d //---- module b; foo()(); //Standard 0-arg signature; public import A : foo; //re-use "int" //---- Because of this,The text was updated successfully, but these errors were encountered: