Suggest adding super trait constraints

This commit is contained in:
Esteban Küber 2020-04-22 16:03:39 -07:00
parent d903a9def4
commit 545320a22f
6 changed files with 96 additions and 13 deletions

View file

@ -2,7 +2,9 @@ error[E0277]: the trait bound `Self: std::marker::Copy` is not satisfied
--> $DIR/defaults-unsound-62211-1.rs:21:18
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::marker::Copy`
| |
| required by `UncheckedCopy`
...
LL | type Output: Copy
| ^^^^ the trait `std::marker::Copy` is not implemented for `Self`
@ -11,7 +13,9 @@ error[E0277]: cannot add-assign `&'static str` to `Self`
--> $DIR/defaults-unsound-62211-1.rs:25:7
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::ops::AddAssign<&'static str>`
| |
| required by `UncheckedCopy`
...
LL | + AddAssign<&'static str>
| ^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `Self += &'static str`
@ -22,7 +26,9 @@ error[E0277]: the trait bound `Self: std::ops::Deref` is not satisfied
--> $DIR/defaults-unsound-62211-1.rs:23:7
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::ops::Deref`
| |
| required by `UncheckedCopy`
...
LL | + Deref<Target = str>
| ^^^^^^^^^^^^^^^^^^^ the trait `std::ops::Deref` is not implemented for `Self`
@ -31,7 +37,9 @@ error[E0277]: `Self` doesn't implement `std::fmt::Display`
--> $DIR/defaults-unsound-62211-1.rs:28:7
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::fmt::Display`
| |
| required by `UncheckedCopy`
...
LL | + Display = Self;
| ^^^^^^^ `Self` cannot be formatted with the default formatter

View file

@ -2,7 +2,9 @@ error[E0277]: the trait bound `Self: std::marker::Copy` is not satisfied
--> $DIR/defaults-unsound-62211-2.rs:21:18
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::marker::Copy`
| |
| required by `UncheckedCopy`
...
LL | type Output: Copy
| ^^^^ the trait `std::marker::Copy` is not implemented for `Self`
@ -11,7 +13,9 @@ error[E0277]: cannot add-assign `&'static str` to `Self`
--> $DIR/defaults-unsound-62211-2.rs:25:7
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::ops::AddAssign<&'static str>`
| |
| required by `UncheckedCopy`
...
LL | + AddAssign<&'static str>
| ^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `Self += &'static str`
@ -22,7 +26,9 @@ error[E0277]: the trait bound `Self: std::ops::Deref` is not satisfied
--> $DIR/defaults-unsound-62211-2.rs:23:7
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::ops::Deref`
| |
| required by `UncheckedCopy`
...
LL | + Deref<Target = str>
| ^^^^^^^^^^^^^^^^^^^ the trait `std::ops::Deref` is not implemented for `Self`
@ -31,7 +37,9 @@ error[E0277]: `Self` doesn't implement `std::fmt::Display`
--> $DIR/defaults-unsound-62211-2.rs:28:7
|
LL | trait UncheckedCopy: Sized {
| -------------------------- required by `UncheckedCopy`
| --------------------------- help: consider further restricting `Self`: `+ std::fmt::Display`
| |
| required by `UncheckedCopy`
...
LL | + Display = Self;
| ^^^^^^^ `Self` cannot be formatted with the default formatter

View file

@ -2,7 +2,9 @@ error[E0277]: the size for values of type `Self` cannot be known at compilation
--> $DIR/issue-63593.rs:9:5
|
LL | trait MyTrait {
| ------------- required by `MyTrait`
| -------------- help: consider further restricting `Self`: `: std::marker::Sized`
| |
| required by `MyTrait`
LL | type This = Self;
| ^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|

View file

@ -0,0 +1,11 @@
use std::ops::{Add, Sub, Mul, Div};
trait ArithmeticOps: Add<Output=Self> + Sub<Output=Self> + Mul<Output=Self> + Div<Output=Self> {}
//~^ ERROR the size for values of type `Self` cannot be known at compilation time
impl<T> ArithmeticOps for T where T: Add<Output=T> + Sub<Output=T> + Mul<Output=T> + Div<Output=T> {
// Nothing to implement, since T already supports the other traits.
// It has the functions it needs already
}
fn main() {}

View file

@ -0,0 +1,17 @@
error[E0277]: the size for values of type `Self` cannot be known at compilation time
--> $DIR/trait-with-supertraits-needing-sized-self.rs:3:22
|
LL | trait ArithmeticOps: Add<Output=Self> + Sub<Output=Self> + Mul<Output=Self> + Div<Output=Self> {}
| ^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time - help: consider further restricting `Self`: `+ std::marker::Sized`
|
::: $SRC_DIR/libcore/ops/arith.rs:LL:COL
|
LL | pub trait Add<Rhs = Self> {
| --- required by this bound in `std::ops::Add`
|
= help: the trait `std::marker::Sized` is not implemented for `Self`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.