1 // run-pass
2 // Test associated type references in structure fields.
3 
4 // pretty-expanded FIXME #23616
5 
6 trait Test {
7     type V;
8 
test(&self, value: &Self::V) -> bool9     fn test(&self, value: &Self::V) -> bool;
10 }
11 
12 struct TesterPair<T:Test> {
13     tester: T,
14     value: T::V,
15 }
16 
17 impl<T:Test> TesterPair<T> {
new(tester: T, value: T::V) -> TesterPair<T>18     fn new(tester: T, value: T::V) -> TesterPair<T> {
19         TesterPair { tester: tester, value: value }
20     }
21 
test(&self) -> bool22     fn test(&self) -> bool {
23         self.tester.test(&self.value)
24     }
25 }
26 
27 struct EqU32(u32);
28 impl Test for EqU32 {
29     type V = u32;
30 
test(&self, value: &u32) -> bool31     fn test(&self, value: &u32) -> bool {
32         self.0 == *value
33     }
34 }
35 
36 struct EqI32(i32);
37 impl Test for EqI32 {
38     type V = i32;
39 
test(&self, value: &i32) -> bool40     fn test(&self, value: &i32) -> bool {
41         self.0 == *value
42     }
43 }
44 
main()45 fn main() {
46     let tester = TesterPair::new(EqU32(22), 23);
47     tester.test();
48 
49     let tester = TesterPair::new(EqI32(22), 23);
50     tester.test();
51 }
52