async_closure
: error: implementation of AsyncFnOnce
is not general enough #126350
Open
Description
opened on Jun 12, 2024
I'm not sure if this is really a bug (or perhaps a duplicate issue of another bug). However, I can't see any reason why this shouldn't work.
I tried this code:
#![feature(async_closure)]
fn assert_send<T: Send>(_: T) {}
#[derive(Clone)]
struct Ctxt<'a>(&'a ());
async fn commit_if_ok<'a>(ctxt: &mut Ctxt<'a>, f: impl async FnOnce(&mut Ctxt<'a>)) {
f(&mut ctxt.clone()).await;
}
fn operation(mut ctxt: Ctxt<'_>) {
assert_send(async {
commit_if_ok(&mut ctxt, async |_| todo!()).await;
});
}
fn main() {}
I expected to see this happen: Code compiles successfully
Instead, this happened: Compile error:
error: implementation of `AsyncFnOnce` is not general enough
--> src/lib.rs:13:5
|
13 | / assert_send(async {
14 | | commit_if_ok(&mut ctxt, async |_| todo!()).await;
15 | | });
| |______^ implementation of `AsyncFnOnce` is not general enough
|
= note: `{async closure@src/lib.rs:14:33: 14:42}` must implement `AsyncFnOnce<(&mut Ctxt<'1>,)>`, for any two lifetimes `'0` and `'1`...
= note: ...but it actually implements `AsyncFnOnce<(&mut Ctxt<'_>,)>`
error: could not compile `playground` (lib) due to 1 previous error
Meta
rustc --version --verbose
:
rustc 1.80.0-nightly (032af18af 2024-06-02)
binary: rustc
commit-hash: 032af18af578f4283a2927fb43b90df2bbb72b67
commit-date: 2024-06-02
host: x86_64-unknown-linux-gnu
release: 1.80.0-nightly
LLVM version: 18.1.6
Activity