summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_error_codes/src/error_codes/E0204.md
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0204.md')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0204.md28
1 files changed, 28 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0204.md b/compiler/rustc_error_codes/src/error_codes/E0204.md
new file mode 100644
index 000000000..96e44758b
--- /dev/null
+++ b/compiler/rustc_error_codes/src/error_codes/E0204.md
@@ -0,0 +1,28 @@
+The `Copy` trait was implemented on a type which contains a field that doesn't
+implement the `Copy` trait.
+
+Erroneous code example:
+
+```compile_fail,E0204
+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:
+
+```compile_fail,E0204
+#[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`).