class Base {
public:
  static Base* getInstance();
  virtual ~Base() {};
protected:
  Base() {};
};

class Derived : public Base {};

// Implementation
Base* Base::getInstance() { return new Derived(); }

int main() {
Base::getInstance();
};