Error code E0204

The Copy trait was implemented on a type which contains a field that doesn't implement the Copy trait.

Erroneous code example:

#![allow(unused)]
fn main() {
struct Foo {
    foo: Vec<u32>,
}

impl Copy for Foo { } // error!
}

The Copy trait is implemented by default only on primitive types. If your type only contains primitive types, you'll be able to implement Copy on it. Otherwise, it won't be possible.

Here's another example that will fail:

#![allow(unused)]
fn main() {
#[derive(Copy)] // error!
struct Foo<'a> {
    ty: &'a mut bool,
}
}

This fails because &mut T is not Copy, even when T is Copy (this differs from the behavior for &T, which is always Copy).