//@ run-rustfix | |
use std::ops::Deref; | |
struct Bar(u8); | |
struct Foo(Bar); | |
struct Emm(Foo); | |
impl Deref for Bar{ | |
type Target = u8; | |
fn deref(&self) -> &Self::Target { | |
&self.0 | |
} | |
} | |
impl Deref for Foo { | |
type Target = Bar; | |
fn deref(&self) -> &Self::Target { | |
&self.0 | |
} | |
} | |
impl Deref for Emm { | |
type Target = Foo; | |
fn deref(&self) -> &Self::Target { | |
&self.0 | |
} | |
} | |
fn main() { | |
let a = Emm(Foo(Bar(0))); | |
// Should suggest `&***` even when deref is pretty deep | |
let _: *const u8 = &***a; //~ ERROR mismatched types | |
} |