]> git.lizzy.rs Git - rust.git/blob - tests/ui/lifetimes/issue-103582-hint-for-missing-lifetime-bound-on-trait-object-using-type-alias.rs
Rollup merge of #107769 - compiler-errors:pointer-like, r=eholk
[rust.git] / tests / ui / lifetimes / issue-103582-hint-for-missing-lifetime-bound-on-trait-object-using-type-alias.rs
1 // run-rustfix
2
3 trait Greeter0 {
4     fn greet(&self);
5 }
6
7 trait Greeter1 {
8     fn greet(&self);
9 }
10
11 type BoxedGreeter = (Box<dyn Greeter0>, Box<dyn Greeter1>);
12 //~^ HELP to declare that the trait object captures data from argument `self`, you can add a lifetime parameter `'a` in the type alias
13
14 struct FixedGreeter<'a>(pub &'a str);
15
16 impl Greeter0 for FixedGreeter<'_> {
17     fn greet(&self) {
18         println!("0 {}", self.0)
19     }
20 }
21
22 impl Greeter1 for FixedGreeter<'_> {
23     fn greet(&self) {
24         println!("1 {}", self.0)
25     }
26 }
27
28 struct Greetings(pub Vec<String>);
29
30 impl Greetings {
31     pub fn get(&self, i: usize) -> BoxedGreeter {
32         (Box::new(FixedGreeter(&self.0[i])), Box::new(FixedGreeter(&self.0[i])))
33         //~^ ERROR lifetime may not live long enough
34     }
35 }
36
37 fn main() {
38     let mut g = Greetings {0 : vec!()};
39     g.0.push("a".to_string());
40     g.0.push("b".to_string());
41     g.get(0).0.greet();
42     g.get(0).1.greet();
43     g.get(1).0.greet();
44     g.get(1).1.greet();
45 }