Right now Clang will select incorrect overload when the Objective-C interface type is specialized, e.g.:
void overload(Base *b);
void overload(Derived *d);
void test(Base<Base *> b) {
overload(b); // This will select (Derived *) overload
}This patch ensures that the conversion from specialized to non-specialized type that points to the same interface is better than the other objective-c pointer conversions.