fact 1 : you are unable to return reference(s) of new object(s) from a function.
fact 2 : so the returned reference(s) must be one(s) of the passed in.
but there is an imperfect , in the following example , c is in fact a reference to G, but compiler think it is a reference of a, so can not compile because of A.
struct S(u8);
static G : S = S(1);
fn first(i :&S) ->&S {
&G
}
fn main() {
let mut a = S(0);
let c = first(&a);
a = S(0); // A
c;
}