1// { dg-do run  }
2// Test that various calls to non-functions work.
3
4void f () { }
5
6typedef void (*fptr)();
7typedef void (&fref)();
8fptr p = f;
9fref r = f;
10const fptr &pr = p;
11
12struct A {
13  fptr p;
14
15  A (fptr n): p(n) { }
16  operator fptr () { return p; }
17};
18
19struct B {
20  fref r;
21
22  B (fptr n): r(*n) { }
23  operator const fref () { return r; }
24};
25
26struct C {
27  const fptr pr;
28
29  C (fptr n): pr(n) { }
30  operator const fptr& () { return pr; }
31};
32
33int main ()
34{
35  f();
36
37  p();
38  r();
39  pr();
40
41  A a (f);
42  a();
43  a.p();
44
45  B b (f);
46  b();
47  b.r();
48
49  C c (f);
50  c();
51  c.pr();
52}
53