Ahoj,
našel jsem následující bug v Boland C++ Builderu 6.
V následujícím programu

Kód:
---------------------------------------------------------------
#include<vcl.h>
class A
{
public:
virtual char* a()=0;
};

class B
{
public:
virtual char* b()=0;
};


class C:public TObject, public A
{
        int rr;
public:
        virtual char* a()
                {return "A";};
};

class D:public C, public B
{
        int dd;
        virtual char* b()
                {return "B";};
};


WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        D* d=new D;
        B* b=d;
        char *result=b->b();  //Vrátí "A" !!!!!!!
        delete d;
        return 0;
}
třída D přetypovaná na B nepředpokládá, že mezi ní a interfacem
B je již "přilepen" interface A - a asi proto pak přetypovaná na B
volá metody z VMT objektu A, nikoli B (tzn. volá metodu na
správném místě VMT, ale ve špatné VMT - ověřeno na
složitějším příkladě).
Celé se to takto chová, pouze pokud je base class pascalského typu,
nepodědím-li třídu C z TObject, chová se to tak jak má.

Nevíte někdo, jestli na to neexistuje nějaký patch či workaround
či tak?

Díky, hezký den,
Matyáš