If neither have ellipsis, then it is possibile that the two function
types are both compatible with a "common" function type, which is not
in prototype form. Then 6.2.5p27 applies, as you clearly explained in
your reply to Eric Sosman.
But if both have ellipsis, and are not compatible, I don't think there
is a "common ancestor" in the compatibility relation. In which cases,
and in the standard it is said that, pointers to such function types
have the same represetation etc... ?
I answer to myself, of course Tim is right, cases of pairs of function
types not compatible with each other but both compatible with a third
type exist also when both function types have ellipsis.
As an exercise, let C be the (binary) relation of compatibility
between types. Let D be the binary relation between pairs (T1,T2) of
types such that T1 and T2 are not compatibile, but type T0 exists that
is compatible with both T1 and T2. (i.e. D = C^2 - C). So given
(T1,T2) in D, another pair of types in D can be constructed as
function types returning, respectively T1 and T2 and with identical
parameters, or having T1 and T2 as corresponding parameters. And this
function types can both have parameter type lists ending with
ellipsis.
For instance int [4] and int [5] form a pair in D, so as int (*)[4]
and int (*)[5]. (incidentally, int (*)[4] and int (*)[5] are pointer
to object types not compatible with each other but both required to
have the same represetation and alignment requirments as int (*)[] and
as int (*)[n] ).
Then void (*pg1)( int, int (*)[4], ... ) and void (*pg2)( int, int (*)
[5], ... ) are pointer to function types not compatible with each
other but both required to have the same representation and alignment
requirments as void (*pg0)( int n, int (*)[n], ... ).
Similarly (considering the return types),
int ( * (*pf1)(int, ...) )[4] and int ( * (*pf2)(int, ...) )[5]
are pointer to function types not compatible with each other but both
required to have the same representation and alignment requirments as
int ( * (*)(int, ...) )[].