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)29 template < class m, class a > void p(m, a) { b< k >::d(); }
30 extern template class b< k >;
31 int n;
32 int o;
test()33 void test() {
34   e out(o);
35   out(n);
36 }
37