Skip to content

using impl candidates shadowed by where-bound overflows by using impl with only super trait bounds #76

Open
rust-lang/rust
#120836
@lcnr

Description

@lcnr

https://rust.godbolt.org/z/8fzsP4MbE

trait Super {
    type SuperAssoc;
}

trait Trait: Super<SuperAssoc = Self::TraitAssoc> {
    type TraitAssoc;
}

impl<T, U> Trait for T
where
    T: Super<SuperAssoc = U>,
{
    type TraitAssoc = U;
}

fn overflow<T: Trait>() {
    let x: <T as Trait>::TraitAssoc;
}

normalizing <T as Trait>::TraitAssoc in the elaborated environment [T: Trait, T: Super, <T as Super>::SuperAssoc = <T as Trait>::TraitAssoc] has a single impl candidate, which uses the environment to normalize <T as Trait>::TraitAssoc to itself :3

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions