Email me

Rust errors / Everything else

Rust compiler error · checked with rustc 1.99.0

Rust error E0706: #### Note: this error code is no longer emitted by the compiler

What it means#### Note: this error code is no longer emitted by the compiler.

Retired: rustc no longer emits this error code. You may still see it in old answers, books and CI logs from older toolchains; the explanation below is kept for reference.

E0706Everything else
Retiredin rustc 1.99.0
8related errors linked below

The compiler team's explanation

Note: this error code is no longer emitted by the compiler.

async fns are not yet supported in traits in Rust.

Erroneous code example:

trait T {
    // Neither case is currently supported.
    async fn foo() {}
    async fn bar(&self) {}
}

async fns return an impl Future, making the following two examples equivalent:

async fn foo() -> User {
    unimplemented!()
}
// The async fn above gets desugared as follows:
fn foo(&self) -> impl Future<Output = User> + '_ {
    unimplemented!()
}

But when it comes to supporting this in traits, there are a few implementation issues. One of them is returning impl Trait in traits is not supported, as it would require Generic Associated Types to be supported:

impl MyDatabase {
    async fn get_user(&self) -> User {
        unimplemented!()
    }
}

impl MyDatabase {
    fn get_user(&self) -> impl Future<Output = User> + '_ {
        unimplemented!()
    }
}

Until these issues are resolved, you can use the async-trait crate, allowing you to use async fn in traits by desugaring to "boxed futures" (Pin<Box<dyn Future + Send + 'async>>).

Note that using these trait methods will result in a heap allocation per-function-call. This is not a significant cost for the vast majority of applications, but should be considered when deciding whether to use this functionality in the public API of a low-level function that is expected to be called millions of times a second.

You might be interested in visiting the async book for further information.

From rustc --explain E0706 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.

Related errors

All 518 Rust error codes · Rust crate data · Glossary

Up next

Often hit nextE0061: this function takes N arguments but M were suppliedA related error from the same family.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ