#include <iostream>
#include <vector>
using namespace std;
template <class T>
class templateWithVector {
public:
std::vector<T*> vec;
T* getFromVector(unsigned int idx) const { return idx < vec.size() ? vec[idx] : nullptr; }
};
class classBase {
public:
virtual std::ostream& doGet(std::ostream& s) const { return s; } // do nothing by default
virtual ~classBase(){};
};
class bSpecifics {};
class B : public classBase, public templateWithVector<bSpecifics> {
public:
B() {
for (int i = 0; i < 3; i++)
vec.push_back(new bSpecifics());
}
virtual std::ostream& doGet(std::ostream& s) const override {
return s << "B: " << getFromVector(1) << '\n';
}
};
class C : public classBase {
};
int main() {
classBase&& myB = B();
myB.doGet(std::cout);
classBase&& myC = C();
myC.doGet(std::cout);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIHRlbXBsYXRlV2l0aFZlY3RvciB7CnB1YmxpYzoKICAgIHN0ZDo6dmVjdG9yPFQqPiB2ZWM7CgogICAgVCogZ2V0RnJvbVZlY3Rvcih1bnNpZ25lZCBpbnQgaWR4KSBjb25zdCB7IHJldHVybiBpZHggPCB2ZWMuc2l6ZSgpID8gdmVjW2lkeF0gOiBudWxscHRyOyB9Cn07CgpjbGFzcyBjbGFzc0Jhc2UgewpwdWJsaWM6CiAgICB2aXJ0dWFsIHN0ZDo6b3N0cmVhbSYgZG9HZXQoc3RkOjpvc3RyZWFtJiBzKSBjb25zdCB7IHJldHVybiBzOyB9IC8vIGRvIG5vdGhpbmcgYnkgZGVmYXVsdAogICAgdmlydHVhbCB+Y2xhc3NCYXNlKCl7fTsKfTsKY2xhc3MgYlNwZWNpZmljcyB7fTsKCmNsYXNzIEIgOiBwdWJsaWMgY2xhc3NCYXNlLCBwdWJsaWMgdGVtcGxhdGVXaXRoVmVjdG9yPGJTcGVjaWZpY3M+IHsKcHVibGljOgogICAgQigpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKICAgICAgICAgICAgdmVjLnB1c2hfYmFjayhuZXcgYlNwZWNpZmljcygpKTsKICAgIH0KICAgIHZpcnR1YWwgc3RkOjpvc3RyZWFtJiBkb0dldChzdGQ6Om9zdHJlYW0mIHMpIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICByZXR1cm4gcyA8PCAiQjogIiA8PCBnZXRGcm9tVmVjdG9yKDEpIDw8ICdcbic7CiAgICB9Cn07CgpjbGFzcyBDIDogcHVibGljIGNsYXNzQmFzZSB7Cn07CgppbnQgbWFpbigpIHsKICAgIGNsYXNzQmFzZSYmIG15QiA9IEIoKTsKICAgIG15Qi5kb0dldChzdGQ6OmNvdXQpOwogICAgY2xhc3NCYXNlJiYgbXlDID0gQygpOwogICAgbXlDLmRvR2V0KHN0ZDo6Y291dCk7Cn0=