On 20.04.2017 14:37, Sven Barth via fpc-pascal wrote:
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


I think that this was the bug report and which you did fix back then : <url:http://bugs.freepascal.org/view.php?id=28832>

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

Reply via email to