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