1 // { dg-do assemble  }
2 
3 struct
4 Foo
5 {
6 public:
7   typedef void* (*copier_fn)(void const*);
8   void foo() const;
9   void bar(char const*, void const*) const;
10 private:
11   struct
12   Bar
13   {
14     char const* key;
15     void const* item;
16   };
17 };
18 
19 void
foo()20 Foo::foo() const
21 {
22   Bar* cp = 0;
23   copier_fn copyfn = 0;
24 
25   bar(cp->key, cp->item);
26   bar(cp->key, (copyfn) ? (*copyfn)(cp) : 0);
27   bar(cp->key, (copyfn) ? (*copyfn)(0) : 0);
28 
29   bar(cp->key, (copyfn) ? (*copyfn)(0) : cp->item);
30   bar(cp->key, (copyfn) ? (*copyfn)(cp) : cp->item);
31 }
32