#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::ptr; fn swap(a: &mut T, b: &mut T) { unsafe { let tmp = ptr::read(a); ptr::copy_nonoverlapping(b, a, 1); ptr::write(b, tmp); } } fn main() { let mut foo = "foo".to_owned(); let mut bar = "bar".to_owned(); swap(&mut foo, &mut bar); assert_eq!(foo, "bar"); assert_eq!(bar, "foo"); }