/* { dg-do compile } */ /* { dg-options "-O2 -std=c++11 -w" } */ template struct A { _T1 first; _T2 second; template A(_U1 &&p1, _U2 p2) : first(p1), second(p2) {} }; class B { public: B(char *); }; struct C { virtual ~C(); }; struct D { virtual void registerReporter(B const &, int *) = 0; }; template class F { public: void _M_get_insert_unique_pos(); template A _M_emplace_unique(_Args &&...); }; template template A F<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_unique( _Args &&...) try { _M_get_insert_unique_pos(); } catch (...) { } class G { F _M_t; public: void insert(A p1) { _M_t._M_emplace_unique(p1); } }; class H { public: void registerReporter(B const &p1, int *p2) { A a(p1, p2); m_factories.insert(a); } G m_factories; }; namespace { class J : C, D { void registerReporter(B const &p1, int *p2) { m_reporterRegistry.registerReporter(p1, p2); } H m_reporterRegistry; }; J fn1(); } // namespace void fn2() { fn1(); } D &fn3(); class I { public: I(B p1) { fn3().registerReporter(p1, new int); } }; namespace { I b(""); }