Rust: 双嵌套容器类型溢出

创建于 2016-06-07  ·  3评论  ·  资料来源: rust-lang/rust

我有以下代码:

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

可以看出 #[test] 工作正常,但是如果我尝试对其运行货物测试,我会在 doc_test 上收到以下错误:

失败:

---- vec::<&'a 向量>::add_0 标准输出 ----
错误:溢出评估要求<&_ as std::ops::Add<_>>::Output [E0275]
:1:1: 1:1 注意:考虑给你的箱子添加一个#![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 一切正常。

A-typesystem C-bug T-compiler

所有3条评论

这是@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) ”。

两种情况下的错误消息都没有改变,即它看起来仍然像一个编译器错误。 我认为这些例子应该有效,但至少编译器没有给出正确的错误信息。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

nikomatsakis picture nikomatsakis  ·  340评论

nikomatsakis picture nikomatsakis  ·  412评论

thestinger picture thestinger  ·  234评论

cramertj picture cramertj  ·  512评论

withoutboats picture withoutboats  ·  213评论