// { dg-do compile } // { dg-options "-fipa-pure-const -std=c++11" } namespace std { class type_info { public: bool operator==(type_info); }; class c { public: c(int) {} type_info b; virtual void *d() { if (b == typeid(int)) return e(); return nullptr; } int *e() noexcept; }; class h { public: template h(g, f j) { new c(j); } }; class k { protected: int n; k() : i(0, n) {} h i; }; class F : k { public: F(int, int) {} template friend F l(const f &); }; template F l(const f &p1) { F x(int(), p1); return x; } template F m() { l(int()); return F(0, 0); } class D { F p; public: D() : p(m()) {} }; } // namespace std std::D a;