I have the following piece of code (#includes and using namespace std omitted):
class A {
    public:
        void call(){callme();}
    private:
        virtual void callme() {cout << "I'm A" << endl;}
};
class B : public A {
    private:
        virtual void callme() {cout << "I'm B" << endl;}
};
class C : public B {
    public:
        virtual void callme(){ cout << "I'm C" << endl;}
};
int main(){
    vector<A> stuff = {
        A(), B(), C(),
    };
    stuff[0].call(); // output: I'm A
    stuff[1].call(); // output: I'm A
    stuff[2].call(); // output: I'm A
    return 0;
}
As stated in the comments, the output of the above program is:
I'm A
I'm A
I'm A
However, I would like that C++ automatically recognizes the type with which the corresponding element was created. I.e. I would like that C++ outputs
I'm A
I'm B
I'm C
(That is, the compiler shall pick the proper subclass for me.)
Is this possible in this scenario (i.e. if all the elements come out of a vector)?
 
     
    