C ++ 11 ponteiros inteligentes e polimorfismo

Eu estou reescrevendo um aplicativo usando ponteiros inteligentes c ++ 11.

Eu tenho uma classe base:

class A {};

E uma classe derivada:

class B : public A {
  public:
  int b;
};

Eu tenho outra classe que contém um vetor com objetos A ou B:

class C {
  public:
  vector<shared_ptr<A>> v;
};

Eu não tenho nenhum problema construindo C com objetos A (classe base), mas como posso preenchê-lo com objetos B (classe derivada)?

Estou tentando isso:

for(int i = 0; i < 10; i++) {
    v.push_back(make_shared<B>());
    v.back()->b = 1;
};  

E o compilador retorna: erro: "classe A" não tem nenhum membro chamado "b"

questionAnswers(2)

yourAnswerToTheQuestion