1struct A {}; 2struct B; 3 4template <class TP> struct X: virtual A { 5 template <class TP2> X(TP2* ptr) {} 6 template <class TP2> X(const X<TP2>) {} 7}; 8 9struct Y : X<B> { 10 Y(A* a) : X<B>(a) {} 11}; 12 13void func1(X<B>); 14 15void func2() { 16 A a; 17 Y y(&a); 18 func1(X<A>(&a)); 19} 20