#include struct base1 { virtual ~base1() {} }; struct base2 { virtual ~base2() {} }; void fn1( virtual base1& x); void fn2( virtual base2& x); struct derived : base2, base1 { }; void fn1_( static derived&) { std::cerr << "fn1_( derived& called\n"; } void fn2_( static derived&) { std::cerr << "fn2_( derived& called\n"; } int main() { derived d; fn1( d); fn2( d); return 0; }