------- Comment #9 from jwakely dot gcc at gmail dot com 2009-04-07 14:51 ------- This is not a bug in C++0x either. The spec is:
Given an rvalue fn of type Fn and values t1, t2, ..., tN of types T1, T2, ..., TN in ArgTypes, respectively, the type member is the result type of the expression fn(t1, t2, ...,tN). So the original testcase has Fn=int and tries to find the result of calling int as a function, which is invalid. The original testcase should be: typedef std::result_of<decltype(fn) (long, float)>::type type; which tells you the result of invoking something of type decltype(fn) with arguments of type long and float. Or, to see what happens if you pass it other types: typedef std::result_of<decltype(fn) (int, double)>::type type; This tells you the result of calling e.g. f(0, 0.0), which will result in the arguments being implicitly converted, and as it's a simple function not a function object or other callable type with multiple overloads, the result is always 'int' I believe this is not a bug. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39676