So you want strong typing, but then are to lazy to properly type your function definitions?
> # fun x -> x + 1;;
> - : int -> int = <fun>
>2) inferring the type is int isn’t guaranteed to be correct in this case
No it’s not. It’s Optional[int] -> int at minimum. There are other completely valid signatures beyond that too.
That's the downside of operator overloading - since it relies on types to resolve, they need to be known and can't be inferred.