const
minDriveFreeSpace: Int64 = 1024*1024*1024*99;
and
var
minDriveFreeSpace: Int64;
begin
minDriveFreeSpace := 1024*1024*1024*99;
Will emit:
[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation
Is this a bug or limit of Delphi's max. constant integer values?
You need to cast at least one value on the right side to Int64. For instance, both of these compile perfectly well on XE6:
const
minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99;
var
minDriveFreeSpace2: Int64;
begin
minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
Note that it can be any one of the rvalues that are cast. For instance, this works equally as well:
const
minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99);
This is documented in the Delphi language guide (although rather poorly) - emphasis mine:
In general, arithmetic operations on integers return a value of type Integer, which is equivalent to the 32-bit LongInt. Operations return a value of type Int64 only when performed on one or more Int64 operands. Therefore, the following code produces incorrect results:
var
I: Integer;
J: Int64;
...
I := High(Integer);
J := I + 1;
To get an Int64 return value in this situation, cast I as Int64:
...
J := Int64(I) + 1;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With