Consider the following typedefs :
typedef int (*f1)(float); typedef f1 (*f2)(double); typedef f2 (*f3)(int);
f2 is a function
f2
In C++, the miracle of templates can make this a tad easier.
#include std::add_pointer< std::add_pointer< std::add_pointer< int(float) >::type(double) >::type(int) >::type wow;