When a method not found on a type parameter could have been provided by any
of multiple traits, suggest each trait individually, instead of a single
suggestion to restrict the type parameter with *all* of them.
Before:
```
error[E0599]: the method `cmp` exists for reference `&T`, but its trait bounds were not satisfied
--> $DIR/method-on-unbounded-type-param.rs:5:10
|
LL | (&a).cmp(&b)
| ^^^ method cannot be called on `&T` due to unsatisfied trait bounds
|
= note: the following trait bounds were not satisfied:
`T: Ord`
which is required by `&T: Ord`
`&T: Iterator`
which is required by `&mut &T: Iterator`
`T: Iterator`
which is required by `&mut T: Iterator`
help: consider restricting the type parameters to satisfy the trait bounds
|
LL | fn g<T>(a: T, b: T) -> std::cmp::Ordering where T: Iterator, T: Ord {
| +++++++++++++++++++++++++
```
After:
```
error[E0599]: the method `cmp` exists for reference `&T`, but its trait bounds were not satisfied
--> $DIR/method-on-unbounded-type-param.rs:5:10
|
LL | (&a).cmp(&b)
| ^^^ method cannot be called on `&T` due to unsatisfied trait bounds
|
= note: the following trait bounds were not satisfied:
`T: Ord`
which is required by `&T: Ord`
`&T: Iterator`
which is required by `&mut &T: Iterator`
`T: Iterator`
which is required by `&mut T: Iterator`
= help: items from traits can only be used if the type parameter is bounded by the trait
help: the following traits define an item `cmp`, perhaps you need to restrict type parameter `T` with one of them:
|
LL | fn g<T: Ord>(a: T, b: T) -> std::cmp::Ordering {
| +++++
LL | fn g<T: Iterator>(a: T, b: T) -> std::cmp::Ordering {
| ++++++++++
```
Fix #108428.
22 lines
923 B
Plaintext
22 lines
923 B
Plaintext
error[E0599]: the method `clone` exists for struct `Box<dyn Foo>`, but its trait bounds were not satisfied
|
|
--> $DIR/unique-object-noncopyable.rs:24:16
|
|
|
|
|
LL | trait Foo {
|
|
| --------- doesn't satisfy `dyn Foo: Clone` or `dyn Foo: Sized`
|
|
...
|
|
LL | let _z = y.clone();
|
|
| ^^^^^ method cannot be called on `Box<dyn Foo>` due to unsatisfied trait bounds
|
|
|
|
|
= note: the following trait bounds were not satisfied:
|
|
`dyn Foo: Sized`
|
|
which is required by `Box<dyn Foo>: Clone`
|
|
`dyn Foo: Clone`
|
|
which is required by `Box<dyn Foo>: Clone`
|
|
= help: items from traits can only be used if the trait is implemented and in scope
|
|
= note: the following trait defines an item `clone`, perhaps you need to implement it:
|
|
candidate #1: `Clone`
|
|
|
|
error: aborting due to 1 previous error
|
|
|
|
For more information about this error, try `rustc --explain E0599`.
|