It seems that multiplication by a const is evaluated by the compiler before the specialization is complete.
If that is the case, the compiler cannot know if a multiplication is even possible with generics.
IOW the specialization comes too late in mode delphi.
But indeed, although the subject you link to isn't quite the same, using mode objfpc works:
{$MODE objfpc}
generic function Fun<T>(X: T): Integer;
begin
Result :=1;
end;
var
I: Integer;
begin
I := specialize Fun<Integer>(1);
I := specialize Fun<Integer>(1) * -1;
I := -1 * specialize Fun<Integer>(1);
end.
I know you knew that, but just to clarify for other readers.