Was Du hier vorhast ist ja auch etwas merkwürdig.
Stimmt. Aber in dem speziellen Fall ist das "übliche" Verhalten gewollt (es ist ja auch die Standardeinstellung). Nur will ich es mitbekommen.
Das mit einem Int64 (bzw. allgemein größeren Zahl) ist es auch möglich (man prüft mit if ob Max überschritten wurde), ich hatte aber fixe Idee die Rechnung normal auszuführen und die Info vom System zu erhalten.
Das "Problem" ist, dass das eigentlich einfach zu lösen ist, also ein paar Dummy-Variablen usw. Nur so dumm ist der Compiler nicht. Wenn er er glaubt, dass eine Rechnung nicht nötig ist, und prüfen auf Error ist eigentlich unsinnig, dann ignoriert er die Routine.
//EDIT:
Also das kürzeste was ich hin bekomme (hier im Beispiel mit Byte) ist das:
Delphi-Quellcode:
function IncByte(var X: Byte; N: Byte = 1): Boolean;
function IncTest: Boolean;
begin
Result := False;
{$OverFlowChecks On}
try
Inc(X, N);
except
on EIntOverflow do
Result := True;
end;
end;
var
X2: Byte;
begin
X2 := X;
Result := IncTest;
{$OverFlowChecks Off}
if Result then
begin
X := X2;
Inc(X, N);
end;
end;
Es müssen zwei Funktionen sein, sonst klappt das nicht.