1 // PR c++/87554 2 // { dg-options "-O" } 3 4 template < class a > class b { 5 static void c(a); create()6 static a &create() { c(instance); return mya; } 7 8 static a mya; 9 10 public: d()11 static a d() { create(); return a(); } 12 static a &instance; 13 }; 14 template < class a > a &b< a >::instance = create(); 15 class e; 16 class f { 17 public: operator()18 void operator()(int g) { h(g); } h(a i)19 template < class a > void h(a i) { p(j, i); } 20 e *j; 21 }; 22 class e : public f { 23 public: 24 e(int); 25 }; 26 struct k { 27 int l; 28 }; p(m,a)29template < class m, class a > void p(m, a) { b< k >::d(); } 30 extern template class b< k >; 31 int n; 32 int o; test()33void test() { 34 e out(o); 35 out(n); 36 } 37