No. A candidate is selected statically by the compiler based on the static types of the receiver and the arguments. Then, at runtime, only the dynamic type of the receiver is used to bind the invocation to the most specific overriding method. The dynamic types of the arguments play no role in the dynamic binding phase.
In your particular case this means that for the call derived->method(1);
, the compiler looks at the static types of the receiver (Base
) and of the actual arguments (int
). It then searches, among all methods of Base
(inherited or declared in Base
) for the one that matches best; this is Base::method(int)
. At runtime, the runtime system looks at the dynamic type of the receiver (Derived
) for the most specific method that overrides Base::method(int)
, which is Derived::method(int)
, and calls that method with the given actual argument (1
).
Likewise for the second call.