On Monday, 14 December 2015 at 13:33:41 UTC, Shriramana Sharma wrote:
ubyte code = to!ubyte(spec, 6) + 16;

That's not an integer literal... that's a runtime value of ubyte plus an integer literal.

Since the ubyte is the result of a runtime function, the compiler doesn't know what it will be and thinks it could be anything from 0 to 255, inclusive.

240 + 16 = 256 = too big to fit in a ubyte, to it requires a cast.

ubyte code = 16; // this would work

ubyte code = 239 + 16; // this too

but yours won't because to!ubyte(spec, 6) might just be > 240.

Reply via email to