Closed
Description
openedon Apr 6, 2020
The following code:
#![feature(negative_impls)]
struct MyType;
impl !Clone for &mut MyType {}
fn main() {}
produces:
Compiling playground v0.0.1 (/playground)
error[E0119]: conflicting implementations of trait `std::clone::Clone` for type `&mut MyType`:
--> src/main.rs:5:1
|
5 | impl !Clone for &mut MyType {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: conflicting implementation in crate `core`:
- impl<T> std::clone::Clone for &mut T
where T: ?Sized;
error: aborting due to previous error
For more information about this error, try `rustc --explain E0119`.
error: could not compile `playground`.
To learn more, run the command again with --verbose.
which reads as: any &mut T where T: ?Sized implements Clone
, which isn't realy true. It realy implements !Clone
.
Perhaps the error message should add a !
in front of the impl to make it more obvious, like this:
= note: conflicting implementation in crate `core`:
- impl<T> !std::clone::Clone for &mut T
where T: ?Sized;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Metadata
Assignees
Labels
Area: Messages for errors, warnings, and lintsCategory: An issue proposing an enhancement or a PR with one.Diagnostics: A diagnostic that is giving misleading or incorrect information.Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.#![feature(negative_impls)]Relevant to the compiler team, which will review and decide on the PR/issue.