A field doesn't implement `Copy` — the whole struct can't either.
#[derive(Copy, Clone)]
struct User { id: u64, name: String } // E0204: String is not Copy
Copy requires every field to be Copy. String owns heap allocation and implements Drop, which is incompatible with Copy's "trivial bitwise duplication" semantics.
- Drop Copy. Keep Clone if duplication is needed: #[derive(Clone)].
- Replace heap-owned fields with Copy types: [u8; 32] instead of String, an enum tag instead of a Vec.
- For numeric IDs, use a newtype: pub struct UserId(u64) is Copy.
- For shared but cheap-to-clone string content, use Arc<str> and derive(Clone) only.