File tree Expand file tree Collapse file tree 3 files changed +104
-0
lines changed
src/test/ui/const-generics/defaults Expand file tree Collapse file tree 3 files changed +104
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
1
+ #![ feature( const_generics_defaults) ]
2
+
3
+ trait Trait < const N : u8 = 12 > {
4
+ fn uwu ( & self ) -> u8 {
5
+ N
6
+ }
7
+ }
8
+
9
+ impl Trait < 2 > for u32 { }
10
+
11
+ fn foo ( arg : & dyn Trait ) -> u8 {
12
+ arg. uwu ( )
13
+ }
14
+
15
+ trait Traitor < const N : u8 = 1 , const M : u8 = N > {
16
+ fn owo ( & self ) -> u8 {
17
+ M
18
+ }
19
+ }
20
+
21
+ impl Traitor < 2 , 3 > for bool { }
22
+
23
+ fn bar < const N : u8 > ( arg : & dyn Traitor < N > ) -> u8 {
24
+ arg. owo ( )
25
+ }
26
+
27
+ fn main ( ) {
28
+ foo ( & 10_u32 ) ;
29
+ //~^ error: the trait bound `u32: Trait` is not satisfied
30
+ bar ( & true ) ;
31
+ //~^ error: the trait bound `bool: Traitor<{_: u8}, {_: u8}>` is not satisfied
32
+ }
Original file line number Diff line number Diff line change
1
+ error[E0277]: the trait bound `u32: Trait` is not satisfied
2
+ --> $DIR/trait_objects_fail.rs:28:9
3
+ |
4
+ LL | foo(&10_u32);
5
+ | --- ^^^^^^^ the trait `Trait` is not implemented for `u32`
6
+ | |
7
+ | required by a bound introduced by this call
8
+ |
9
+ = help: the following implementations were found:
10
+ <u32 as Trait<2_u8>>
11
+ = note: required for the cast to the object type `dyn Trait`
12
+
13
+ error[E0277]: the trait bound `bool: Traitor<{_: u8}, {_: u8}>` is not satisfied
14
+ --> $DIR/trait_objects_fail.rs:30:9
15
+ |
16
+ LL | bar(&true);
17
+ | --- ^^^^^ the trait `Traitor<{_: u8}, {_: u8}>` is not implemented for `bool`
18
+ | |
19
+ | required by a bound introduced by this call
20
+ |
21
+ = help: the following implementations were found:
22
+ <bool as Traitor<2_u8, 3_u8>>
23
+ = note: required for the cast to the object type `dyn Traitor<{_: u8}, {_: u8}>`
24
+
25
+ error: aborting due to 2 previous errors
26
+
27
+ For more information about this error, try `rustc --explain E0277`.
You can’t perform that action at this time.
0 commit comments