Quelle est la façon correcte d'utiliser la durée de vie avec un struct dans la Rouille?

Je veux écrire cette structure:

struct A {
    b: B,
    c: C,
}

struct B {
    c: &C,
}

struct C;

La B.c doit être emprunté auprès de la A.c.

A ->
  b: B ->
    c: &C -- borrow from --+
                           |
  c: C  <------------------+

C'est ce que j'ai essayé:
struct C;

struct B<'b> {
    c: &'b C,
}

struct A<'a> {
    b: B<'a>,
    c: C,
}

impl<'a> A<'a> {
    fn new<'b>() -> A<'b> {
        let c = C;
        A {
            c: c,
            b: B { c: &c },
        }
    }
}

fn main() {}

Mais il échoue:

error[E0597]: `c` does not live long enough
  --> src/main.rs:17:24
   |
17 |             b: B { c: &c },
   |                        ^ borrowed value does not live long enough
18 |         }
19 |     }
   |     - borrowed value only lives until here
   |
note: borrowed value must be valid for the lifetime 'b as defined on the method body at 13:5...
  --> src/main.rs:13:5
   |
13 |     fn new<'b>() -> A<'b> {
   |     ^^^^^^^^^^^^^^^^^^^^^

error[E0382]: use of moved value: `c`
  --> src/main.rs:17:24
   |
16 |             c: c,
   |                - value moved here
17 |             b: B { c: &c },
   |                        ^ value used here after move
   |
   = note: move occurs because `c` has type `C`, which does not implement the `Copy` trait

J'ai lu la Rouille de documentation sur les droits de propriété, mais je ne sais toujours pas comment le résoudre.

Frère de références (c'est à dire, la référence à la partie de la même structure) n'est pas possible dans la Rouille.

OriginalL'auteur Quan Brew | 2014-12-21