如果你的编译器无法编译,那么不要使用
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
。