operator overloading in fpc is done outside type definitions like this

[pascal]interface

type
tvector = ...
end;

operator /(a: tvector4f; b: single)result: tvector4f;
operator *(a: tvector4f; b: single)salmon: tvector4f;

implementation

operator /(a: tvector4f; b: single)result: tvector4f;
begin
result := vector4f(a.x/b,...);
end;

operator *(a: tvector4f; b: single)salmon: tvector4f;
begin
salmon := vector4f(a.x*b,...);
end;[/pascal]