// check-pass // edition:2018 #![allow(non_snake_case)] use std::rc::Rc; trait Trait { type AssocType; } struct Struct<'a> { x: &'a u32 } impl<'a> Trait for Struct<'a> { type AssocType = Self; } impl<'a> Struct<'a> { async fn take_self(self, f: &u32) -> &u32 { f } async fn take_AssocType(self: as Trait>::AssocType, f: &u32) -> &u32 { f } async fn take_Box_AssocType(self: Box< as Trait>::AssocType>, f: &u32) -> &u32 { f } async fn take_Box_Box_AssocType( self: Box as Trait>::AssocType>>, f: &u32 ) -> &u32 { f } async fn take_Rc_AssocType(self: Rc< as Trait>::AssocType>, f: &u32) -> &u32 { f } async fn take_Box_Rc_AssocType( self: Box as Trait>::AssocType>>, f: &u32 ) -> &u32 { f } } fn main() { }