Ensure const impl cannot coexist with non-const impl
This commit is contained in:
parent
d6d6d25c34
commit
70f78797d5
2 changed files with 67 additions and 0 deletions
|
@ -0,0 +1,33 @@
|
|||
#![allow(incomplete_features)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
pub struct Int(i32);
|
||||
|
||||
impl const std::ops::Add for i32 {
|
||||
//~^ ERROR conflicting implementations of trait
|
||||
//~| ERROR only traits defined in the current crate can be implemented for arbitrary types
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, rhs: Self) -> Self {
|
||||
self + rhs
|
||||
}
|
||||
}
|
||||
|
||||
impl std::ops::Add for Int {
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, rhs: Self) -> Self {
|
||||
Int(self.0 + rhs.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl const std::ops::Add for Int {
|
||||
//~^ ERROR conflicting implementations of trait
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, rhs: Self) -> Self {
|
||||
Int(self.0 + rhs.0)
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
|
@ -0,0 +1,34 @@
|
|||
error[E0119]: conflicting implementations of trait `std::ops::Add` for type `i32`:
|
||||
--> $DIR/const-and-non-const-impl.rs:6:1
|
||||
|
|
||||
LL | impl const std::ops::Add for i32 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: conflicting implementation in crate `core`:
|
||||
- impl std::ops::Add for i32;
|
||||
|
||||
error[E0119]: conflicting implementations of trait `std::ops::Add` for type `Int`:
|
||||
--> $DIR/const-and-non-const-impl.rs:24:1
|
||||
|
|
||||
LL | impl std::ops::Add for Int {
|
||||
| -------------------------- first implementation here
|
||||
...
|
||||
LL | impl const std::ops::Add for Int {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Int`
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
--> $DIR/const-and-non-const-impl.rs:6:1
|
||||
|
|
||||
LL | impl const std::ops::Add for i32 {
|
||||
| ^^^^^^^^^^^-------------^^^^^---
|
||||
| | | |
|
||||
| | | `i32` is not defined in the current crate
|
||||
| | `i32` is not defined in the current crate
|
||||
| impl doesn't use only types from inside the current crate
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0117, E0119.
|
||||
For more information about an error, try `rustc --explain E0117`.
|
Loading…
Add table
Reference in a new issue