Why not:

[pascal]
{$ifdef FPC}
type Pbyte=^byte;
{$else}
ppbyte = ^byte;

pbyte = record
value: ppbyte;
class operator Implicit(x: pbyte): ppbyte;
class operator Add(a: pbyte; x: int): pbyte;
class operator Subtract(a: pbyte; x: int): pbyte;
end;
{$endif}
[/pascal]
... so you don't need the ugly pointer arithmetic emulation on FPC's side?