| // Regression test for #54779, checks if the diagnostics are confusing. | |
| trait DebugWith<Cx: ?Sized> { | |
| fn debug_with<'me>(&'me self, cx: &'me Cx) -> DebugCxPair<'me, Self, Cx> { | |
| DebugCxPair { value: self, cx } | |
| } | |
| fn fmt_with(&self, cx: &Cx, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result; | |
| } | |
| struct DebugCxPair<'me, Value: ?Sized, Cx: ?Sized> | |
| where | |
| Value: DebugWith<Cx>, | |
| { | |
| value: &'me Value, | |
| cx: &'me Cx, | |
| } | |
| trait DebugContext {} | |
| struct Foo { | |
| bar: Bar, | |
| } | |
| impl DebugWith<dyn DebugContext> for Foo { | |
| fn fmt_with( | |
| &self, | |
| cx: &dyn DebugContext, | |
| fmt: &mut std::fmt::Formatter<'_>, | |
| ) -> std::fmt::Result { | |
| let Foo { bar } = self; | |
| bar.debug_with(cx); //~ ERROR: lifetime may not live long enough | |
| Ok(()) | |
| } | |
| } | |
| struct Bar {} | |
| impl DebugWith<dyn DebugContext> for Bar { | |
| fn fmt_with( | |
| &self, | |
| cx: &dyn DebugContext, | |
| fmt: &mut std::fmt::Formatter<'_>, | |
| ) -> std::fmt::Result { | |
| Ok(()) | |
| } | |
| } | |
| fn main() {} |