>
> 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).


Yes, I can confirm, that in 3.1.1 it works, in 3.0.2 does not.
Thank you Sven

-Laco.

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

Reply via email to