我有以下代码:
https://play.rust-lang.org/?gist=b8c78d5084a9b9ab7c53a2a9faa022af&version=stable&backtrace=0
可以看出 #[test] 工作正常,但是如果我尝试对其运行货物测试,我会在 doc_test 上收到以下错误:
失败:
---- vec::<&'a 向量
错误:溢出评估要求<&_ as std::ops::Add<_>>::Output
[E0275]#![recursion_limit="128"]
属性
错误:由于先前的错误而中止
似乎哪个函数会失败取决于编译器。 我的印象是,在家里,Add for &Vector 的两个实现都会失败,但我可能会弄错,回家后会更新这个问题。
这是我在这里使用的 rust 版本:
rustc 1.10.0-dev (14f61c87f 2016-04-18)
二进制:rustc
提交哈希:14f61c87ff02e57d565d4fab4ce790156c9a596e
提交日期:2016-04-18
主机:x86_64-unknown-linux-gnu
版本:1.10.0-dev
Rust 论坛上的讨论可以在这里找到:
https://users.rust-lang.org/t/weird-problems-with-recursion-in-type-bounds-in-tests-on-libs/6101/4
更新:我错了,在家里我也有同样的行为。 但是就像@mbrubeck在论坛讨论中所说的那样,如果我删除最后两个 Add impls 一切正常。
这是@apt1002程序的进一步最小化:
https://play.rust-lang.org/?gist=0a77e1bd0f8e539d8a85ee30ed63b1f6&version=stable&backtrace=0
所有这些失败程序的一个共同点是有 2 层“容器化”,无论是&
、 Vector
还是包装结构。
删除一生的废话是个好主意。 清晰多了。
我想我们都犯了错误! 我的是“where Target: From<&'m T>”应该是“ where Target: for<'a> From<&'a T> ”。 我才刚刚了解这个。 你的意思是“(a.0).0”应该是“ C((a.0).0) ”。
两种情况下的错误消息都没有改变,即它看起来仍然像一个编译器错误。 我认为这些例子应该有效,但至少编译器没有给出正确的错误信息。