// { dg-do compile } // { dg-options "-O2 -std=gnu++11" } template class A { reference_type *m_pBody; public: A (const A &) { m_pBody->acquire (); } }; class B; class C { protected: B *_pInterface; }; template class I : C { public: I (interface_type *); }; class B { public: virtual void acquire (); }; class D { protected: void acquire (); }; template class J : D, public Ifc1 { void acquire () { D::acquire (); } }; class K : B { }; class L; class F { A m_pDocument; F (A const &, int &&); }; class XUnoTunnel; class XEventTarget; template class WeakImplHelper3 : D, B { void acquire () { D::acquire (); } }; template class G { public: void acquire () { WeakImplHelper3 (); } }; struct H { H () : mxAttribList (new J), mxCurrentHandler (0), mxDocHandler (0), mxTokenHandler (0) { } I > mxAttribList; I mxCurrentHandler; I mxDocHandler; I mxTokenHandler; }; class L : public G { }; class M : public J { public: M (); }; template I::I (interface_type *p1) { B *a = static_cast (static_cast (p1)); _pInterface = a; _pInterface->acquire (); } F::F (A const &p1, int &&) : m_pDocument (p1) { I (new M); }