o.f() and (0, o.f)() have different semantics - the latter is closer to temp = o.f; temp().
For that reason the optimisers see the code being function-call vs. method-call. Given the usage of function and method calls are generally different the compilers make different optimising decisions.