Skip to content

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

Open
Listed in
@Jacherr

Description

@Jacherr
Contributor

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

Activity

added
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Jun 12, 2024
compiler-errors

compiler-errors commented on Jun 12, 2024

@compiler-errors
Member

actually this has nothing to do with async closures

this is one of many issues having to do with async, higher ranked bounds, and Send/Sync :( #110338

removed their assignment
on Jun 12, 2024
added
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.
on Jun 12, 2024
removed
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Jul 5, 2024
traviscross

traviscross commented on Jul 11, 2024

@traviscross
Contributor

@rustbot labels +AsyncAwait-Triaged

We discussed this in the async meeting today. As CE said, we think this is related to:

added
AsyncAwait-TriagedAsync-await issues that have been triaged during a working group meeting.
on Jul 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

        Participants

        @traviscross@compiler-errors@saethlin@jieyouxu@Jacherr

        Issue actions

          `async_closure`: error: implementation of `AsyncFnOnce` is not general enough · Issue #126350 · rust-lang/rust