Warum ist `let ref a: Trait = Struct` verboten?

Wir haben einen nicht kopierbaren Typ und eine Eigenschaft:

struct Struct;
trait Trait {}
impl Trait for Struct {}

Wenn wir ein @ erstell&Struct und dereferenzieren Sie es, wir erhalten eine R-Wert-Referenz, mit der wir eine By-Ref-Bindung initialisieren können:

let a: &Struct = &Struct;
let ref a: Struct = *a;

Wir können das auch direkt durch ref binding initialisieren:

let ref a: Struct = Struct;

Aber wenn wir unsere Variablenbindung als referenzpflichtig deklarieren, funktioniert nur das erste Code-Snippet

let a: &Trait = &Struct;
let ref a: Trait = *a;

Versuch dies direkt zu tun

let ref a: Trait = Struct;

Oder durch Schleifen gehen

let a: &Struct = &Struct;
let ref a: Trait = *a;

Ode

let ref a: Trait = *&Struct;

Gib uns einmismatched types Error. Offensichtlich sind sie nicht vom selben Typ, aber Inferenz funktioniert für Referenzen.

Ist dies (noch) nicht implementiert oder gibt es einen tieferen Grund, warum es nicht erlaubt ist?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage