#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);
}