File tree Expand file tree Collapse file tree 2 files changed +67
-0
lines changed
src/test/ui/rfc-2632-const-trait-impl Expand file tree Collapse file tree 2 files changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![ allow( incomplete_features) ]
2
+ #![ feature( const_trait_impl) ]
3
+
4
+ pub struct Int ( i32 ) ;
5
+
6
+ impl const std:: ops:: Add for i32 {
7
+ //~^ ERROR conflicting implementations of trait
8
+ //~| ERROR only traits defined in the current crate can be implemented for arbitrary types
9
+ type Output = Self ;
10
+
11
+ fn add ( self , rhs : Self ) -> Self {
12
+ self + rhs
13
+ }
14
+ }
15
+
16
+ impl std:: ops:: Add for Int {
17
+ type Output = Self ;
18
+
19
+ fn add ( self , rhs : Self ) -> Self {
20
+ Int ( self . 0 + rhs. 0 )
21
+ }
22
+ }
23
+
24
+ impl const std:: ops:: Add for Int {
25
+ //~^ ERROR conflicting implementations of trait
26
+ type Output = Self ;
27
+
28
+ fn add ( self , rhs : Self ) -> Self {
29
+ Int ( self . 0 + rhs. 0 )
30
+ }
31
+ }
32
+
33
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0119]: conflicting implementations of trait `std::ops::Add` for type `i32`:
2
+ --> $DIR/const-and-non-const-impl.rs:6:1
3
+ |
4
+ LL | impl const std::ops::Add for i32 {
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ = note: conflicting implementation in crate `core`:
8
+ - impl std::ops::Add for i32;
9
+
10
+ error[E0119]: conflicting implementations of trait `std::ops::Add` for type `Int`:
11
+ --> $DIR/const-and-non-const-impl.rs:24:1
12
+ |
13
+ LL | impl std::ops::Add for Int {
14
+ | -------------------------- first implementation here
15
+ ...
16
+ LL | impl const std::ops::Add for Int {
17
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Int`
18
+
19
+ error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
20
+ --> $DIR/const-and-non-const-impl.rs:6:1
21
+ |
22
+ LL | impl const std::ops::Add for i32 {
23
+ | ^^^^^^^^^^^-------------^^^^^---
24
+ | | | |
25
+ | | | `i32` is not defined in the current crate
26
+ | | `i32` is not defined in the current crate
27
+ | impl doesn't use only types from inside the current crate
28
+ |
29
+ = note: define and implement a trait or new type instead
30
+
31
+ error: aborting due to 3 previous errors
32
+
33
+ Some errors have detailed explanations: E0117, E0119.
34
+ For more information about an error, try `rustc --explain E0117`.
You can’t perform that action at this time.
0 commit comments