Assuming `a` does not have an inherent method named `eq`, I don't think those resolve differently at all. They certainly both fail in the same way with the code mentioned
-
-
Replying to @sgrif
Oh, sorry, the problem here is b not a, my bad. Actually in that case it's far more stark, we're not looking for a method at all, we're looking to see if &b satisfies a certain trait
1 reply 0 retweets 0 likes -
Replying to @ManishEarth @sgrif
yes, we could implement stuff here to make it better, but "does b or *(n)b have a method foo" is different from "does b or &*(n)b work as T in PartialEq<T> for str".
1 reply 0 retweets 0 likes -
Replying to @ManishEarth
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=be5ff1a4c279c3f05e1d4607391623ec … is a more concrete explanation of what I mean. `Self` is special cased in more than just dot form
1 reply 0 retweets 0 likes -
Replying to @sgrif
I don't understand how that's special casing self types? Deref coercions give up pretty easily, that's the root of this. Here it's giving up on the UFCS form only, with the autoderef working: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c0197afb83c273b0f4181ddef6fd0cf6 …
2 replies 0 retweets 0 likes -
Replying to @ManishEarth @sgrif
and here it fails on the .eq() form because of the ambiguity, because the way autoderef works is that it drills down to find the *first* method that matches the *name*, and then tries resolving everything else https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0c1f17bc65fa5bb84f6fd9e3fab8002 …
1 reply 0 retweets 0 likes -
Replying to @ManishEarth @sgrif
it's not the same rules. when it comes to finding .method(), it searches for the first .method() it can find, locks that down, and uses that to inform inference for the arguments.
1 reply 0 retweets 0 likes -
Replying to @ManishEarth @sgrif
when it's trying to coerce &foo to &****foo, there is no such two step process, it's just an additional transform inference may attempt to apply, and it only manages to apply it in cases that are not too generic
1 reply 0 retweets 0 likes -
Replying to @ManishEarth
Right, my point is just that it gives up too easily. There are plenty of cases that could work today that are 100% unambiguous that it gives up on (like literally any other impl existing even if the type involved cannot possibly be deref'd to).
1 reply 0 retweets 0 likes -
Replying to @sgrif @ManishEarth
I also think we could just have standard rules for the ambiguous cases, but there's not a ton of point in debating that on Twitter, I need to write an RFC if I want it to change
1 reply 0 retweets 0 likes
My main point I guess is that a lot of this is arbitrary. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3e3a0bf4b92b481282a1ec6061b12be7 … is just as ambiguous if not moreso than the other cases I've mentioned, but we're fine with arbitrarily picking one even if the code doesn't obviously imply which is picked
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.