template <class F>
struct return_type;

template <class R, class... A>
struct return_type<R (*)(A...)>
{
  typedef R type;
};


int main()
{
	int (*p)(int, char);
	return_type<decltype(p)>::type i = 0;
	return i;
}