Ich habe folgenden Code:
https://play.rust-lang.org/?gist=b8c78d5084a9b9ab7c53a2a9faa022af&version=stable&backtrace=0
Wie zu sehen ist, funktioniert #[test] gut, aber wenn ich versuche, einen Ladungstest durchzuführen, erhalte ich die folgende Fehlermeldung im doc_test:
Fehler:
---- vec::<&'ein Vektor
Fehler: Überlauf bei der Auswertung der Anforderung <&_ as std::ops::Add<_>>::Output
[E0275]#![recursion_limit="128"]
Attribut hinzuzufügen
Fehler: Abbruch wegen vorherigen Fehlers
Es scheint, dass die Funktion, die fehlschlägt, vom Compiler abhängt. Ich habe den Eindruck, dass zu Hause beide Implementierungen von Add for &Vector fehlschlagen, aber ich könnte mich irren und dieses Problem aktualisieren, wenn ich zu Hause bin.
Dies ist die Rostversion, die ich hier verwende:
rustc 1.10.0-dev (14f61c87f 2016-04-18)
binär: rost
Commit-Hash: 14f61c87ff02e57d565d4fab4ce790156c9a596e
Zusagedatum: 2016-04-18
host: x86_64-unknown-linux-gnu
Release: 1.10.0-dev
Die Diskussion in den Rostforen finden Sie hier:
https://users.rust-lang.org/t/weird-problems-with-recursion-in-type-bounds-in-tests-on-libs/6101/4
update: Ich habe mich geirrt, zu Hause bekomme ich das gleiche Verhalten. Aber wie @mbrubeck in der Forumsdiskussion sagte, wenn ich die letzten beiden Add-Impls entferne, funktioniert alles.
Falls es nützlich ist, zeigt dieses viel kürzere Programm ein ähnliches Verhalten:
https://play.rust-lang.org/?gist=2f793999729aec2cd8274157f7012e5d&version=stable&backtrace=0
Vergleichen Sie diese Version, die problemlos kompiliert und ausgeführt wird:
https://play.rust-lang.org/?gist=6ff433c8cc94c22985180210cc3a8e7d&version=stable&backtrace=0
Hier ist eine weitere Minimierung des Programms von @apt1002 :
https://play.rust-lang.org/?gist=0a77e1bd0f8e539d8a85ee30ed63b1f6&version=stable&backtrace=0
Allen diesen fehlgeschlagenen Programmen ist gemeinsam, dass es zwei Ebenen der "Containerisierung" gibt, sei es &
, Vector
oder eine Wrapper-Struktur.
Gute Idee, den lebenslangen Unsinn zu entfernen. Viel klarer.
Ich glaube, wir haben beide Fehler gemacht! Meins war, dass "wo Target: From<&'m T>" hätte sein sollen " wo Target: for<'a> From<&'a T> ". Ich habe gerade erst davon erfahren. Bei Ihnen sollte "(a.0).0" " C((a.0).0) " sein.
Die Fehlermeldung ist in beiden Fällen unverändert, dh es sieht immer noch nach einem Compiler-Bug aus. Ich denke, diese Beispiele sollten funktionieren, aber zumindest gibt der Compiler nicht die richtige Fehlermeldung aus.