为什么异步和非异步函数之间的 impl trait 函数参数的生命周期省略存在差异?

Luk*_*odt 12 lifetime rust

此代码编译:

async fn foo(_: impl Iterator<Item = &u32>) {}
Run Code Online (Sandbox Code Playgroud)

但是,删除async,它不再起作用:

fn foo(_: impl Iterator<Item = &u32>) {}
Run Code Online (Sandbox Code Playgroud)

相反,它导致:

error[E0106]: missing lifetime specifier
 --> src/lib.rs:1:32
  |
1 | fn foo(_: impl Iterator<Item = &u32>) {}
  |                                ^ expected named lifetime parameter
  |
help: consider introducing a named lifetime parameter
  |
1 | fn foo<'a>(_: impl Iterator<Item = &'a u32>) {}
  |       ^^^^                         ^^^
Run Code Online (Sandbox Code Playgroud)

游乐场

为什么功能async和非async功能之间的生命周期省略存在差异?这对我来说毫无意义。似乎非asynccase 也很容易忽略生命周期。它只是引入了另一个匿名输入生命周期。