2019-04-21 14:00:32 -05:00
|
|
|
// run-rustfix
|
|
|
|
|
|
|
|
#![allow(warnings)]
|
|
|
|
|
|
|
|
// Test that suggestion to add `*` characters applies to implementations of `Deref` as well as
|
|
|
|
// references.
|
|
|
|
|
|
|
|
struct Foo(i32);
|
|
|
|
|
2019-04-22 04:16:47 -05:00
|
|
|
struct Bar(String);
|
|
|
|
|
2019-04-21 14:00:32 -05:00
|
|
|
impl std::ops::Deref for Foo {
|
|
|
|
type Target = i32;
|
2019-04-22 04:16:47 -05:00
|
|
|
fn deref(&self) -> &Self::Target {
|
|
|
|
&self.0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl std::ops::Deref for Bar {
|
|
|
|
type Target = String;
|
|
|
|
fn deref(&self) -> &Self::Target {
|
2019-04-21 14:00:32 -05:00
|
|
|
&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
|
2019-04-22 04:16:47 -05:00
|
|
|
|
|
|
|
// 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
|
2019-04-21 14:00:32 -05:00
|
|
|
}
|