RustでDeref時の優先度について質問です。

pub trait T {
    fn func(self);
}

pub struct A {}

impl<'a> T for &'a A {
    fn func(self) {
        println!("impl &A");
    }
}

impl<'a> T for &'a mut A {
    fn func(self) {
        println!("impl &mut A");
    }
}

fn main() {
    let mut a = A {};
    a.func();
}

以上のコードは実行すると

impl &A

と表示されimpl T for &A {}func()が実行されていることが確認できます。ここでimpl T for &A {}の部分を削除すると出力が

impl &mut A

となります。つまりa.func()<&A as T>::func(&a)<&mut A as T>::func(&mut a)の両方の解釈が可能ですが、実際には前者として扱います。

これはRustが暗黙の型変換において&mut Aよりも&Aを優先しているように解釈したのですが、これは言語仕様で決まっているのでしょうか?