#include <vector>
#include <iostream>
using namespace std;
class CustomFoo {
public:
virtual void do_staff()=0;
};
class Foo: public CustomFoo {
public:
void do_staff() override { cout << "do_staff()\n"; };
};
class FooWrapper {
public:
vector<CustomFoo*> foos;
CustomFoo* operator->() {return foos[0];}
};
int main(){
FooWrapper wrapper;
wrapper.foos.push_back(new Foo());
wrapper->do_staff();
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEN1c3RvbUZvbyB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBkb19zdGFmZigpPTA7Cn07CgpjbGFzcyBGb286IHB1YmxpYyBDdXN0b21Gb28gewpwdWJsaWM6CiAgICB2b2lkIGRvX3N0YWZmKCkgb3ZlcnJpZGUgeyBjb3V0IDw8ICJkb19zdGFmZigpXG4iOyB9Owp9OwoKCmNsYXNzIEZvb1dyYXBwZXIgewpwdWJsaWM6CiAgICB2ZWN0b3I8Q3VzdG9tRm9vKj4gZm9vczsKICAgIEN1c3RvbUZvbyogb3BlcmF0b3ItPigpIHtyZXR1cm4gZm9vc1swXTt9Cn07CgoKaW50IG1haW4oKXsKCiAgICBGb29XcmFwcGVyIHdyYXBwZXI7CiAgICB3cmFwcGVyLmZvb3MucHVzaF9iYWNrKG5ldyBGb28oKSk7CiAgICB3cmFwcGVyLT5kb19zdGFmZigpOwp9Cg==