]> git.lizzy.rs Git - rust.git/blob - src/test/ui/associated-consts/defaults-cyclic-pass.rs
Rollup merge of #105983 - compiler-errors:issue-105981, r=tmiasko
[rust.git] / src / test / ui / associated-consts / defaults-cyclic-pass.rs
1 // run-pass
2
3 // Cyclic assoc. const defaults don't error unless *used*
4 trait Tr {
5     const A: u8 = Self::B;
6     const B: u8 = Self::A;
7 }
8
9 // This impl is *allowed* unless its assoc. consts are used, matching the
10 // behavior without defaults.
11 impl Tr for () {}
12
13 // Overriding either constant breaks the cycle
14 impl Tr for u8 {
15     const A: u8 = 42;
16 }
17
18 impl Tr for u16 {
19     const B: u8 = 0;
20 }
21
22 impl Tr for u32 {
23     const A: u8 = 100;
24     const B: u8 = 123;
25 }
26
27 fn main() {
28     assert_eq!(<u8 as Tr>::A, 42);
29     assert_eq!(<u8 as Tr>::B, 42);
30
31     assert_eq!(<u16 as Tr>::A, 0);
32     assert_eq!(<u16 as Tr>::B, 0);
33
34     assert_eq!(<u32 as Tr>::A, 100);
35     assert_eq!(<u32 as Tr>::B, 123);
36 }