#include<boost/mpl/vector.hpp>
#include<boost/mpl/at.hpp>
#include<boost/mpl/transform.hpp>

template<class Seq>
struct add_shared : boost::mpl::transform< Seq, boost::shared_ptr< boost::mpl::_> > {};

int main()
{
  typedef add_shared< boost::mpl::vector<char,int,float> >::type s_t;

  cout << typeid(boost::mpl::at_c<s_t,0>::type).name() << endl;
  cout << typeid(boost::mpl::at_c<s_t,1>::type).name() << endl;
  cout << typeid(boost::mpl::at_c<s_t,2>::type).name() << endl;

  return 0;
}
