Skip to content

async_closure: error: implementation of AsyncFnOnce is not general enough #126350

@Jacherr

Description

@Jacherr

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 

(see https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=536db823e50d32307ee54645dbec25c6)

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

No one assigned

    Labels

    A-async-awaitArea: Async & AwaitAsyncAwait-TriagedAsync-await issues that have been triaged during a working group meeting.C-bugCategory: This is a bug.T-compilerRelevant 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.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions