// PR c++/31027 struct A {}; template<typename T> struct C: virtual A { C() {} template<typename T_OTHER> C(const C<T_OTHER>&) {} C func(const class C<long>&) const; operator bool() const; }; template<typename T> struct D: C<T> { void func2() { C<int>a; a.func(a); } }; void func3() { C<int>a; a.func(a); }