Skip to content

inherent method selection uses subtyping even when using paths #126227

Description

@lcnr
struct B<T>(T);

impl B<fn(&'static ())> {
    fn method(self) {
        println!("hey");
    }
}

fn foo(x: B<for<'a> fn(&'a ())>) {
    x.method(); // ok, method call
    B::<for<'a> fn(&'a ())>::method(x); // ok, explicit path
}

fn main() {
   
}

I would like us to change method selection for associated items to use equality. It feels very wrong to completely ignore the user type annotation here:

struct B<T>(T);

impl B<fn(&'static ())> {
    fn method(self) {
        println!("hey");
    }
}

fn foo(y: B<fn(&'static ())>) {
    // looks like it requires a hr fn pointer,
    // but we never check that.
    B::<for<'a> fn(&'a ())>::method(y);
}

fn main() {}

cc #126128 @compiler-errors @oli-obk

Activity

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

    T-typesRelevant to the types team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions