Yes. At least it is the only way I know of.

const_cast will only work on the shared_ptr not on the vector and in that case implicit conversion will also work (returning shared_ptr< const ...>). creation of a new vector containing shared_ptr<const ...> using vector(begin, end) constructor or, the more dirty but faster, reinterpret_cast on the vector is the only way. 

I think reinterpret_cast< std::vector<const boost::shared_ptr> >( myDataVec ) should work since it takes the data block and reinterprets it. Const is nothing on the data, just keywords for the compiler, so it should work.