再问一道《C++ Primer》习题(关于dynamic_cast),该如何解决

再问一道《C++ Primer》习题(关于dynamic_cast)
第三版习题19.1.

class   X
{
public:
X(){};
virtual   ~X(){};
};
class   A
{
public:
A(){};
virtual   ~A(){};
};
class   B:public   A
{
public:
B(){};
virtual   ~B(){};
};
class   C:public   B
{
public:
C(){};
virtual   ~C(){};
};
class   D:public   X,public   C
{
public:
D(){};
virtual   ~D(){};
};


int   main()
{

A   *pa=new   D;
X   *px=dynamic_cast <X*> (pa);//答案说这句会失败

return   0;
}

按照书上的答案,上面标记的地方会出错,但是我在VS2005和DEVCPP中试都是正常的,为什么?



------解决方案--------------------
为什么不是d/c之误?
------解决方案--------------------
X *px=dynamic_cast <X*> (pa);//答案说这句会失败
--------------------------------------------
为什么会失败?应该可以阿
------解决方案--------------------
这个地方不应该错的,估计是书上印刷错误。
d从x public继承而来,dynamic_cast刚好可以派上用场。
------解决方案--------------------
那就没着了,D应该刚好能用的。
要是C的话就,你和书就都对了