Closed
Description
openedon May 6, 2021
Given the following code: Rust Playground
fn main() {
let f = Fancy{};
let o = Other::new(f);
// ^^^^^^ needs to borrow here but the error does not say so
}
struct Fancy {}
impl <'a> SomeTrait for &'a Fancy {
}
trait SomeTrait {}
struct Other<'a, G> {
a: &'a str,
g: G,
}
// Broadly copied from https://docs.rs/petgraph/0.5.1/src/petgraph/dot.rs.html#70
impl<'a, G> Other<'a, G>
where
G: SomeTrait,
{
pub fn new(g: G) -> Self {
Other {
a: "hi",
g: g,
}
}
}
The current output is:
error[E0277]: the trait bound `Fancy: SomeTrait` is not satisfied
--> src/main.rs:3:24
|
3 | let o = Other::new(f);
| ^ the trait `SomeTrait` is not implemented for `Fancy`
...
24 | pub fn new(g: G) -> Self {
| ------------------------ required by `Other::<'a, G>::new`
|
= help: the following implementations were found:
<&'a Fancy as SomeTrait>
Not really sure about the precise wording, but the help
section should suggest borrowing f
when passing it to Other::new(f)
as rustc has figured out that there is an impl
that just differs by the ownership.
The output is the same on Nightly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment