I think the syntax for fpc's way of overloading looks weird but I'm able to make it easily maintainable this way:

[pascal]
{$IFDEF FPC}
operator -(a: single; b: tvector4f) result: tvector4f;
{$ELSE}
class operator tvector4f.Subtract(a: single; b: tvector4f): tvector4f;
{$ENDIF}
begin
result := sub(vector4f(a,a,a,a), b);
end;[/pascal]