为什么`|_| 1`不符合寿命要求

Why does `|_| 1` not meet lifetime requirements

我有以下特征和 Fn 的通用实现:

trait Provider<'a> {
    type Out;
    fn get(&'a self, state: &State) -> Self::Out;
}

impl<'a, F, T> Provider<'a> for F
where
    F: Fn(&State) -> T,
{
    type Out = T;

    fn get(&'a self, state: &State) -> T {
        self(state)
    }
}

现在,我有一些代码需要 for<'a> Provider<'a, Out = usize>。但是,最简单的闭包 |_| 1 不合格,而是提供了我不理解的错误消息:

fn assert_usize_provider<P>(_: P)
where
    P: for<'a> Provider<'a, Out = usize>,
{
}

fn main() {
    assert_usize_provider(|_| 1);
}
error[E0308]: mismatched types
  --> src/main.rs:27:5
   |
27 |     assert_usize_provider(|_| 1);
   |     ^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
   |
   = note: expected type `FnOnce<(&State,)>`
              found type `FnOnce<(&State,)>`
note: this closure does not fulfill the lifetime requirements
  --> src/main.rs:27:27
   |
27 |     assert_usize_provider(|_| 1);
   |                           ^^^^^
note: the lifetime requirement is introduced here
  --> src/main.rs:22:29
   |
22 |     P: for<'a> Provider<'a, Out = usize>,
   |                             ^^^^^^^^^^^

Playground link

有人可以解释该错误消息的含义以及如何使此代码正常工作吗?

我不知道为什么推理在这种情况下不起作用,但您可以添加类型注释以使代码正常工作。

assert_usize_provider(|_ : &State| 1);