]> git.lizzy.rs Git - rust.git/blob - src/test/ui/associated-consts/associated-const-type-parameters.rs
Rollup merge of #105983 - compiler-errors:issue-105981, r=tmiasko
[rust.git] / src / test / ui / associated-consts / associated-const-type-parameters.rs
1 // run-pass
2
3 trait Foo {
4     const X: i32;
5     fn get_x() -> i32 {
6        Self::X
7     }
8 }
9
10 struct Abc;
11 impl Foo for Abc {
12     const X: i32 = 11;
13 }
14
15 struct Def;
16 impl Foo for Def {
17     const X: i32 = 97;
18 }
19
20 struct Proxy<T>(#[allow(unused_tuple_struct_fields)] T);
21
22 impl<T: Foo> Foo for Proxy<T> {
23     const X: i32 = T::X;
24 }
25
26 fn sub<A: Foo, B: Foo>() -> i32 {
27     A::X - B::X
28 }
29
30 trait Bar: Foo {
31     const Y: i32 = Self::X;
32 }
33
34 fn main() {
35     assert_eq!(11, Abc::X);
36     assert_eq!(97, Def::X);
37     assert_eq!(11, Abc::get_x());
38     assert_eq!(97, Def::get_x());
39     assert_eq!(-86, sub::<Abc, Def>());
40     assert_eq!(86, sub::<Def, Abc>());
41     assert_eq!(-86, sub::<Proxy<Abc>, Def>());
42     assert_eq!(-86, sub::<Abc, Proxy<Def>>());
43     assert_eq!(86, sub::<Proxy<Def>, Proxy<Abc>>());
44 }