[fpc-pascal] Enum range check error
Jonas Maebe
jonas at freepascal.org
Wed Oct 21 22:08:33 CEST 2020
On 21/10/2020 21:59, Ryan Joseph via fpc-pascal wrote:
> Is this a bug in generics with default()?
>
> =====================
>
> type
> TEnum = (Unused = '.');
> generic TSomething<T> = class
> function Get: T;
> end;
> TEnumeratedSomething = specialize TSomething<TEnum>;
>
> function TSomething.Get: T;
> begin
> // Range check error while evaluating constants (0 must be between 46 and 46)
> exit(Default(T));
> end;
See https://bugs.freepascal.org/view.php?id=34972 for some comments
about Default. So this is a bug in the usage of Default, since Default
cannot be guaranteed to return a valid value for a type.
It is even technically impossible to make Default return a valid value
for every type due to variant records (you could have overlapping
"field1: 1..3;" and "field2: 4..6;").
Jonas
More information about the fpc-pascal
mailing list