class I : J
{
};
class K : J, public D<I>
{
};
struct F
{
K *operator->();
};
class N : public K
{
void m_fn1 (int &p1, int);
I mean;
void m_fn1 (I &) const {}
};
class L;
struct M : F
{
L *operator->();
};
class L : J
{
public:
F poseChange;
};
class G
{
G ();
};
M h;
G::G () try
{
N f;
f.m_fn2 ();
throw;
}
So, what about (crashes trunk and 4.8.3) :
class J
{
public:
J ();
virtual void m_fn1 (int &p1, int);
};
template <class TDATA> class D
{
public:
virtual void m_fn1 (TDATA &) const;
void m_fn2 ()
{
TDATA p;
m_fn1 (p);
}
};
class I : J
{
};
class K : J, public D<I>
{
};
struct F
{
K *operator->();
};
class N : public K
{
void m_fn1 (int &p1, int);
I mean;
void m_fn1 (I &) const {}
};
class L;
struct M : F
{
L *operator->();
};
class L : J
{
public:
F poseChange;
};
class G
{
G ();
};
M h;
G::G () try
{
N f;
f.m_fn2 ();
throw;
}
catch (int) {}
void fn1 () { h->poseChange- >m_fn2 (); }