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.
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
- E0061this function takes N arguments but M were supplied
- E0412cannot find type in this scope
- E0515cannot return reference to local variable
- E0728await is only allowed inside async functions and blocks
- E0703invalid ABI: found `invalid`
- E0704incorrect visibility restriction
- E0717#### This error code is internal to the compiler and will not be emitted with normal Rust code
- E0727`async` coroutines are not yet supported
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?