http://d.puremagic.com/issues/show_bug.cgi?id=6891
Summary: template with uint value parameter causes several
issues
Product: D
Version: D2
Platform: x86_64
OS/Version: Linux
Status: NEW
Severity: major
Priority: P2
Component: DMD
AssignedTo: [email protected]
ReportedBy: [email protected]
--- Comment #0 from Matt Peterson <[email protected]> 2011-11-04 16:31:32
PDT ---
This bug is closely related to issue 4960 and issue 6745, although I don't
think it's an exact duplicate.
One of the simplest test cases I could come up with:
----
struct S(uint N) {
void f(S!N u) { }
}
alias S!1 A;
void main()
{
A().f(A());
}
----
Which gives the following error messages:
templatetest.d(10): Error: function templatetest.S!(1).S.f (S!(N) u) is not
callable using argument types (S!(1))
templatetest.d(10): Error: cannot implicitly convert expression (S()) of type
S!(1) to S!(N)
In this form it is fairly easy to work around, by either changing uint to int
in the struct declaration or using S!1u instead of S!1. However, I derived this
from a slightly different test case:
----
struct S(int N, T) {
void f(U)(S!(N, U) u) { }
}
alias S!(1, void) A;
void main()
{
A().f(A());
}
----
Which gives me these error messages:
templatetest.d(10): Error: template templatetest.S!(1,void).S.f(U) does not
match any function template declaration
templatetest.d(10): Error: template templatetest.S!(1,void).S.f(U) cannot
deduce template function from argument types !()(S!(1,void))
In this version, changing the type of N or 1 doesn't do anything, and I have
not found a way to work around it.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------