An argument list must be explicitly present in the declarator; it cannot be inherited from a typedef (see §3.5.4.3). That is to say, given the definition typedef int p(int q, int r); the following fragment is invalid: p funk /* weird */ { return q + r ; }