Ensure const impl cannot coexist with non-const impl

This commit is contained in:
Dylan MacKenzie 2020-02-05 09:40:47 -08:00
parent d6d6d25c34
commit 70f78797d5
2 changed files with 67 additions and 0 deletions

View file

@ -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() {}

View file

@ -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`.