class Abstract {
public:
virtual void f() = 0;
};
class LeftDerived : public virtual Abstract { // bug disappears if not virtual
public:
virtual void f();
};
class RightDerived : public virtual Abstract { // bug disappears if not virtual
public:
virtual void f();
};
class Confluence : public LeftDerived, public RightDerived {
// bug disappears if not multiple inheritance
public:
virtual void f();
};
int main() {
Confluence c;
return 0;
}
void LeftDerived::f() {}
void RightDerived::f() {}
void Confluence::f() {}