Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"note: method exists but trait bounds not satisfied" could be better #36513

Closed
2 tasks
durka opened this issue Sep 16, 2016 · 12 comments
Closed
2 tasks

"note: method exists but trait bounds not satisfied" could be better #36513

durka opened this issue Sep 16, 2016 · 12 comments
Labels
A-diagnostics Area: Messages for errors, warnings, and lints C-enhancement Category: An issue proposing an enhancement or a PR with one. D-confusing Diagnostics: Confusing error or lint that should be reworked. D-papercut Diagnostics: An error or lint that needs small tweaks. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@durka
Copy link
Contributor

durka commented Sep 16, 2016

I saw this broken code on IRC:

pub trait JoinWithString { 
  fn join(self, separator: &'static str) -> String; 
} 

impl<X> JoinWithString for X 
  where X: Iterator<Item = String> 
{ 
  fn join(self, separator: &'static str) -> String { 
    unimplemented!()
  } 
}


fn main() {
    let a: Vec<std::path::PathBuf> = Vec::new();
    a.iter().map(|x| x.to_str().unwrap()).join(":");

}

I know why it's broken, but I don't like the error message:

error: no method named `join` found for type `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@<anon>:16:18: 16:41]>` in the current scope
  --> <anon>:16:43
   |>
16 |>     a.iter().map(|x| x.to_str().unwrap()).join(":");
   |>                                           ^^^^
note: the method `join` exists but the following trait bounds were not satisfied: `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@<anon>:16:18: 16:41]> : std::iter::Iterator`
help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `join`, perhaps you need to implement it:
help: candidate #1: `JoinWithString`
  • The note just told me that the problem is the trait bounds, so it is superfluous to suggest importing a trait (even without the note, it doesn't need to be imported so the help is useless).
  • The note says Iterator is not satisfied, which is not helpful. The problem is that Iterator<Item=String> is not satisfied.
@arielb1 arielb1 added the A-diagnostics Area: Messages for errors, warnings, and lints label Sep 18, 2016
@therustmonk
Copy link
Contributor

I want to add the case to don't duplicate an issue. Message is unsophisticated if I use different versions of crates. I stumbled it many times (

Example:

error[E0277]: the trait bound `mould_auth::AuthService<checker::Checker<r2d2::Pool<r2d2_postgres::PostgresConnectionManager>>, session::UserRole, dba::Error>: mould::service::Service<session::UserSession>` is not satisfied
  --> src\main.rs:63:11
   |
63 |     suite.register("auth-service", auth_service);
   |           ^^^^^^^^ trait `mould_auth::AuthService<checker::Checker<r2d2::Pool<r2d2_postgres::PostgresConnectionManager>>, session::UserRole, dba::Error>: mould::service::Service<session::UserSession>` not satisfied

error[E0277]: the trait bound `mould_auth::TokenService<checker::Checker<r2d2::Pool<r2d2_postgres::PostgresConnectionManager>>, session::UserRole, dba::Error>: mould::service::Service<session::UserSession>` is not satisfied
  --> src\main.rs:68:11
   |
68 |     suite.register("token-service", token_service);
   |           ^^^^^^^^ trait `mould_auth::TokenService<checker::Checker<r2d2::Pool<r2d2_postgres::PostgresConnectionManager>>, session::UserRole, dba::Error>: mould::service::Service<session::UserSession>` not satisfied

error: aborting due to 2 previous errors

There is an error, because main crate use one dependency from git, but child uses same dependency from crates.io. It was hard to found, because I thought it was as error with an implementation.

@steveklabnik steveklabnik added T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 9, 2017
@Mark-Simulacrum Mark-Simulacrum added the C-enhancement Category: An issue proposing an enhancement or a PR with one. label Jul 26, 2017
@estebank
Copy link
Contributor

Current output:

error[E0599]: no method named `join` found for type `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@src/main.rs:16:18: 16:41]>` in the current scope
  --> src/main.rs:16:43
   |
16 |     a.iter().map(|x| x.to_str().unwrap()).join(":");
   |                                           ^^^^
   |
   = note: the method `join` exists but the following trait bounds were not satisfied:
           `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@src/main.rs:16:18: 16:41]> : JoinWithString`
           `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@src/main.rs:16:18: 16:41]> : JoinWithString`
           `&mut std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@src/main.rs:16:18: 16:41]> : JoinWithString`
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `join`, perhaps you need to implement it:
           candidate #1: `JoinWithString`

@IRobL
Copy link

IRobL commented Jan 1, 2019

I'm getting a similar problem here too. I'm trying to convert a Json object to a string. Rocket and serde is involved in this issue:

#[macro_use] extern crate rocket;
#[macro_use] extern crate serde_derive;

extern crate rand;
extern crate serde_json;


use rand::{thread_rng, Rng};
use rocket_contrib::json::Json;

#[derive(Deserialize)]
struct MTT2Game {
    mode: String,
    user: String,
    difficulty: String,
    reported_at: String
}

#[post("/games/mtt2/modes/progression/games", format = "application/json", data = "<game>")]
fn mtt2_progression_game(game: Json<MTT2Game>) -> String {
    println!( "{}", game.to_string() );

    return "{ \"id\": \"1\" }".to_owned();
}

The error is:

error[E0599]: no method named `to_string` found for type `rocket_contrib::json::Json<MTT2Game>` in the current scope
  --> src/main.rs:43:26
   |
43 |     println!( "{}", game.to_string() );
   |                          ^^^^^^^^^
   |
   = note: the method `to_string` exists but the following trait bounds were not satisfied:
           `MTT2Game : std::string::ToString`
           `rocket_contrib::json::Json<MTT2Game> : std::string::ToString`
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `to_string`, perhaps you need to implement it:
           candidate #1: `std::string::ToString`

It mentions that something isn't satisfied, which is helpful. Maybe this is an issue with the underlying Json object and not Rust?

@Nemo157
Copy link
Member

Nemo157 commented Feb 26, 2019

Another variant of the “same trait from different versions” is when you have the exact same version but from different sources, e.g. crates.io and a git dependency.

@ryankurte
Copy link

ryankurte commented Jan 8, 2020

another example is where trait bounds are nested, in which case the error suggests that the bounds are not met, but not which bounds or why.

a simple example (playground link):

pub struct Example;

trait A {
    fn do_a(&self);
}

trait B {
    fn do_b(&self);
}

trait Empty {}

impl <T> B for T where T: A + Empty
{
    fn do_b(&self) {
        self.do_a()
    }
}

impl A for Example {
    fn do_a(&self) {
        println!("A!");
    }
}

fn main() {
    let e = Example;
    e.do_b();
}

Error:

   |
2  | pub struct Example;
   | ------------------- method `do_b` not found for this
...
29 |     e.do_b();
   |       ^^^^ method not found in `Example`
   |
   = note: the method `do_b` exists but the following trait bounds were not satisfied:
           `Example : B`
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `do_b`, perhaps you need to implement it:
           candidate #1: `B`

it would be extremely useful in this instance to have a note to indicate why the bound is not met, in this instance as A does not implement Empty, but it's usually a lot more complicated, and with multiple bounds becomes rather a dice rolling exercise.

@estebank estebank added D-confusing Diagnostics: Confusing error or lint that should be reworked. D-papercut Diagnostics: An error or lint that needs small tweaks. labels Jan 8, 2020
@estebank
Copy link
Contributor

estebank commented Feb 19, 2020

For the original case, would the following output be acceptable?

error[E0599]: no method named `join` found for struct `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]>` in the current scope
  --> file5.rs:18:43
   |
1  | pub trait JoinWithString {
   | ------------------------ this trait defines an item `join`
...
18 |     a.iter().map(|x| x.to_str().unwrap()).join(":");
   |                                           ^^^^ method not found in `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]>`
   |
   = note: the method `join` exists but the following trait bounds were not satisfied:
           `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]>: std::iter::Iterator`
           `<&mut std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]> as std::iter::Iterator>::Item = std::string::String`
           `<&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]> as std::iter::Iterator>::Item = std::string::String`
           `<std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]> as std::iter::Iterator>::Item = std::string::String`
   = help: items from traits can only be used if the trait is implemented and in scope

That's the current output in #69255. I think I can change it slightly to be less verbose, but worry about it being more confusing in the general case:

error[E0599]: no method named `join` found for struct `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]>` in the current scope
  --> file5.rs:18:43
   |
1  | pub trait JoinWithString {
   | ------------------------ this trait defines an item `join`
...
18 |     a.iter().map(|x| x.to_str().unwrap()).join(":");
   |                                           ^^^^ method not found in `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]>`
   |
   = note: the method `join` exists but the following trait bounds were not satisfied:
           `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:18:18: 18:41]>: std::iter::Iterator`
           `<_ as std::iter::Iterator>::Item = std::string::String`
   = help: items from traits can only be used if the trait is implemented and in scope

The case in the last comment would now be:

error[E0599]: no method named `do_b` found for struct `Example` in the current scope
  --> file5.rs:28:7
   |
1  | pub struct Example;
   | -------------------
   | |
   | method `do_b` not found for this
   | doesn't satisfy `Example: Empty`
...
7  | trait B {
   | ------- this trait defines an item `do_b`
...
28 |     e.do_b();
   |       ^^^^ method not found in `Example`
   |
   = note: the method `do_b` exists but the following trait bounds were not satisfied:
           `Example: Empty`
   = help: items from traits can only be used if the trait is implemented and in scope

@ryankurte
Copy link

ryankurte commented Feb 20, 2020

   = note: the method `do_b` exists but the following trait bounds were not satisfied:
           `Example: Empty`

looks great to me! the question then is how it generalises to work with more complex nested bounds, but, i don't have a good example handy at the moment (the snippet i posted was a minimum reproduction of something, but, i can't remember what).

@estebank
Copy link
Contributor

Current output in #69255:

error[E0599]: no method named `join` found for struct `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>` in the current scope
   --> file5.rs:16:43
    |
16  |     a.iter().map(|x| x.to_str().unwrap()).join(":");
    |                                           ^^^^ method not found in `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>`
    |
   ::: /rust/src/libcore/iter/adapters/mod.rs:751:1
    |
751 | pub struct Map<I, F> {
    | --------------------
    | |
    | doesn't satisfy `<_ as std::iter::Iterator>::Item = std::string::String`
    | doesn't satisfy `_: JoinWithString`
    |
    = note: the method `join` exists but the following trait bounds were not satisfied:
            `<std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]> as std::iter::Iterator>::Item = std::string::String`
            which is required by `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
            `<&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]> as std::iter::Iterator>::Item = std::string::String`
            which is required by `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
            `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: std::iter::Iterator`
            which is required by `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
            `<&mut std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]> as std::iter::Iterator>::Item = std::string::String`
            which is required by `&mut std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
    = help: items from traits can only be used if the trait is implemented and in scope
note: `JoinWithString` defines an item `join`, perhaps you need to implement it
   --> file5.rs:1:1
    |
1   | pub trait JoinWithString {
    | ^^^^^^^^^^^^^^^^^^^^^^^^

which would look like this in end user's envs:

error[E0599]: no method named `join` found for struct `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>` in the current scope
   --> file5.rs:16:43
    |
16  |     a.iter().map(|x| x.to_str().unwrap()).join(":");
    |                                           ^^^^ method not found in `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>`
    |
    = note: the method `join` exists but the following trait bounds were not satisfied:
            `<std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]> as std::iter::Iterator>::Item = std::string::String`
            which is required by `std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
            `<&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]> as std::iter::Iterator>::Item = std::string::String`
            which is required by `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
            `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: std::iter::Iterator`
            which is required by `&std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
            `<&mut std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]> as std::iter::Iterator>::Item = std::string::String`
            which is required by `&mut std::iter::Map<std::slice::Iter<'_, std::path::PathBuf>, [closure@file5.rs:16:18: 16:41]>: JoinWithString`
    = help: items from traits can only be used if the trait is implemented and in scope
note: `JoinWithString` defines an item `join`, perhaps you need to implement it
   --> file5.rs:1:1
    |
1   | pub trait JoinWithString {
    | ^^^^^^^^^^^^^^^^^^^^^^^^

Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this issue Feb 27, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this issue Feb 28, 2020
bors added a commit that referenced this issue Feb 29, 2020
Add more context to E0599 errors

Point at the intermediary unfulfilled trait bounds.

Fix #52523, fix #61661, cc #36513, fix #68131, fix #64417, fix #61768, cc #57457, cc #9082, fix #57994, cc #64934, cc #65149.
@estebank
Copy link
Contributor

Current output:

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=6cbf4fa213e76411d82a44730a73eee6

error[E0599]: the method `do_b` exists for struct `Example`, but its trait bounds were not satisfied
  --> src/main.rs:29:7
   |
2  | pub struct Example;
   | -------------------
   | |
   | method `do_b` not found for this
   | doesn't satisfy `Example: B`
   | doesn't satisfy `Example: Empty`
...
29 |     e.do_b();
   |       ^^^^ method cannot be called on `Example` due to unsatisfied trait bounds
   |
   = note: the following trait bounds were not satisfied:
           `Example: Empty`
           which is required by `Example: B`

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=5a1f06c80285b4258893810d918ebdb0

error[E0599]: the method `join` exists for struct `Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>`, but its trait bounds were not satisfied
  --> src/main.rs:16:43
   |
16 |       a.iter().map(|x| x.to_str().unwrap()).join(":");
   |                                             ^^^^ method cannot be called on `Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>` due to unsatisfied trait bounds
   |
   = note: the following trait bounds were not satisfied:
           `<Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]> as Iterator>::Item = String`
           which is required by `Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>: JoinWithString`
           `<&Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]> as Iterator>::Item = String`
           which is required by `&Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>: JoinWithString`
           `&Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>: Iterator`
           which is required by `&Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>: JoinWithString`
           `<&mut Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]> as Iterator>::Item = String`
           which is required by `&mut Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:41]>: JoinWithString`


@estebank
Copy link
Contributor

Current output:

error[E0599]: the method `do_b` exists for struct `Example`, but its trait bounds were not satisfied
  --> src/main.rs:29:7
   |
2  | pub struct Example;
   | ------------------
   | |
   | method `do_b` not found for this struct
   | doesn't satisfy `Example: B`
   | doesn't satisfy `Example: Empty`
...
29 |     e.do_b();
   |       ^^^^ method cannot be called on `Example` due to unsatisfied trait bounds
   |
note: trait bound `Example: Empty` was not satisfied
  --> src/main.rs:14:31
   |
14 | impl <T> B for T where T: A + Empty
   |          -     -              ^^^^^ unsatisfied trait bound introduced here
note: the following trait must be implemented
  --> src/main.rs:12:1
   |
12 | trait Empty {}
   | ^^^^^^^^^^^
error[E0599]: the method `join` exists for struct `Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:21]>`, but its trait bounds were not satisfied
  --> src/main.rs:16:43
   |
16 |     a.iter().map(|x| x.to_str().unwrap()).join(":");
   |                                           ^^^^ method cannot be called on `Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:21]>` due to unsatisfied trait bounds
  --> /rustc/0f529f0f49f4dd404b78e605398531c96f220fc5/library/core/src/iter/adapters/map.rs:61:1
   |
   |   = note: doesn't satisfy `<_ as Iterator>::Item = String`
  
 = note: doesn't satisfy `_: JoinWithString`
   |
note: trait bound `&Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:21]>: Iterator` was not satisfied
  --> src/main.rs:6:12
   |
5  | impl<X> JoinWithString for X 
   |         --------------     -
6  |   where X: Iterator<Item = String> 
   |            ^^^^^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound introduced here
note: the following trait bounds were not satisfied:
      `<&Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:21]> as Iterator>::Item = String`
      `<&mut Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:21]> as Iterator>::Item = String`
      `<Map<std::slice::Iter<'_, PathBuf>, [closure@src/main.rs:16:18: 16:21]> as Iterator>::Item = String`
  --> src/main.rs:6:21
   |
5  | impl<X> JoinWithString for X 
   |         --------------     -
6  |   where X: Iterator<Item = String> 
   |                     ^^^^^^^^^^^^^ unsatisfied trait bound introduced here

For the second case, we should point at the map and state what type Iterator::Item is there.

@estebank
Copy link
Contributor

estebank commented Feb 7, 2024

Current output:

error[E0599]: the method `do_b` exists for struct `Example`, but its trait bounds were not satisfied
  --> src/main.rs:29:7
   |
2  | pub struct Example;
   | ------------------ method `do_b` not found for this struct because it doesn't satisfy `Example: B` or `Example: Empty`
...
29 |     e.do_b();
   |       ^^^^ method cannot be called on `Example` due to unsatisfied trait bounds
   |
note: trait bound `Example: Empty` was not satisfied
  --> src/main.rs:14:31
   |
14 | impl <T> B for T where T: A + Empty
   |          -     -              ^^^^^ unsatisfied trait bound introduced here
note: the trait `Empty` must be implemented
  --> src/main.rs:12:1
   |
12 | trait Empty {}
   | ^^^^^^^^^^^
error[E0599]: the method `join` exists for struct `Map<Iter<'_, PathBuf>, {closure@main.rs:16:18}>`, but its trait bounds were not satisfied
  --> src/main.rs:16:43
   |
16 |     a.iter().map(|x| x.to_str().unwrap()).join(":");
   |                                           ^^^^ method cannot be called on `Map<Iter<'_, PathBuf>, {closure@main.rs:16:18}>` due to unsatisfied trait bounds
   |
  ::: /playground/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:62:1
   |
62 | pub struct Map<I, F> {
   | -------------------- doesn't satisfy `<_ as Iterator>::Item = String` or `_: JoinWithString`
   |
note: the following trait bounds were not satisfied:
      `&Map<std::slice::Iter<'_, PathBuf>, {closure@src/main.rs:16:18: 16:21}>: Iterator`
      `<&Map<std::slice::Iter<'_, PathBuf>, {closure@src/main.rs:16:18: 16:21}> as Iterator>::Item = String`
      `<&mut Map<std::slice::Iter<'_, PathBuf>, {closure@src/main.rs:16:18: 16:21}> as Iterator>::Item = String`
      `<Map<std::slice::Iter<'_, PathBuf>, {closure@src/main.rs:16:18: 16:21}> as Iterator>::Item = String`
  --> src/main.rs:6:12
   |
5  | impl<X> JoinWithString for X 
   |         --------------     -
6  |   where X: Iterator<Item = String> 
   |            ^^^^^^^^^^^^^^^^^^^^^^^
   |            |        |
   |            |        unsatisfied trait bound introduced here
   |            unsatisfied trait bound introduced here

@estebank
Copy link
Contributor

The only part left to do in this ticket is covered by #40375, so I'll close this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-diagnostics Area: Messages for errors, warnings, and lints C-enhancement Category: An issue proposing an enhancement or a PR with one. D-confusing Diagnostics: Confusing error or lint that should be reworked. D-papercut Diagnostics: An error or lint that needs small tweaks. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

9 participants