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).