result_of对我不起作用

时间:2012-02-03 13:44:19

标签: c++ c++11 sfinae result-of

#include <type_traits>
using namespace std;

struct asd{
    void f();
};

int f();

typedef typename result_of<decltype(f)>::type result_free;
typedef typename result_of<decltype(&asd::f)>::type result_mem;

typedef都会出错

In file included from ../main.cpp:1:0:
/usr/include/c++/4.6/type_traits: In instantiation of ‘std::_Result_of_impl<false, false, int>’:
/usr/include/c++/4.6/type_traits:1215:12:   instantiated from ‘std::result_of<int()>’
../main.cpp:10:41:   instantiated from here
/usr/include/c++/4.6/type_traits:1192:9: error: ‘std::declval [with _Tp = int, typename std::add_rvalue_reference<_Tp>::type = int&&]()’ cannot be used as a function
../main.cpp:10:43: error: invalid combination of multiple type-specifiers
../main.cpp:10:59: error: invalid type in declaration before ‘;’ token
../main.cpp:11:49: error: ‘type’ in ‘struct std::result_of<void (asd::*)()>’ does not name a type
../main.cpp:11:64: error: invalid type in declaration before ‘;’ token

1 个答案:

答案 0 :(得分:6)

result_of是result_of<Fn(ArgTypes...)>,而不只是result_of<Fn>;

尝试

typedef typename result_of<decltype(&f)()>::type result_free;
typedef typename result_of<decltype(&asd::f)(asd)>::type result_mem;

(适用于gcc 4.6.2)