3.2.3 and 3.3.1 on Win 64bit

Trying a generic linked list.
So the specialized class must have an entry for the "next" element. And that entry is of the same type as the class itself.

Now at first, this seems to be not possible using generics, because specialize does not allow to pass in the "partially done" class.
(the 2 commented lines produce "Error: Illegal expression")
Only it does work, if the class is forward declared.

So is it supposed to work?
And if it is in the last case, then what about the other two cases?


program Project1;
type
  generic GenLinkedList<D, T> = class
    Data: D;
    Next: T;
  end;

  //TBar = specialize GenLinkedList<integer, TBar>;
  //TFoo = class(specialize GenLinkedList<integer, TFoo>);

  TSome = class;
  TSome = class(specialize GenLinkedList<integer, TSome>);
begin
end.


Btw, it is the same, if the linked list uses actual pointer.

  generic GenLinkedList<D, T> = class
    type  PT = ^T;
  public
    Data: D;
    NextPtr: PT;
  end;

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to