]> git.lizzy.rs Git - rust.git/blob - tests/ui/type-alias-impl-trait/issue-58662-generator-with-lifetime.rs
Auto merge of #106916 - lukas-code:overlapping-substs, r=estebank
[rust.git] / tests / ui / type-alias-impl-trait / issue-58662-generator-with-lifetime.rs
1 // check-pass
2
3 #![feature(generators, generator_trait)]
4 #![feature(type_alias_impl_trait)]
5
6 use std::ops::{Generator, GeneratorState};
7 use std::pin::Pin;
8
9 type RandGenerator<'a> = impl Generator<Return = (), Yield = u64> + 'a;
10 fn rand_generator<'a>(rng: &'a ()) -> RandGenerator<'a> {
11     move || {
12         let _rng = rng;
13         loop {
14             yield 0;
15         }
16     }
17 }
18
19 pub type RandGeneratorWithIndirection<'c> = impl Generator<Return = (), Yield = u64> + 'c;
20 pub fn rand_generator_with_indirection<'a>(rng: &'a ()) -> RandGeneratorWithIndirection<'a> {
21     fn helper<'b>(rng: &'b ()) -> impl 'b + Generator<Return = (), Yield = u64> {
22         move || {
23             let _rng = rng;
24             loop {
25                 yield 0;
26             }
27         }
28     }
29
30     helper(rng)
31 }
32
33 fn main() {
34     let mut gen = rand_generator(&());
35     match unsafe { Pin::new_unchecked(&mut gen) }.resume(()) {
36         GeneratorState::Yielded(_) => {}
37         GeneratorState::Complete(_) => {}
38     };
39 }