Salve a tutti,
come posso fare in modo di sostituire i puntatori tradizionali con gli shared_ptr in un codice di questo tipo ?

codice:
#include <iostream>
#include <tr1/memory>
#include <list>

using namespace std;
using namespace std::tr1;

class Base;
class Derived;

typedef Base* spBase_t;
typedef Derived* spDerived_t;

class Base
{
public:
 int type;
};

class Derived : public Base
{
 public:
   void print() { cout << "Hello from Derived" << endl ; } 
};

int main()
{
  list<spBase_t> l; 			//list of ponters to Base object
  
  spBase_t  d1( new Derived() ); 	//create derived objects
  spBase_t  d2( new Derived() ); 	//create derived objects
  l.push_back(d2);
  l.push_back(d2);

  for (list<spBase_t>::iterator i = l.begin(); i!= l.end(); i++)
  {
    ( (spDerived_t)(*i) )->print();
    //current->print();
  }
}
Se provo a sostituire banalmente le righe
codice:
typedef Base* spBase_t;
typedef Derived* spDerived_t;
con
codice:
typedef shared_ptr<Base> spBase_t;
typedef shared_ptr<Derived> spDerived_t;
il compilatore (gcc 4.2.) restituisce un errore del tipo:

/usr/include/c++/4.2.1/tr1/boost_shared_ptr.h:562: error: invalid conversion from ‘Base* const’ to ‘Derived*’

Grazie!