[fpc-devel] Issue with const constraint in Delphi mode specialize (Fun with Delphi mode)

Martin Frb lazarus at mfriebe.de
Wed Nov 26 21:15:42 CET 2025


It appears the below code can distinguish between the 2 TFoo (generic vs 
constant).

But if the constraint to the generic is an "const integer" then how to 
you specialize it?
The 2 commented lines give errors.
    project1.lpr(16,14) Error: Identifier not found "TBar"

Originally I had a "var TBar: integer" too, but then it was
    project1.lpr(16,16) Error: Illegal expression


program Project1; {$Mode delphi}
type
   TBar<const A: integer> = class   end;
   TFoo<A> = class   end;
var
   TFoo: integer;
   x: pointer;

begin
   x := Pointer( TFoo<1> false );  // (TFoo < 1) > False
   x := Pointer( TFoo<byte> .Create );

   //x := TBar<1> .Create ;
   //x := Pointer( TBar<1> .Create );
end.

     ================================
Also got issues with

program Project1; {$Mode delphi}
uses Unit1;
type    TFoo<A> = class   end;
var
   TFoo: integer;
   x: pointer;
begin
   x := Pointer( TFoo<1> false );  // variable TFoo
   x := Pointer( TFoo< TObject);  // variable TFoo

//but trying to continue the bool exression with another compare
   x := Pointer( TFoo< TObject > False); // ERROR
end.


unit Unit1; {$mode ObjFPC}{$H+} interface
    type   TClass = class of TObject;
    operator <(a: integer; b: TClass): boolean;
implementation
operator<(a: integer; b: TClass): boolean;  begin result:=true;  end;
end.



More information about the fpc-devel mailing list