Non-trivial. It’s easy to lose focus. Focus on the fundamental principles — only a few.
– Fundamental — override is strict . If overriding, then vtbl dynamic binding. Simple and clear. Otherwise, it’s always, always static binding.
– Fundamental — if static binding, then remember the hiding rule. Per-name basis — See [[Eff C++] last item. As a result, some base class methods become unavailable — compiler errors. 
– Fundamental — compiler attempts implicit type conversion on every argument.
Redefining is an important special case of hiding, but fundamentally, it’s plain vanilla function hiding.
It was said that Overriding resolution is done “after” hiding? Does it mean that the hiding rules kick in first before system goes through overriding resolution? But I don’t think hiding would kick in at all.
 see http://bigblog.tanbin.com/2011/02/runtime-binding-is-highly-restrictive.html
 Fixable with a local “using” directive — Using Defeats Hiding