migrate to std::shared_ptr, compiles