| // 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() {} |