Bug 11715 – templatized method shadowed by non-templatized in parameterless eponymous template

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-12-10T02:52:55Z
Last change time
2024-12-13T18:15:02Z
Assigned to
No Owner
Creator
monarchdodra
Moved to GitHub: dmd#18735 →

Comments

Comment #0 by monarchdodra — 2013-12-10T02:52:55Z
//---- template bar(T) { void bar(){} //Non template void bar(U)(U u){} //Template } template foo1() { void foo1()(){} //Template void foo1(U)(U u){} //Template } template foo2() { void foo2(){} //Non template void foo2(U)(U u){} //Template } void main() { bar!int(); //OK bar!int(1); //OK foo1(); //OK foo1(1); //OK foo2(); //OK foo2(1); //NOPE! } //---- Results in: //---- Error: template main.foo2 does not match any function template declaration. Candidates are: main.foo2()() Error: template main.foo2()() cannot deduce template function from argument types !()(int) //---- I think this is not correct behavior. "bar" and "foo2" should have the same behavior. It *seems* like the compiler does not "see" foo2().foo2(U)(U u) The workaround (as seen in foo1), is to make the non-template function a parameter-less template.
Comment #1 by robert.schadek — 2024-12-13T18:15:02Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18735 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB