struct A {}; struct B; template struct X: virtual A { template X(TP2* ptr) {} template X(const X) {} }; struct Y : X { Y(A* a) : X(a) {} }; void func1(X); void func2() { A a; Y y(&a); func1(X(&a)); }