#![allow(dead_code, deprecated, unused_variables, unused_mut)] #![feature(clone_to_uninit)] use std::rc::Rc; trait Foo: std::fmt::Debug + std::clone::CloneToUninit { fn modify(&mut self); fn value(&self) -> i32; } impl Foo for i32 { fn modify(&mut self) { *self *= 10; } fn value(&self) -> i32 { *self } } fn main() { let first: Rc = Rc::new(1234); let mut second = first.clone(); Rc::make_mut(&mut second).modify(); assert_eq!(first.value(), 1234); assert_eq!(second.value(), 12340); }