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.