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.
52 lines
2.8 KiB
Plaintext
52 lines
2.8 KiB
Plaintext
error[E0599]: the method `filterx` exists for struct `Map<Repeat, {closure@issue-30786.rs:119:27}>`, but its trait bounds were not satisfied
|
|
--> $DIR/issue-30786.rs:120:22
|
|
|
|
|
LL | pub struct Map<S, F> {
|
|
| -------------------- method `filterx` not found for this struct because it doesn't satisfy `_: StreamExt`
|
|
...
|
|
LL | let filter = map.filterx(|x: &_| true);
|
|
| ^^^^^^^ method cannot be called on `Map<Repeat, {closure@issue-30786.rs:119:27}>` due to unsatisfied trait bounds
|
|
|
|
|
note: the following trait bounds were not satisfied:
|
|
`&'a mut &Map<Repeat, {closure@$DIR/issue-30786.rs:119:27: 119:34}>: Stream`
|
|
`&'a mut &mut Map<Repeat, {closure@$DIR/issue-30786.rs:119:27: 119:34}>: Stream`
|
|
`&'a mut Map<Repeat, {closure@$DIR/issue-30786.rs:119:27: 119:34}>: Stream`
|
|
--> $DIR/issue-30786.rs:98:50
|
|
|
|
|
LL | impl<T> StreamExt for T where for<'a> &'a mut T: Stream {}
|
|
| --------- - ^^^^^^ unsatisfied trait bound introduced here
|
|
= help: items from traits can only be used if the trait is implemented and in scope
|
|
note: `StreamExt` defines an item `filterx`, perhaps you need to implement it
|
|
--> $DIR/issue-30786.rs:66:1
|
|
|
|
|
LL | pub trait StreamExt
|
|
| ^^^^^^^^^^^^^^^^^^^
|
|
|
|
error[E0599]: the method `countx` exists for struct `Filter<Map<Repeat, fn(&u64) -> &u64 {identity::<u64>}>, {closure@issue-30786.rs:131:30}>`, but its trait bounds were not satisfied
|
|
--> $DIR/issue-30786.rs:132:24
|
|
|
|
|
LL | pub struct Filter<S, F> {
|
|
| ----------------------- method `countx` not found for this struct because it doesn't satisfy `_: StreamExt`
|
|
...
|
|
LL | let count = filter.countx();
|
|
| ^^^^^^ method cannot be called due to unsatisfied trait bounds
|
|
|
|
|
note: the following trait bounds were not satisfied:
|
|
`&'a mut &Filter<Map<Repeat, for<'a> fn(&'a u64) -> &'a u64 {identity::<u64>}>, {closure@$DIR/issue-30786.rs:131:30: 131:37}>: Stream`
|
|
`&'a mut &mut Filter<Map<Repeat, for<'a> fn(&'a u64) -> &'a u64 {identity::<u64>}>, {closure@$DIR/issue-30786.rs:131:30: 131:37}>: Stream`
|
|
`&'a mut Filter<Map<Repeat, for<'a> fn(&'a u64) -> &'a u64 {identity::<u64>}>, {closure@$DIR/issue-30786.rs:131:30: 131:37}>: Stream`
|
|
--> $DIR/issue-30786.rs:98:50
|
|
|
|
|
LL | impl<T> StreamExt for T where for<'a> &'a mut T: Stream {}
|
|
| --------- - ^^^^^^ unsatisfied trait bound introduced here
|
|
= help: items from traits can only be used if the trait is implemented and in scope
|
|
note: `StreamExt` defines an item `countx`, perhaps you need to implement it
|
|
--> $DIR/issue-30786.rs:66:1
|
|
|
|
|
LL | pub trait StreamExt
|
|
| ^^^^^^^^^^^^^^^^^^^
|
|
|
|
error: aborting due to 2 previous errors
|
|
|
|
For more information about this error, try `rustc --explain E0599`.
|