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() {}