Rust 向返回impl Trait的函数添加泛型类型需要使用';静态寿命

Rust 向返回impl Trait的函数添加泛型类型需要使用';静态寿命,rust,traits,lifetime,Rust,Traits,Lifetime,我有一个函数,它将引用作为参数并返回impl Future。future不引用参数(它需要一个副本),因此引用不必超过函数调用: use futures::{Future, future}; // 0.1.25 pub struct Point<'a> { _name: &'a str, } pub fn write<'a>(_points: &'a [Point<'a>]) -> impl Future<Item =

我有一个函数,它将引用作为参数并返回
impl Future
。future不引用参数(它需要一个副本),因此引用不必超过函数调用:

use futures::{Future, future}; // 0.1.25

pub struct Point<'a> {
    _name: &'a str,
}

pub fn write<'a>(_points: &'a [Point<'a>]) -> impl Future<Item = (), Error = ()> + 'static {
    future::ok(())
}

pub fn call_write(points: Vec<Point>) -> impl Future<Item = (), Error = ()> {
    // this works fine
    write(&points)
}
error[E0621]:点类型中需要显式生存期`
-->src/lib.rs:11:42
|
11 |发布fn调用_write(点:Vec)->impl Future{
|-------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^需要终身“静态”
|                           |

|帮助:将显式生存期“static”添加到“points”类型中:`std::vec::vec-BoxI我怀疑这可能是Rust 2018的新生存期省略规则的意外结果;您是否可以尝试使用较旧的编译器版本(1.30或更早版本)?请注意,在Rust 2018中,不推荐在非引用类型中省略寿命参数,因此您应该编写
Vec@trentcl不,1.30和更早的版本是一样的。这一定是impl-Trait本身的一个限制,我想知道确切的原因。
pub fn write<'a, T: 'a>(_points: &'a [T]) -> impl Future<Item = (), Error = ()> + 'static {
    future::ok(())
}
pub fn write<'a, T: 'a>(_points: &'a [T]) -> Box<dyn Future<Item = (), Error = ()> + 'static> {