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