//@ edition:2018 //@ run-pass trait Foo { } impl Foo for () { } impl<'a, T> Foo for &'a mut T where T: Foo { } async fn foo_async(_v: T) -> u8 where T: Foo { 0 } async fn bad(v: T) -> u8 where T: Foo { foo_async(v).await } async fn async_main() { let mut v = (); let _ = bad(&mut v).await; let _ = foo_async(&mut v).await; let _ = bad(v).await; } fn main() { let _ = async_main(); }