Skip to content

supertrait expansion needs normalization #23208

Closed
@nikomatsakis

Description

@nikomatsakis

This example doesn't compile:

trait TheTrait : TheSuperTrait<<Self as TheTrait>::Item> {
    type Item;
}

trait TheSuperTrait<T> {
    fn get(&self) -> T;
}

impl TheTrait for i32 {
    type Item = u32;
}

impl TheSuperTrait<u32> for i32 {
    fn get(&self) -> u32 {
        *self as u32
    }
}

fn foo<T:TheTrait<Item=u32>>(t: &T) -> u32 {
    t.get()
}

fn main() {
    foo::<i32>(&22);
}

This is because we fail to normalize during supertrait expansion.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-associated-itemsArea: Associated items (types, constants & functions)E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions