2015-03-19 07:16:40 -04:00
|
|
|
trait Dummy { fn dummy(&self); }
|
|
|
|
|
2019-05-28 14:46:13 -04:00
|
|
|
fn foo1<'a:'b,'b>(x: &'a mut (dyn Dummy+'a)) -> &'b mut (dyn Dummy+'b) {
|
2015-03-19 07:16:40 -04:00
|
|
|
// Here, we are able to coerce
|
|
|
|
x
|
|
|
|
}
|
|
|
|
|
2019-05-28 14:46:13 -04:00
|
|
|
fn foo2<'a:'b,'b>(x: &'b mut (dyn Dummy+'a)) -> &'b mut (dyn Dummy+'b) {
|
2015-03-19 07:16:40 -04:00
|
|
|
// Here, we are able to coerce
|
|
|
|
x
|
|
|
|
}
|
|
|
|
|
2019-05-28 14:46:13 -04:00
|
|
|
fn foo3<'a,'b>(x: &'a mut dyn Dummy) -> &'b mut dyn Dummy {
|
2015-03-19 07:16:40 -04:00
|
|
|
// Without knowing 'a:'b, we can't coerce
|
2022-04-19 12:56:18 +02:00
|
|
|
x
|
2022-04-01 13:13:25 -04:00
|
|
|
//~^ ERROR lifetime may not live long enough
|
2015-03-19 07:16:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
struct Wrapper<T>(T);
|
2019-05-28 14:46:13 -04:00
|
|
|
fn foo4<'a:'b,'b>(x: Wrapper<&'a mut dyn Dummy>) -> Wrapper<&'b mut dyn Dummy> {
|
2015-03-19 07:16:40 -04:00
|
|
|
// We can't coerce because it is packed in `Wrapper`
|
2022-04-19 12:56:18 +02:00
|
|
|
x
|
2022-04-01 13:13:25 -04:00
|
|
|
//~^ ERROR lifetime may not live long enough
|
2015-03-19 07:16:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|