Result_of does not work for me

#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; 

both typedefs throw an error

 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 
+4
source share
1 answer

result_of result_of<Fn(ArgTypes...)> , and not just result_of<Fn> ;

Try

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

(works with gcc 4.6.2)

+6
source

Source: https://habr.com/ru/post/1394621/


All Articles