Bug 3210 – Inconsistency in implicit casting of integral template value parameters
Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
All
Creation time
2009-07-26T03:22:00Z
Last change time
2014-04-18T09:12:03Z
Keywords
rejects-valid
Assigned to
nobody
Creator
komadori
Comments
Comment #0 by komadori — 2009-07-26T03:22:30Z
Given a template T(uint N), int values for N are implicitly cast to uint where N is used within the template body. However, the instantiation of T!(n) precedes the coercion of n to uint such that the template instances T!(1) and T!(1u), and any types defined within them, are distinct. I believe this should not be the case.
Reproduced with DMD 1.046 under Linux and LDC r1522 under Solaris. Test case and compiler output below:
---
module Test;
struct Test(uint N)
{
int x;
Test!(N) f(Test!(N) rhs)
{
return Test!(N)(x+rhs.x);
}
}
void main()
{
Test!(1) x;
x.f(x);
}
---
Test.d(16): Error: function Test.Test!(1).Test.f (Test!(1u)) does not match parameter types (Test!(1))
Test.d(16): Error: cannot implicitly convert expression (b) of type Test!(1) to Test!(1u)
Comment #1 by k.hara.pg — 2011-11-28T16:59:59Z
*** This issue has been marked as a duplicate of issue 3467 ***