1/* { dg-do compile } */
2class A;
3class B {};
4struct C {
5  virtual void dispatch();
6  int traversal_map_;
7};
8template <typename> class F : public virtual C {};
9
10struct I : F<A>, F<int> {};
11struct J : B, I {};
12class D {};
13struct L {
14  L(D &, int &p2) : map_(p2) {}
15  virtual void traverse(int &p1) {
16    int &s = p1;
17    names<L>(s, names_);
18  }
19  int &map_;
20  J names_;
21  template <typename> void names(int &, C &p2) { p2.dispatch(); }
22};
23
24struct G : D {
25  G(D &, int &p2) : map_(p2) { L(*this, map_); }
26  int &map_;
27};
28
29int a;
30void fn1(D &p1) { G(p1, a); }
31