]> git.proxmox.com Git - rustc.git/blob - tests/ui/type-alias-impl-trait/issue-58662-generator-with-lifetime.rs
New upstream version 1.68.2+dfsg1
[rustc.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 }