Rust: 二重にネストされたコンテナタイプのオーバーフロー

作成日 2016年06月07日  ·  3コメント  ·  ソース: rust-lang/rust

私は次のコードを持っています:

https://play.rust-lang.org/?gist=b8c78d5084a9b9ab7c53a2a9faa022af&version=stable&backtrace=0

ご覧のとおり、#[test]は正常に機能しますが、カーゴテストを実行しようとすると、doc_testで次のエラーが発生します。

失敗:

---- vec :: <& 'a Vector> :: add_0 stdout ----
エラー:要件を評価するオーバーフロー<&_ as std::ops::Add<_>>::Output [E0275]
:1:1:1:1注:クレートに#![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を削除すると、すべてが機能します。

A-typesystem C-bug T-compiler

全てのコメント3件

それが有用である場合、このはるかに短いプログラムは同様の振る舞いを与えます:
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) 」である必要があります。

エラーメッセージはどちらの場合も変更されていません。つまり、コンパイラのバグのように見えます。 これらの例は機能するはずですが、少なくともコンパイラは正しいエラーメッセージを表示していません。

このページは役に立ちましたか?
0 / 5 - 0 評価