Bug 6551 – struct constructor not recognized when forward referenced

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-08-24T16:51:00Z
Last change time
2013-11-22T01:37:24Z
Keywords
rejects-valid
Assigned to
nobody
Creator
hoganmeier
Blocks
340

Comments

Comment #0 by hoganmeier — 2011-08-24T16:51:05Z
So there's a struct with a ubyte. To shut up dmd about implicit conversions I added a constructor but it isn't recognized. // this failes immutable int dummy = init(); int init() { uint x; 6: auto p = F(x); return 0; } struct F { ubyte th; this(uint x) { th = cast(ubyte) x; } } // while it works in this case void main() { uint x; auto p = F(x); } $ dmd -c posecells.d DMD v2.055 DEBUG posecells.d(6): Error: cannot implicitly convert expression (x) of type uint to ubyte posecells.d(2): Error: cannot evaluate init() at compile time Weird thing is, if you remove 'int' in front of 'dummy' it magically works.
Comment #1 by clugdbug — 2011-09-01T04:30:48Z
This isn't a CTFE bug. Reduced test case: uint NINE = 9; typeof(F(NINE)) fails; struct F { ubyte th; this(uint x) { th = cast(ubyte) x; } } This is a forward reference issue. It compiles if you move the declaration of 'fails' past the declaration of F.
Comment #2 by k.hara.pg — 2013-11-22T01:37:24Z
*** This issue has been marked as a duplicate of issue 9441 ***