It is true that Arc::map() does not keep the parent Arc alive. This means that the reference to A might be invalidated. One possible solution would be to store Arc in Base rather than A, which would solve the problem of ownership. If the trait could be altered, then the method would be more efficient by taking &self, as it would eliminate the need for cloning and allow for greater freedom in implementation. If none of these are applicable, then the variants would need to be wrapped in Arc<> within AnyT to keep ownership of the enum.