[fpc-pascal] Can class function used in specialized class use intristic functions Low, High with generic type ?

LacaK lacak at zoznam.sk
Fri Apr 21 14:23:59 CEST 2017


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




More information about the fpc-pascal mailing list