Is there any benefit in additional reference here

Hi,

I’ve seen this code:

let pair = Arc::new((Mutex::new(false), Condvar::new()));
//then later
let &(ref m, ref c) = &*pair;

is there any benefit using here additional reference, because this also works:

let pair = Arc::new((Mutex::new(false), Condvar::new()));
//then later
let (ref m, ref c) = *pair;

and result is the same - m and c are references to tuple parts?

Thanks
Ivan

Both are identical, so is;
let (m, c) = &*pair;
The ref gets implied by use of & on rhs.

Ok then I have for ways how to write same thing:

#[derive(PartialEq,Eq,Debug)]
struct Tukan;

fn main() {
    let pair = Box::new((Tukan, Tukan));
    //then later
    let &(ref m, ref c) = &*pair;
    let (ref m, ref c) = *pair;
    let (m, c) = &*pair;
    //and can also use ref explicitly
    let (ref m1, ref c1) = &*pair;

    let res = *m == * m1;
    assert!(res);
}

Is some pattern more idiomatic? Or it does not not matter?