The following code:
#[derive(Copy)]
enum MyEnum {
Test
}
Is giving me this error:
error: the trait core::clone::Clone
is not implemented for the type MyEnum
[E0277]
Why is that the case, and how do I fix it?
The Copy
trait is a subtrait of Clone
, so you always need to implement Clone
if you implement Copy
:
#[derive(Copy, Clone)]
enum MyEnum {
Test
}
This makes sense, as both Copy
and Clone
are ways of duplicating an existing object, but with different semantics. Copy
can duplicate an object by just copying the bits that make up the object (like memcpy
in C). Clone
can be more expensive, and could involve allocating memory or duplicating system resources. Anything that can be duplicated with Copy
can also be duplicated with Clone
.
This happens because the trait Copy
, depends on the trait Clone
.
The compiler will not try to infer and implement the trait for you.
So you must explicitly implement the Clone trait as well.
Like that:
#[derive(Copy,Clone)]
enum MyEnum {
Test
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With