Delphi Compiler Error
W1023 Comparing signed and unsigned types – widened both operands
Reason for the Error & Solution
To compare signed and unsigned types correctly the compiler must promote both operands to the next larger size data type.
To see why this is necessary, consider two operands, a Shortint with the value -128 and a Byte with the value 130. The Byte type has one more digit of precision than the Shortint type, and thus comparing the two values cannot accurately be performed in only 8 bits. The proper solution for the compiler is to promote both these types to a larger, common, size and then to perform the comparison.
program Produce; var s : shortint; b : byte; begin s := -128; b := 130; assert(b < s); end.