Particularly, are set and remove_last sound, do they require T: Unpin or unsafe? The relevant part seems to be this Drop Guarantee section std::pin - Rust. Though I don't know if that reads as I can drop old values safely and T will handle notifications by itself.
.push() breaks everything here. Pushing a new element into a Vec may cause a reallocation of existing elements, which moves the T elements. This breaks the Pin guarantee provided via the other methods.