Skip to content

Normalizes-to for a trait-bound-only param #1

Closed
@compiler-errors

Description

@compiler-errors
fn next<T: Iterator<Item = U>, U>(t: &mut T) -> Option<U> {
    t.next()
}

fn foo<T: Iterator>(t: &mut T) {
    let _: Option<T::Item> = next(t);
}

fn main() {}

The below is a normalizes-to pred. In the body of foo, <T as Iterator>::Item normalizes-to <T as Iterator>::Item is false.

error[E0271]: type mismatch resolving `<T as Iterator>::Item == <T as Iterator>::Item`
 --> <source>:6:35
  |
6 |     let _: Option<T::Item> = next(t);
  |                              ---- ^ types differ
  |                              |
  |                              required by a bound introduced by this call
  |
note: required by a bound in `next`
 --> <source>:1:21
  |
1 | fn next<T: Iterator<Item = U>, U>(t: &mut T) -> Option<U> {
  |                     ^^^^^^^^ required by this bound in `next`

error: aborting due to previous error

Metadata

Metadata

Assignees

No one assigned

    Labels

    fundamental-issueSomething that'll need fundamental restructuring or a hack existing at the solver level

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions