/* When assigning function pointers, allow for covariant return types and contravariant argument types. */ /* { dg-do compile } */ #include "../objc-obj-c++-shared/TestsuiteObject.h" @class Derived; TestsuiteObject *ExternFunc (TestsuiteObject *filePath, TestsuiteObject *key); typedef id FuncSignature (TestsuiteObject *arg1, Derived *arg2); @interface Derived: TestsuiteObject + (void)registerFunc:(FuncSignature *)function; @end void foo(void) { [Derived registerFunc: ExternFunc]; }