digitalmars.D.learn - Weird integral promotion issue (?)
- =?ISO-8859-1?Q?Alex_R=F8nne_Petersen?= (17/17) May 12 2012 Hi,
- Dmitry Olshansky (6/21) May 12 2012 byte is in range of -128..127
Hi,
alexrp alexrp ~/Projects/tests $ dmd test.d
test.d(9): Error: cannot implicitly convert expression (240) of type int
to byte
alexrp alexrp ~/Projects/tests $ cat test.d
import std.stdio, std.traits;
void foo(T)(T val) if (isIntegral!T)
{
}
void main()
{
foo!byte(0b11110000);
}
Why? I explicitly told the compiler that T == byte. Passing 0b00001111
works perfectly fine.
--
- Alex
May 12 2012
On 13.05.2012 1:08, Alex Rønne Petersen wrote:
Hi,
alexrp alexrp ~/Projects/tests $ dmd test.d
test.d(9): Error: cannot implicitly convert expression (240) of type int
to byte
alexrp alexrp ~/Projects/tests $ cat test.d
import std.stdio, std.traits;
void foo(T)(T val) if (isIntegral!T)
{
}
void main()
{
foo!byte(0b11110000);
}
Why? I explicitly told the compiler that T == byte. Passing 0b00001111
works perfectly fine.
byte is in range of -128..127
use ubyte
Gotcha!
--
Dmitry Olshansky
May 12 2012








Dmitry Olshansky <dmitry.olsh gmail.com>