'int' is enough for 'length' to migrate code from x86 to x64
FrankLike via Digitalmars-d
digitalmars-d at puremagic.com
Thu Nov 20 05:26:22 PST 2014
>> auto x = foo();
>> auto y = bar();
>> auto z = baz();
>>
>> if (x - y > z) { ... }
>>
>>
>> This might be a bug, if one of these functions returns an
>> unsigned
>> type. Good luck finding that. Note that if all functions
>> return
>> unsigned, there isn't even any signed-unsigned mismatch.
>>
>> I believe the correct statement, is "With only a bit of care
>> one can use
>> D's unsigned types for positive numbers and believe that one's
>> code is
>> correct, even though it contains subtle bugs."
>
> Well I'm sorry but I quite disagree. -- Andrei
This might be a bug.
'Length' always needs to compare sizes. 'Width' and 'Height' like
it.
************************ dfl/drawing.d line:185 -218
**************************
///
Size opAdd(Size sz)
{
Size result;
result.width = width + sz.width;
result.height = height + sz.height;
return result;
}
///
Size opSub(Size sz)
{
Size result;
result.width = width - sz.width;
result.height = height - sz.height;
return result;
}
///
void opAddAssign(Size sz)
{
width += sz.width;
height += sz.height;
}
///
void opSubAssign(Size sz)
{
width -= sz.width;
height -= sz.height;
}
***********************end*************************
if the type of width and height are size_t,then their values
will be error.
small test:
-----------------------
import std.stdio;
void main()
{
size_t width = 10;
size_t height = 20;
writeln("before width is ",width," ,height is ",height);
height -= 1;
width -= height;
writeln("after width is ",width," ,height is ",height);
}
----------
"after width is " ERROR.
More information about the Digitalmars-d
mailing list