rust-dev-
In general, we need to ensure that for an expression `<source> as
<target>` that any borrowed pointers in the type of <source> are not
obscured [1] by the cast.
A collection of conditions sufficient to enforce this are listed in a
comment in librustc/middle/kind.rs that I think is apropos here:
https://github.com/mozilla/rust/blob/master/src/librustc/middle/kind.rs#L488
However, there are probably other conditions that would also suffice
that we might add to that set.
In particular, I do not see anything immediately wrong with your
example; the type-expression `&'a V` should ensure that `V` does not
contain any lifetimes that are shorter than 'a, and therefore it should
be safe to cast `v: &'a V` to a `&'a T`.
I have filed this as issue #10766 [2].
Cheers,
-Felix
[1] https://github.com/mozilla/rust/issues/5723
[2] https://github.com/mozilla/rust/issues/10766
On 30/11/2013 23:22, Christian Ohler wrote:
Hi all,
I'm trying to learn rust and ran into an error message I don't
understand, and would appreciate some help. This code:
trait T {}
fn f<'a, V: T>(v: &'a V) -> &'a T {
v as &'a T
}
is rejected with this error message:
trait-cast.rs:4:4: 4:5 error: value may contain borrowed pointers; add
`'static` bound
trait-cast.rs:4 v as &'a T
I'm trying to upcast from V to T so that I can put v in a container of
element type T (in code not shown here). The suggestion to add a
'static bound doesn't sound like what I'm looking for.
What is the concern about borrowed pointers here? What would an
implementation of T and a caller of f look like to lead to a safety
problem?
I'm using a version of rust that is a few days old.
Thanks,
Christian.
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev
--
irc: pnkfelix on irc.mozilla.org
email: {fklock, pnkfelix}@mozilla.com
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev