Ошибка срока службы ржавчины: ожидаемый срок службы, но найденный срок службы

У меня проблема с параметрами времени жизни для структур. Я не уверен на 100%, как описать проблему, но я создал тривиальный случай, который показывает мою ошибку во время компиляции.

struct Ref;

struct Container<'a> {
  r : &'a Ref
}

struct ContainerB<'a> {
  c : Container<'a>
}

trait ToC {
  fn to_c<'a>(&self, r : &'a Ref) -> Container<'a>;
}

impl<'a> ToC for ContainerB<'a> {
  fn to_c(&self, r : &'a Ref) -> Container<'a> {
    self.c
  }
}

Ошибка, которую я получаю с этим

test.rs:16:3: 18:4 error: method `to_c` has an incompatible type for trait: expected concrete lifetime, but found bound lifetime parameter 'a
test.rs:16   fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17     self.c
test.rs:18   }
test.rs:16:48: 18:4 note: expected concrete lifetime is the lifetime 'a as defined on the block at 16:47
test.rs:16   fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17     self.c
test.rs:18   }
error: aborting due to previous error

Я перепробовал много вариантов и просто не могу заставить эту вещь скомпилировать. Я нашел другой пост здесь (Как исправить: ожидаемый конкретный срок службы, но найденный связанный параметр времени жизни) но, похоже, обходит проблему, а не решает ее. Я не могу понять, почему проблема возникает. & Ref передается с помощью ходов, поэтому он должен просто работать правильно?

Есть идеи? Спасибо за помощь.

Ответы на вопрос(1)

Ваш ответ на вопрос