?

Log in

No account? Create an account

Previous Entry | Next Entry

Скажи "Нет!" наркотикам

А вот, господа C++ программисты, скажите, почему у меня dynamic_cast уходит на подобном в небытие на arm-elf-gcc 3.4.3:


#include <cstdio>

class A
{
public:
A() {}
virtual ~A() {}
int Do1() { return do1(); }
protected:
virtual int do1()=0;
};

class B : virtual public A
{
public:
B() {}
virtual ~B() {}
int Do2() { return do2(); }
protected:
virtual int do1() { return 1; }
virtual int do2() { return 2; }
};

class C : virtual public A
{
public:
C() {}
virtual ~C() {}
int Do3() { return do3(); }
protected:
virtual int do3()=0;
};

class D : public B, public C
{
public:
D() {}
virtual ~D() {}
int Do4() { return do1()+do2()+do3(); }
protected:
virtual int do1() { return B::do1(); }
virtual int do3() { return 3; }
};

class E : virtual public A
{
public:
E() {}
virtual ~E() {}
int Do5() { return do5(); }
protected:
virtual int do5() { return 5; }
};

class F : public E, public D
{
public:
F() {}
virtual ~F() {}
int Do6() { return Do4()+Do5(); }
};

F cl;

int main(int ac, char *av[])
{
A *pA;
F *pF;

pA = &cl;
pF = dynamic_cast<F *>(pA);

printf("%d %d %d\n", pA->Do1(), cl.Do2(), pF->Do6());

return 0;
}


? Под mingw это работает :) rtti вроде не отключал, только эксепшены.

PS: Трава такая ещё и не выросла - не спрашивайте где я её беру :)

Comments

( 2 comments — Leave a comment )
rblaze
Feb. 17th, 2005 05:35 pm (UTC)
Сам cast? Поздравляю, ты нашел баг в компиляторе :)
uncle_asa
Feb. 17th, 2005 05:37 pm (UTC)
Или чего-то отломал, пока собирал всё это в кучу :)
( 2 comments — Leave a comment )