| // PR c++/87554 |
| // { dg-options "-O" } |
| |
| template < class a > class b { |
| static void c(a); |
| static a &create() { c(instance); return mya; } |
| |
| static a mya; |
| |
| public: |
| static a d() { create(); return a(); } |
| static a &instance; |
| }; |
| template < class a > a &b< a >::instance = create(); |
| class e; |
| class f { |
| public: |
| void operator()(int g) { h(g); } |
| template < class a > void h(a i) { p(j, i); } |
| e *j; |
| }; |
| class e : public f { |
| public: |
| e(int); |
| }; |
| struct k { |
| int l; |
| }; |
| template < class m, class a > void p(m, a) { b< k >::d(); } |
| extern template class b< k >; |
| int n; |
| int o; |
| void test() { |
| e out(o); |
| out(n); |
| } |