result_of у меня не работает - PullRequest
4 голосов
/ 03 февраля 2012
#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;

оба определения типа дают ошибку

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 Ответ

6 голосов
/ 03 февраля 2012

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)

...