compiler-errors/next-solver-hir-issues

Normalizes-to for a trait-bound-only param

compiler-errors opened this issue · 1 comments

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

Can't transfer this to the new repo since github doesn't allow transferring issues across owners apparently.