/* { dg-do compile } */ /* { dg-options "-O3 -c -w" } */ template class A; template struct VirtualMatrice { virtual bool m_fn1(int) const { return true; } struct B { A x; B(VirtualMatrice *p1, A p2) : x(p2) { p1->m_fn1(0) ?: throw; } }; void operator*(A p1) { B(this, p1); } ~VirtualMatrice(); } ; template class A { public: operator int *(); A(int *, long); }; class G : public A { public: G(long); }; int typedef Complex; template class H : VirtualMatrice {}; template class C; template <> class C : H, VirtualMatrice { bool m_fn1(int) const { return true; } }; template void DoIdoAction(int, int, A p3, A, A, A, Mat, Mat &p8) { p8 *p3; } class D { typedef int K; class F { int operator()() const; }; }; int D::F::operator()() const { VirtualMatrice *a; VirtualMatrice b, &B = *a; G c(0), g(1); int d, e, f; A h(&g[f], 0), i(&g[e], 0), j(&g[d], 0); DoIdoAction(0, 3, h, i, j, c, b, B); }