added smart_ptr fork