1// { dg-do assemble  }
2
3struct
4Foo
5{
6public:
7  typedef void* (*copier_fn)(void const*);
8  void foo() const;
9  void bar(char const*, void const*) const;
10private:
11  struct
12  Bar
13  {
14    char const* key;
15    void const* item;
16  };
17};
18
19void
20Foo::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