#![allow(unused_mut)] #![feature(generators, generator_trait)] use std::marker::Unpin; use std::ops::Generator; use std::ops::GeneratorState::Yielded; use std::pin::Pin; pub struct GenIter(G); impl Iterator for GenIter where G: Generator + Unpin, { type Item = G::Yield; fn next(&mut self) -> Option { match Pin::new(&mut self.0).resume(()) { Yielded(y) => Some(y), _ => None } } } fn bug<'a>() -> impl Iterator { GenIter(move || { let mut s = String::new(); yield &s[..] //~ ERROR cannot yield value referencing local variable `s` [E0515] //~| ERROR borrow may still be in use when generator yields }) } fn main() { bug(); }