File: issue-54779-anon-static-lifetime.rs

package info (click to toggle)
rustc 1.70.0%2Bdfsg1-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 722,120 kB
  • sloc: xml: 147,962; javascript: 10,210; sh: 8,590; python: 8,220; ansic: 5,901; cpp: 4,635; makefile: 4,001; asm: 2,856
file content (49 lines) | stat: -rw-r--r-- 1,036 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 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() {}