In gcc/gcc/testsuite/gcc.c-torture/compile/pr43635.c we have extern void d (void); void (*foo (void)) (float) { void (*(*x) (void)) (float) = d; return (*x) (); } d is a function without parameters and nothing returns. foo is function without parameters and returns pointer to function with one parameter float and also returning void? what is type of x? void (*(*x) (void)) (float) is on whole type definition of x or part is type definition of x and part is cast d to x? which parts? why not returns x but (*x) ()? don' t return pointer to function but call this function? I know, this is malignant example, in in real world can't be cast function returning void to function returning value