// check-pass // edition: 2021 trait MyTrait { #[allow(async_fn_in_trait)] async fn foo(&self) -> i32; #[allow(async_fn_in_trait)] async fn bar(&self) -> i32; } impl MyTrait for i32 { async fn foo(&self) -> i32 { *self } async fn bar(&self) -> i32 { self.foo().await } } fn main() { let x = 5; // Calling from non-async context let _ = x.foo(); let _ = x.bar(); // Calling from async block in non-async context async { let _: i32 = x.foo().await; let _: i32 = x.bar().await; }; }