struct S(#[allow(unused_tuple_struct_fields)] Option<&'static T>); trait Tr { type Out; } impl Tr for T { type Out = T; } impl Copy for S where S: Tr {} impl Clone for S where S: Tr { fn clone(&self) -> Self { *self } } fn main() { let t = S::<()>(None); drop(t); drop(t); //~ ERROR use of moved value }