Skip to content

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

@compiler-errors

Description

@compiler-errors
Owner
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

Activity

added
fundamental-issueSomething that'll need fundamental restructuring or a hack existing at the solver level
on Mar 29, 2023
compiler-errors

compiler-errors commented on Apr 13, 2023

@compiler-errors
OwnerAuthor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

        Participants

        @compiler-errors

        Issue actions

          Normalizes-to for a trait-bound-only param · Issue #1 · compiler-errors/next-solver-hir-issues