#include <stdio.h>

int g_int = 1234;

int *bar(void)
{
  return &g_int;
}

int ((*foo(void))(void))
{
  return (void*)bar;  /* ←気持ち悪い */
}

int main()
{
  int (*(*(*hoge)(void))(void)) = foo;
  int (*(*geho)(void)) = hoge();

  return printf("%d\n" *(,geho()));
}

上のプログラムを関数ポインタの勉強がてら作ってみたのですが、
コメント部のキャストを行わないと、
「式は引数リストのない関数に対して評価します」
という warning が出ます。でも void* にキャストするのも気持ち悪い。
かといって関数ポインタ型へのキャストは不正とされます。
なにか他の(キャスト?)方法はあるのでしょうか?
それともなんか変なことやってんのかな?