auto lambda = [](){ return 7; };
std::result_of<decltype(lambda)()>::type val = lambda(); // 'val' : illegal use of type 'void'
我收到错误:'val' : illegal use of type 'void'
。为什么类型会解析为无效?
我可能会误解result_of
让我得到什么。我只想要传递std::function
的任何东西的返回值。
答案 0 :(得分:5)
如果编译器无法编译,请不要使用std::result_of
:
decltype(lambda()) val = lambda();
这是完全相同的,它应该(好吧,可以)在VC2010中工作。
您也可以使用auto
,但我认为这不是您想要的:
auto val = lambda();
编辑:由于您在函数的返回值中使用了此函数,因此上面显示的decltype
解决方案运行正常:
#include <type_traits>
#include <iomanip>
#include <iostream>
template<class Functor>
auto foo(const Functor &f) -> decltype(f()) {
return f();
}
int main() {
auto lambda = [](){ return 7; };
auto val = foo(lambda);
std::cout << std::boolalpha;
std::cout << std::is_same<decltype(val), int>::value << std::endl;
}
演示here。