void printi(int val);

typedef int (*func_t)(int val);

int func2(int val)
{
  return val;
}

int (*func(int, int (*)(int)))(int);

func_t func(int arg0, int (*arg1)(int))
{
  int (*f)(int val);
  f = func2;
  return f;
}

int main()
{
  int (*f)(int val);
  int val;

  f = func(0, 0);

  val = f(10);
  printi(val);

  return 0;
}
