Brad Roberts wrote:
That's really cool. But I don't think that's actually happening (Or
are these the bugs you're talking about?):
byte x,y;
short z;
z = x+y; // Error: cannot implicitly convert expression
(cast(int)x + cast(int)y) of type int to short
// Repeat for ubyte, bool, char, wchar and *, -, /
http://d.puremagic.com/issues/show_bug.cgi?id=3147 You may want to add
to it.
Before going too far, consider:
byte x, y, z;
short a;
a = x + y + z;
How far should the logic go?
Arbitrarily far for any given expression, which is the beauty of it all.
In the case above, the expression is evaluated as (x + y) + z, yielding
a range of -byte.min-byte.min to byte.max+byte.max for the parenthesized
part. Then that range is propagated to the second addition yielding a
final range of -byte.min-byte.min-byte.min to byte.max+byte.max+byte.max
for the entire expression. That still fits in a short, so the expression
is valid.
Now, if you add more than 255 bytes, things won't compile anymore ;o).
Andrei