I'm having understanding this concept. When I write,

typedef PV(int) {.........}

PV hello(int, int){........}

I don't see how the function could be a type basically. Is it calling that function everytime? Or is hello now another name? If so, I don't see how it could have a different parameter list.