[rust-dev] Help understanding lifetimes.

Niko Matsakis niko at alum.mit.edu
Thu Dec 27 15:26:16 PST 2012


This is actually bug 3148: https://github.com/mozilla/rust/issues/3148

You can use explicit type declarations as a workaround for the time 
being.  Your rewrite also works in the same manner: it overcomes a 
shortcoming in the region inferencer.  I hope we can fix this soon, it's 
not terribly difficult.





Niko

Steven Blenkinsop wrote:
> Turns out the issue was borrowing from a reborrowed value.  i.e. this 
> doesn't work:
>
> fn rereborrow(v: &r/int) -> &r/int {
> &*&*v
> }
>
> I've filed an issue: https://github.com/mozilla/rust/issues/4285
>
> Incidentally, I can make my original code work by eliminating the 
> intermediate borrow:
>
> struct T1 { value: int }
> struct T2 { t1: option::Option<~T1> }
>
> fn value(t2: &r/T2, def: &r/int) -> &r/int {
>         match t2.t1 {
>                 Some(~T1{value: ref value}) => value,
>                 None => def
>         }
> }
>
> fn main() {
>         let t2 = ~T2{ t1: Some(~T1{ value: 5 }) };
>         let def = ~0;
>         io::println(fmt!("%d", *value(t2, def)));
> }
> _______________________________________________
> Rust-dev mailing list
> Rust-dev at mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev


More information about the Rust-dev mailing list