| //@ run-rustfix | |
| #![allow(warnings)] | |
| // Test that suggestion to add `*` characters applies to implementations of `Deref` as well as | |
| // references. | |
| struct Foo(i32); | |
| struct Bar(String); | |
| impl std::ops::Deref for Foo { | |
| type Target = i32; | |
| fn deref(&self) -> &Self::Target { | |
| &self.0 | |
| } | |
| } | |
| impl std::ops::Deref for Bar { | |
| type Target = String; | |
| fn deref(&self) -> &Self::Target { | |
| &self.0 | |
| } | |
| } | |
| fn main() { | |
| let x = Foo(42); | |
| let y: i32 = *x; //~ ERROR mismatched types | |
| let a = &42; | |
| let b: i32 = *a; //~ ERROR mismatched types | |
| // Do not make a suggestion when adding a `*` wouldn't actually fix the issue: | |
| let f = Bar("bar".to_string()); | |
| let g: String = f.to_string(); //~ ERROR mismatched types | |
| } |