// PR c++/69649 | |
// { dg-do compile } | |
// { dg-options "-O2" } | |
struct A { virtual void m1 (); }; | |
struct C : A { void m1 () { m1 (); } }; | |
template <class T> struct B | |
{ | |
T *t; | |
B (T *x) : t (x) { if (t) t->m1 (); } | |
B (const B &); | |
}; | |
struct D : public C {}; | |
struct F : public D | |
{ | |
virtual B<D> m2 (); | |
virtual B<D> m3 (); | |
int m4 (); | |
}; | |
struct G : F | |
{ | |
B<D> m2 (); | |
B<D> m3 (); | |
}; | |
B<D> G::m2 () | |
{ | |
if (m4 () == 0) | |
return this; | |
return 0; | |
} | |
B<D> G::m3 () | |
{ | |
if (m4 () == 0) | |
return this; | |
return 0; | |
} |