我有以下Rust代码(Rustc 1.75.0),它"强制"发送一个类型:
struct ForceSend<T>(T);
unsafe impl<T> Send for ForceSend<T> {}
pub fn perform<T>(t: T) {
let wrapped = ForceSend(t);
takes_send(move || {
wrapped.0;
});
}
fn takes_send<F: Send>(_: F) {}
我希望这段代码能够编译,因为闭包通过Move捕获了一个值wrapped
,并且这个值是Send.每the documentation人:
如果由非唯一不可变引用捕获的所有变量都是同步的,且通过唯一不可变或可变引用、复制或移动捕获的所有值都被发送,则发送闭包.
然而,这无法编译,报告关闭是not发送.
为什么这不能编译?谢谢你的帮助!