boost::shared_ptr templated constructor?