Why does this not work?
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Sep 17 06:59:40 PDT 2014
On Wednesday, 17 September 2014 at 13:20:15 UTC, Shachar wrote:
> On Wednesday, 17 September 2014 at 13:03:05 UTC,
> flamencofantasy wrote:
>> the result of ubyte + ubyte is int I believe.
>>
>> Try;
>> void func( int c )
>> {
>> ubyte a;
>>
>> a = cast(ubyte)(cast(ubyte)c + cast(ubyte)c);
>> }
>
> From http://dlang.org/type, under Usual Arithmetic Conversions:
> 4. Else the integer promotions are done on each operand,
> followed by:
> 1. If both are the same type, no more conversions are done.
>
> So, as far as I can see, the specs disagree with you.
You missed that "integer promotions" are done first.
<http://dlang.org/type.html#Integer%20Promotions>:
> Integer Promotions are conversions of the following types:
[...]
> from to
[...]
> ubyte int
[...]
So, integer promotions turn ubyte + ubyte into int + int.
More information about the Digitalmars-d-learn
mailing list