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 ***