为什么我可以在一种情况下指定延迟绑定生命周期参数,而在另一种情况下不能?

Sup*_*mum 6 lifetime rust

考虑以下 Rust 程序:

fn f<'a>(x: &'a i32) {
    unimplemented!();
}

fn main() {
    f::<'static>;
}
Run Code Online (Sandbox Code Playgroud)

编译时,输出如下编译错误:

fn f<'a>(x: &'a i32) {
    unimplemented!();
}

fn main() {
    f::<'static>;
}
Run Code Online (Sandbox Code Playgroud)

让我们像这样修改程序:

fn f<'a, 'b>(x: &'a i32) -> &'b i32 {
    unimplemented!();
}

fn main() {
    f::<'static>;
}
Run Code Online (Sandbox Code Playgroud)

由于某些奇怪的原因,现在编译时没有任何编译错误。为什么是这样?如果第一个程序中的生命周期参数 'a 是后期绑定的,为什么它不应该在第二个程序中也后期绑定?请注意,我在第一个和第二个程序之间所做的唯一更改是添加另一个生命周期参数和一个依赖于这个新生命周期参数的返回类型。