Please tell me this is a bug?

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Sat Feb 21 23:11:23 PST 2015


On Sunday, 22 February 2015 at 02:27:30 UTC, Peter Alexander 
wrote:
> On Sunday, 22 February 2015 at 01:24:09 UTC, Almighty Bob wrote:
>> a += b; // Compiles with no ERROR!
>>
>> Please tell me that's a bug?
>
> Not a bug. From spec:
>
> http://dlang.org/expression.html#AssignExpression
>> Assignment operator expressions, such as:
>> 
>> a op= b
>> 
>> are semantically equivalent to:
>> 
>> a = cast(typeof(a))(a op b)
>
> Seems questionable to me. Anyone know the rationale? If a = b; 
> is disallowed, I don't see why a += b; should be more 
> acceptable.

The rationale make sens for things like :
byte a; a += 1;

Here, because of type promotion, a + 1 is an int, and if VRP of a 
is unknown, you can't cast implicitly back to byte.

It is true that this create questionable side effect for float, 
but in the end, that is consistent, and it would be very annoying 
to not be able to increment/decrement integral smaller than int.


More information about the Digitalmars-d mailing list