C ++ - typeid (), utilizado en la clase derivada no devuelve el tipo correcto

Quizás no entiendo cómo funciona la herencia aquí, pero aquí está mi problema:

Tengo una opción de clase y una clase RoomOption que se deriva de ella. Tengo otra sala de clase que tiene un vector de shared_ptrs. En main añado un RoomOption a ese vector. Luego, al usar typeid (), verifico el tipo y me dice que es una opción. Por lo que he leído, se supone que typeid devuelve tipos derivados, y shared_ptrs no causa cortes, por lo que no estoy seguro de qué estoy haciendo mal.

Aquí está el código:

Habitación.h:

vector<shared_ptr<Option> > options;
void addOption(shared_ptr<Option>);
shared_ptr<Option> getOption(int);

Room.cpp:

void Room::addOption(shared_ptr<Option> option){
    options.push_back(option);
}

shared_ptr<Option> Room::getOption(int i){
    return options[i];
}

principal:

shared_ptr<Room> outside(new Room(0, "", ""));
outside->addOption(shared_ptr<RoomOption>(new RoomOption(0, "Go inside", hallway)));
cout<<typeid(player->getRoom()->getOption(0)).name().get()<<endl; 
//This line prints "class std::tr1::shared_ptr<class Option>

Se me ocurre que quizás al agregar u obtener una Opción, RoomOption se emita como Opción debido al tipo de retorno / argumento. Si ese es el caso, ¿cómo se supone que debo almacenar un vector de más de un tipo? ¿O estoy entendiendo todo esto mal? = \ Estás pidiendo el tipo de puntero compartido. Intenta obtener el tipo de letra que contiene el puntero compartido.

Respuestas a la pregunta(3)

Su respuesta a la pregunta