-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
C-bugCategory: This is a bug.Category: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.T-libsRelevant to the library team, which will review and decide on the PR/issue.Relevant to the library team, which will review and decide on the PR/issue.
Description
I tried this code:
use std::borrow::Cow;
#[derive(Clone)]
enum Test <'a> {
Int(u8),
Array(Cow<'a, [Test<'a>]>),
}
I expected to see this happen: it compiles successfully.
Instead, this happened: it fails to compile with the following error:
error[[E0277]](https://doc.rust-lang.org/stable/error-index.html#E0277): the trait bound `[Test<'a>]: ToOwned` is not satisfied in `Cow<'a, [Test<'a>]>`
--> src/lib.rs:5:11
|
5 | Array(Cow<'a, [Test<'a>]>),
| ^^^^^^^^^^^^^^^^^^^ within `Cow<'a, [Test<'a>]>`, the trait `ToOwned` is not implemented for `[Test<'a>]`
|
= help: the trait `ToOwned` is implemented for `[T]`
= note: required because it appears within the type `Cow<'a, [Test<'a>]>`
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
|
5 | Array(&Cow<'a, [Test<'a>]>),
| +
help: the `Box` type always has a statically known size and allocates its contents in the heap
|
5 | Array(Box<Cow<'a, [Test<'a>]>>),
| ++++ +
error[[E0277]](https://doc.rust-lang.org/stable/error-index.html#E0277): the trait bound `[Test<'a>]: ToOwned` is not satisfied in `Test<'a>`
--> src/lib.rs:3:10
|
3 | #[derive(Clone)]
| ^^^^^ within `Test<'a>`, the trait `ToOwned` is not implemented for `[Test<'a>]`
|
= help: the trait `ToOwned` is implemented for `[T]`
note: required because it appears within the type `Test<'a>`
--> src/lib.rs:4:6
|
4 | enum Test <'a> {
| ^^^^
note: required by a bound in `Clone`
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
For more information about this error, try `rustc --explain E0277`.
Meta
As of today's stable version 1.61.1, no versions have ever successfully accepted this code. However I believe there is nothing inherently wrong about it and I have faced this failure for such pattern multiple times already.
Workaround
You can workaround the issue by writing your Cow
-like type.
therealbnut
Metadata
Metadata
Assignees
Labels
C-bugCategory: This is a bug.Category: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.T-libsRelevant to the library team, which will review and decide on the PR/issue.Relevant to the library team, which will review and decide on the PR/issue.