Bug 5903 – Overloading template functions with typeof() parameter type fails.

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
Mac OS X
Creation time
2011-04-28T12:18:00Z
Last change time
2012-04-23T17:04:51Z
Keywords
rejects-valid
Assigned to
nobody
Creator
kennytm

Comments

Comment #0 by kennytm — 2011-04-28T12:18:38Z
Test case: --------------------------------------------------- static assert(is(int == typeof(0))); void p()(int a) { pragma(msg, "OK(p)"); } void p()() { pragma(msg, "Err(p)"); } void r(R=typeof(0))(R a) { pragma(msg, "OK(r)"); } void r()() { pragma(msg, "Err(r)"); } void s()(typeof(0) a) { pragma(msg, "OK(s)"); } void t(typeof(0) a) { } void t() { } void q()(typeof(0) a) { pragma(msg, "OK(q)"); } void q()() { pragma(msg, "Err(q)"); } void main() { p!()(5); // without typeof() is ok r!()(5); // put that typeof() elsewhere is ok s!()(5); // no overloading is ok t(5); // no template is ok q!()(5); // Error } --------------------------------------------------- OK(p) OK(r) OK(s) x.d(22): Error: template x.q() does not match any function template declaration x.d(22): Error: template x.q() cannot deduce template function from argument types !()(int) x.d(22): Error: template instance errors instantiating template --------------------------------------------------- Probably the same as issue 4413, except it affects more than typeof(this).
Comment #1 by lovelydear — 2012-04-23T12:54:21Z
Compiles with 2.059 Win32. PS E:\DigitalMars\dmd2\samples> dmd bug.d OK(p) OK(r) OK(s) OK(q) PS E:\DigitalMars\dmd2\samples>
Comment #2 by k.hara.pg — 2012-04-23T17:04:51Z
*** This issue has been marked as a duplicate of issue 4413 ***