@@ -12,6 +12,12 @@ trait GenericGet<A> {
1212 fn get ( & self ) -> A ;
1313}
1414
15+ trait AssocTrait < GP > {
16+ type AP ;
17+ // AssocTrait::get
18+ fn get ( & self ) -> ( GP , Self :: AP ) ;
19+ }
20+
1521#[ derive( Clone , Debug ) ]
1622struct MyStruct {
1723 value : i32 ,
@@ -36,6 +42,17 @@ impl<A: Clone + Debug> GenericGet<A> for GenStruct<A> {
3642 }
3743}
3844
45+ impl < GGP > AssocTrait < GGP > for GenStruct < GGP >
46+ where
47+ GGP : Clone + Debug ,
48+ {
49+ type AP = bool ;
50+ // GenStruct<GGP>::get
51+ fn get ( & self ) -> ( GGP , bool ) {
52+ ( self . value . clone ( ) , true ) // $ fieldof=GenStruct target=clone
53+ }
54+ }
55+
3956fn get_a < A , G : GenericGet < A > + ?Sized > ( a : & G ) -> A {
4057 a. get ( ) // $ target=GenericGet::get
4158}
@@ -58,10 +75,34 @@ fn test_poly_dyn_trait() {
5875 let _result = ( * obj) . get ( ) ; // $ target=deref target=GenericGet::get type=_result:bool
5976}
6077
78+ fn assoc_dyn_get < A , B > ( a : & dyn AssocTrait < A , AP = B > ) -> ( A , B ) {
79+ a. get ( ) // $ target=AssocTrait::get
80+ }
81+
82+ fn assoc_get < A , B , T : AssocTrait < A , AP = B > + ?Sized > ( a : & T ) -> ( A , B ) {
83+ a. get ( ) // $ target=AssocTrait::get
84+ }
85+
86+ fn test_assoc_type ( obj : & dyn AssocTrait < i64 , AP = bool > ) {
87+ let (
88+ _gp, // $ type=_gp:i64
89+ _ap, // $ MISSING: type=_ap:bool
90+ ) = ( * obj) . get ( ) ; // $ target=deref target=AssocTrait::get
91+ let (
92+ _gp, // $ type=_gp:i64
93+ _ap, // $ MISSING: type=_ap:bool
94+ ) = assoc_dyn_get ( obj) ; // $ target=assoc_dyn_get
95+ let (
96+ _gp, // $ type=_gp:i64
97+ _ap, // $ MISSING: type=_ap:bool
98+ ) = assoc_get ( obj) ; // $ target=assoc_get
99+ }
100+
61101pub fn test ( ) {
62102 test_basic_dyn_trait ( & MyStruct { value : 42 } ) ; // $ target=test_basic_dyn_trait
63103 test_generic_dyn_trait ( & GenStruct {
64104 value : "" . to_string ( ) ,
65105 } ) ; // $ target=test_generic_dyn_trait
66106 test_poly_dyn_trait ( ) ; // $ target=test_poly_dyn_trait
107+ test_assoc_type ( & GenStruct { value : 100 } ) ; // $ target=test_assoc_type
67108}
0 commit comments