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