Предположим, у меня следующая ситуация с наследованием алмазов:
class A{
public: virtual void foo(){};
};
class B: public virtual A{
public: virtual void foo(){};
};
class C: public virtual A{
public: virtual void foo(){};
};
class D: B, C{};
Последняя строка выдает ошибку компиляции из-за неоднозначности. Насколько я понимаю, проблема в том, что компилятор не знает, какой foo поместить в vtbl D, но зачем вообще будет vtbl для D, если он не определяет свои собственные виртуальные функции?