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