Am 20.04.2017 13:02 schrieb "LacaK" <la...@zoznam.sk>:
>
> Hi *,
>
> I have some generic class:
>
> generic T2DNumericArray<T> = object(specialize T2DArray<T>)
>     public
>       class function Truncate(Value: double): T; inline;
>       ...
>
> In class function Truncate I want check if supplied Value is in range of
T.
> T will be always ordinal type (byte, integer) ... (I know this, but
compiler does not of course)
>
> Can I use in :
>
> class function T2DNumericArray.Truncate(Value: double): T;
> begin
>   if Value > High(T) then
>     Result := High(T)
>   else if Value < Low(T) then
>     Result := Low(T)
>   else
>     Result := Value;
> end;
>
> I understand, that from compiler POV T can be any type, so High() and
Low() can be invalid, but I wonder if there is any way how to solve this.

The compiler will use dummy values while parsing the generic, but during
specialization it will use the correct ones. Though it might be that you'd
need 3.1.1 for it (dont know right now when I had fixed that).

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to