Bug 11873 – function templates conflict with aliases

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2014-01-05T13:34:13Z
Last change time
2024-12-13T18:15:39Z
Assigned to
No Owner
Creator
monarchdodra
Moved to GitHub: dmd#17635 →

Comments

Comment #0 by monarchdodra — 2014-01-05T13:34:13Z
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,
Comment #1 by monarchdodra — 2014-01-05T13:37:52Z
(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?
Comment #2 by robert.schadek — 2024-12-13T18:15:39Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17635 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB