- Notifications
You must be signed in to change notification settings - Fork 13.8k
Open
Labels
A-async-awaitArea: Async & AwaitArea: Async & AwaitAsyncAwait-TriagedAsync-await issues that have been triaged during a working group meeting.Async-await issues that have been triaged during a working group meeting.C-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.T-typesRelevant to the types team, which will review and decide on the PR/issue.Relevant to the types team, which will review and decide on the PR/issue.
Description
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
Metadata
Metadata
Assignees
Labels
A-async-awaitArea: Async & AwaitArea: Async & AwaitAsyncAwait-TriagedAsync-await issues that have been triaged during a working group meeting.Async-await issues that have been triaged during a working group meeting.C-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.T-typesRelevant to the types team, which will review and decide on the PR/issue.Relevant to the types team, which will review and decide on the PR/issue.