use std::{rc::Rc, sync::Arc}; struct BNode { i: i32, next: Option>, } struct RCNode { i: i32, next: Option>, } struct RCCNode { i: i32, next: Option>, } fn capture(v: &T) { std::hint::black_box(v); } fn main() { let node = BNode { i: 1, next: Some(Box::new(BNode { i: 2, next: None, })) }; capture(&node); let node = BNode { i: 1, next: Some(Box::new(BNode { i: 2, next: Some(Box::new(BNode { i: 3, next: None, })), })) }; capture(&node); let dyn_box: Box = Box::new("hello"); capture(&dyn_box); capture(&Some(dyn_box)); let node = RCNode { i: 11, next: None, }; capture(&node); let node = RCNode { i: 11, next: Some(Rc::new(RCNode { i: 22, next: None, })), }; capture(&node); let node = RCNode { i: 11, next: Some(Rc::new(RCNode { i: 22, next: Some(Rc::new(RCNode { i: 33, next: None, })), })), }; capture(&node); let node = RCCNode { i: 11, next: Some(Arc::new(RCCNode { i: 22, next: Some(Arc::new(RCCNode { i: 33, next: None, })), })), }; capture(&node); }