Inferring an integer literal as ubyte

2015-12-14 Thread Shriramana Sharma via Digitalmars-d-learn
Hello. I was trying to do something like this: ubyte code = to!ubyte(spec, 6) + 16; and got an error saying: cannot implicitly convert expression (cast(int)to(spec, 6) + 16) of type int to ubyte Looking at http://dlang.org/spec/lex.html#IntegerLiteral, sure enough 16 is specified to be

Re: Inferring an integer literal as ubyte

2015-12-14 Thread Adam D. Ruppe via Digitalmars-d-learn
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

Re: Inferring an integer literal as ubyte

2015-12-14 Thread Kagamin via Digitalmars-d-learn
They are promoted to int in arithmetic operations unless compiler can prove the value doesn't exceed its range.

Re: Inferring an integer literal as ubyte

2015-12-14 Thread Shriramana Sharma via Digitalmars-d-learn
Adam D. Ruppe wrote: > but yours won't because to!ubyte(spec, 6) might just be > 240. Thanks for that explanation. That's clear now. -- Shriramana Sharma, Penguin #395953