[Issue 5801] New: Using typeof() in function header breaks ITFI and default template arguments.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Mar 30 15:59:08 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5801
Summary: Using typeof() in function header breaks ITFI and
default template arguments.
Product: D
Version: D2
Platform: Other
OS/Version: Mac OS X
Status: NEW
Keywords: rejects-valid
Severity: major
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: code at klickverbot.at
--- Comment #0 from klickverbot <code at klickverbot.at> 2011-03-30 15:55:34 PDT ---
The following program compiles (bar uses a default type for T, baz relies on
IFTI):
---
void bar(T = double)(int i) {}
void baz(T)(int i, T t) {}
void main() {
bar(2);
baz(3, "baz");
}
---
But if typeof() is used instead of explicitly specifying int, neither calls to
bar and baz work any longer:
---
int a;
void bar(T = double)(typeof(a) i) {}
void baz(T)(typeof(a) i, T t) {}
void main() {
bar(2); // Does not compile.
baz(3, "baz"); // Does not compile.
}
---
The respective error messages are:
Error: template test.bar(T = double) does not match any function template
declaration
Error: template test.bar(T = double) cannot deduce template function from
argument types !()(int)
and
Error: template test.baz(T) does not match any function template declaration
Error: template test.baz(T) cannot deduce template function from argument types
!()(int,string).
If the template parameter is specified explicitly, however, both of the
examples work again:
---
int a;
void bar(T = double)(typeof(a) i) {}
void baz(T)(typeof(a) i, T t) {}
void main() {
bar!double(2);
baz!string(3, "baz");
}
---
DMD from Git master at b7133502.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list