Hello,

I have tried to create an example as minimalistic as possible. I have three 
files:

*** file: pathfinding.pas ***

unit PathFinding;

{$mode objfpc}

interface

type generic TAStar<T> = class (TObject)
  public function FindPath (const AStart: T; const ADestination: T): Boolean; 
virtual;
end;

implementation

function TAStar.FindPath (const AStart: T; const ADestination: T): Boolean;
  var current: T;
  begin
    current:=Default(T);
    if (current = ADestination) then Exit (false);
  end;

end.

*** file: testtypes.pas ***

unit testTypes;

{$mode objfpc}

interface

type TTileSegment = record
  A: NativeUInt;
  B: NativeUInt;
end;

operator = (ALeft: TTileSegment; ARight: TTileSegment): Boolean;
operator < (ALeft: TTileSegment; ARight: TTileSegment): Boolean;
operator > (ALeft: TTileSegment; ARight: TTileSegment): Boolean;

implementation

operator = (ALeft: TTileSegment; ARight: TTileSegment): Boolean;
  begin
    Exit (True);
  end;

operator < (ALeft: TTileSegment; ARight: TTileSegment): Boolean;
  begin
    Exit (True);
  end;

operator > (ALeft: TTileSegment; ARight: TTileSegment): Boolean;
  begin
    Exit (True);
  end;

end.

*** file: project1.lpr ***

program project1;

{$mode objfpc}

uses testtypes, PathFinding;

var x: specialize tastar<ttilesegment>;

begin
  x := specialize tastar<ttilesegment>.create;
end.

************** 

When compiling, I get this error:

pathfinding.pas(17,17) Error: Operator is not overloaded: "TTileSegment" = 
"TTileSegment"

Which I don't understand -- because the "=" operator is defined in 
tesstypes.pas.

Am I doing something wrong or is this behavior a bug?

Kind regards,
Thomas

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

Reply via email to