#![feature(associated_type_defaults)] use std::ops::Deref; trait UnsafeCopy { type Copy: Copy = Box; //~^ ERROR the trait bound `Box: Copy` is not satisfied //~^^ ERROR the trait bound `T: Clone` is not satisfied fn copy(x: &Self::Copy) -> Self::Copy { *x } } impl UnsafeCopy for T {} fn main() { let b = Box::new(42usize); let copy = <()>::copy(&b); let raw_b = Box::deref(&b) as *const _; let raw_copy = Box::deref(©) as *const _; // assert the addresses. assert_eq!(raw_b, raw_copy); }