1 // { dg-do compile }
2 
3 int a, b;
4 typedef double (*NormFunc) (const int &);
5 int &
max(int & p1,int & p2)6 max (int &p1, int &p2)
7 {
8   if (p1 < p2)
9     return p2;
10   return p1;
11 }
12 
13 struct A
14 {
operator ()A15   int operator      () (int p1, int p2)
16     {
17       return max (p1, p2);
18     }
19 };
20 template < class, class > double
norm_(const int &)21 norm_ (const int &)
22 {
23   char c, d;
24   A e;
25   for (; a; a++)
26     {
27       b = e (b, d);
28       b = e (b, c);
29     }
30 
31   return 0.0;
32 }
33 
34 void
norm()35 norm ()
36 {
37   static NormFunc f = norm_ < int, A >;
38   f = 0;
39 }
40 
41