-
Notifications
You must be signed in to change notification settings - Fork 14k
Open
Labels
C-bugCategory: This is a bug.Category: This is a bug.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.This issue may need triage. Remove it if it has been sufficiently triaged.
Description
I tried this code (minimized from a larger case):
struct B;
struct C;
fn u(_c: &C, _b: &B) {}
trait T {
fn a(&self, b: &B) -> impl Future<Output=()> + Send;
}
struct Timpl;
impl Timpl {
async fn b<F>(&self, mut f: F)
where
F: AsyncFnMut(&mut C)
{
let mut c = C;
f(&mut c).await;
f(&mut c).await;
}
}
impl T for Timpl {
async fn a(&self, b: &B) {
self.b(async |c| u(c, b)).await;
}
}I expect it to compile, instead an extremely vague 'lifetime error' is thrown out of rustc:
error[E0477]: the type `{async closure@src/lib.rs:25:16: 25:25}` does not fulfill the required lifetime
--> src/lib.rs:24:5
|
24 | async fn a(&self, b: &B) {
| ^^^^^^^^^^^^^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0477`.
Removing the Send bound on T::a allows it to compile fine.
Meta
rustc --version --verbose:
rustc 1.93.0-nightly (1be6b13be 2025-11-26)
binary: rustc
commit-hash: 1be6b13be73dc12e98e51b403add4c41a0b77759
commit-date: 2025-11-26
host: x86_64-unknown-linux-gnu
release: 1.93.0-nightly
LLVM version: 21.1.5
Metadata
Metadata
Assignees
Labels
C-bugCategory: This is a bug.Category: This is a bug.needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.This issue may need triage. Remove it if it has been sufficiently triaged.