6891 – template with uint value parameter causes several issues

D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 6891 - template with uint value parameter causes several issues
Summary: template with uint value parameter causes several issues
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 major
Assignee: No Owner
URL:
Keywords: pull, rejects-valid
Depends on:
Blocks:
Reported: 2011年11月04日 16:31 UTC by Matt Peterson
Modified: 2012年05月02日 14:55 UTC (History)
2 users (show)

See Also:


Attachments
Add an attachment (proposed patch, testcase, etc.)

Note You need to log in before you can comment on or make changes to this issue.
Description Matt Peterson 2011年11月04日 16:31:32 UTC
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.
Comment 1 SomeDude 2012年05月01日 15:51:12 UTC
The first case compiles with 2.059, not the second.
Comment 2 Kenji Hara 2012年05月01日 23:12:33 UTC
First case may be a dup of bug 3467.
I've posted a pull request for the second case:
https://github.com/D-Programming-Language/dmd/pull/919 
Comment 3 github-bugzilla 2012年05月02日 14:35:17 UTC
Commits pushed to master at https://github.com/D-Programming-Language/dmd
https://github.com/D-Programming-Language/dmd/commit/48a8e64bd0181a847098cf7de2baf4945ff6ecac
fix Issue 6891 - template with uint value parameter causes several issues
https://github.com/D-Programming-Language/dmd/commit/6dd100055be1fe13d3594213a72a04c7ecff44b2
Merge pull request #919 from 9rnsr/fix6891
Issue 6891 - template with uint value parameter causes several issues


AltStyle によって変換されたページ (->オリジナル) /