]> git.lizzy.rs Git - rust.git/blob - src/test/ui/const-generics/defaults/trait_objects.rs
Rollup merge of #89876 - AlexApps99:const_ops, r=oli-obk
[rust.git] / src / test / ui / const-generics / defaults / trait_objects.rs
1 // run-pass
2 #![feature(const_generics_defaults)]
3
4 trait Trait<const N: u8 = 12> {
5     fn uwu(&self) -> u8 {
6         N
7     }
8 }
9
10 impl Trait for u32 {}
11
12 impl Trait<12> for u64 {
13     fn uwu(&self) -> u8 {
14         *self as u8
15     }
16 }
17
18 fn foo(arg: &dyn Trait) -> u8 {
19     arg.uwu()
20 }
21
22 trait Traitor<const N: u8 = 1, const M: u8 = N> {
23     fn owo(&self) -> u8 {
24         M
25     }
26 }
27
28 impl Traitor<2> for bool { }
29 impl Traitor for u8 {
30     fn owo(&self) -> u8 {
31         *self
32     }
33 }
34
35 fn bar<const N: u8>(arg: &dyn Traitor<N>) -> u8 {
36     arg.owo()
37 }
38
39 fn main() {
40     assert_eq!(foo(&10_u32), 12);
41     assert_eq!(foo(&3_u64), 3);
42
43     assert_eq!(bar(&true), 2);
44     assert_eq!(bar(&1_u8), 1);
45 }