Default arguments shall be specified only in the parameter-declaration-clause of a function declaration or in a template-parameter. This means that default arguments cannot appear in declarations of pointers to functions, references to functions, or typedef declarations:
void f( int n = 0); //OK //the following declarations are all illegal void (&rf) (int n = 0) = f; //reference to function void (*pf) (int n = 0) ; //pointer to function typedef void (*pfi) (int n = 0); //typedef