'identifier1' has C-linkage specified, but returns UDT 'identifier2' which is incompatible with C
A function or pointer to function has a UDT (user-defined type, which is a class, structure, enum, union, or __value type) as return type and extern "C" linkage. This is legal if:
Example
struct X { int i; X (); virtual ~X (); }; extern "C" X func (); // warning