Is this a bug or did I do something wrong? The minus operator overload seems to 
be getting confused and I get a "Can't determine which overloaded function to 
call" error as a result.

{$mode objfpc}
{$modeswitch advancedrecords}

program generic_vector;
uses
  Math;

type
  generic TVec2<TScalar> = record
    x, y: TScalar;
    function Magnitude: TScalar;
    function Distance (vec: TVec2): TScalar;
    class operator - (left, right: TVec2): TVec2;  
    class operator - (left: TVec2; right: TScalar): TVec2; 
  end;
  TVec2f = specialize TVec2<Float>;
  TVec2i = specialize TVec2<Integer>;

function TVec2.Magnitude: TScalar;
begin
  result := (x ** 2) + (y ** 2);
end;

function TVec2.Distance (vec: TVec2): TScalar;
begin
  // ----->>> ERROR: Can't determine which overloaded function to call
  result := (self - vec).Magnitude;
end;

class operator TVec2.- (left, right: TVec2): TVec2;
begin
  result.x := left.x - right.x;
  result.y := left.y - right.y;
end;

class operator TVec2.- (left: TVec2; right: TScalar): TVec2; 
begin
  result.x := left.x - right;
  result.y := left.y - right;
end;

begin
end.

Regards,
        Ryan Joseph

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

Reply via email to