struct Foo
{
  Foo() {}
  virtual ~Foo() {}
  virtual int test() const = 0;
};

struct Bar : Foo
{
  Bar() {}
  ~Bar() override {}
  int test() const override { return 0; }
};

int test(Foo const& foo)
{
  return foo.test();
}

int main()
{
  Bar const bar;
  return test(bar);
}