You can usually tell the compiler which overload you want by specifying the type of the function pointer you want e.g.
typedef shared_ptr<B>(*func_type)(const shared_ptr<A>&);
transform( originalVec.begin(), originalVec.end(), targetVec.begin(), bind( (func_type)static_pointer_cast<B,A>, _1) );
But in cases where you get this sort of error from an overloaded function that can't be disambiguated, my preferred solution is often to provide a custom functor that does the call, so that overload resolution is done by the compiler, and you don't have to select an overload e.g.
struct Downcast {
shared_ptr<B> operator()(const shared_ptr<A>& p) const
{ return shared_pointer_cast<B>(p); }
};
transform( originalVec.begin(), originalVec.end(), targetVec.begin(), Downcast() );