#include <iostream>

class Foo {
  public:
    virtual void bar(void*) { std::cout << "Called: bar(void*)" << std::endl; }
    virtual void bar(Foo*)  { std::cout << "Called: bar(Foo*)"  << std::endl; }
    
    virtual ~Foo() = default;
};

class FooTwo : public Foo {};

int main() {
    Foo foo;
    FooTwo footwo;
    
    foo.bar(&foo);
    foo.bar(&footwo);
    
    footwo.bar(&foo);
    footwo.bar(&footwo);
}