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)30void fn1(D &p1) { G(p1, a); } 31