私は次のコードを持っています:
https://play.rust-lang.org/?gist=b8c78d5084a9b9ab7c53a2a9faa022af&version=stable&backtrace=0
ご覧のとおり、#[test]は正常に機能しますが、カーゴテストを実行しようとすると、doc_testで次のエラーが発生します。
失敗:
---- vec :: <& 'a Vector
エラー:要件を評価するオーバーフロー<&_ as std::ops::Add<_>>::Output
[E0275]#![recursion_limit="128"]
属性を追加することを検討してください
エラー:前のエラーのために中止
どの関数が失敗するかはコンパイラーに依存しているようです。 自宅では、Add for&Vectorの両方の実装が失敗するという印象がありますが、間違っている可能性があり、帰宅したらこの問題を更新します。
これは私がここで使用している錆びたバージョンです:
rustc 1.10.0-dev(14f61c87f 2016-04-18)
バイナリ:rustc
コミットハッシュ:14f61c87ff02e57d565d4fab4ce790156c9a596e
コミット日:2016-04-18
ホスト:x86_64-unknown-linux-gnu
リリース:1.10.0-dev
さびフォーラムでの議論はここで見つけることができます:
https://users.rust-lang.org/t/weird-problems-with-recursion-in-type-bounds-in-tests-on-libs/6101/4
更新:私は間違っていました、家で私は同じ行動をします。 しかし、 @ mbrubeckがフォーラムのディスカッションで言ったように、最後の2つのAdd implsを削除すると、すべてが機能します。
それが有用である場合、このはるかに短いプログラムは同様の振る舞いを与えます:
https://play.rust-lang.org/?gist=2f793999729aec2cd8274157f7012e5d&version=stable&backtrace=0
コンパイルして正常に実行されるこのバージョンを比較してください。
https://play.rust-lang.org/?gist=6ff433c8cc94c22985180210cc3a8e7d&version=stable&backtrace=0
@ apt1002のプログラムをさらに最小化すると
https://play.rust-lang.org/?gist=0a77e1bd0f8e539d8a85ee30ed63b1f6&version=stable&backtrace=0
これらすべての失敗したプログラムに共通するスレッドは、 &
、 Vector
、またはラッパー構造体のいずれであっても、「コンテナ化」の2つの層があることです。
生涯のナンセンスを取り除くのは良い考えです。 はるかに明確です。
私たちは両方とも間違いを犯したと思います! 私の場合、「where Target:From <& 'mT>」は「 whereTarget:for <' a> From <& 'aT> 」である必要がありました。 私はこれについて学んだばかりです。 「(a.0).0」は「 C((a.0).0) 」である必要があります。
エラーメッセージはどちらの場合も変更されていません。つまり、コンパイラのバグのように見えます。 これらの例は機能するはずですが、少なくともコンパイラは正しいエラーメッセージを表示していません。