//@ build-pass | |
//@ compile-flags:-Zmir-opt-level=3 | |
struct D; | |
trait Tr { | |
type It; | |
fn foo(self) -> Option<Self::It>; | |
} | |
impl<'a> Tr for &'a D { | |
type It = (); | |
fn foo(self) -> Option<()> { | |
None | |
} | |
} | |
fn run<F>(f: F) | |
where | |
for<'a> &'a D: Tr, | |
F: Fn(<&D as Tr>::It), | |
{ | |
let d = &D; | |
while let Some(i) = d.foo() { | |
f(i); | |
} | |
} | |
fn main() { | |
run(|_| {}); | |
} |