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