这种result_of用法有什么问题?


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的返回值.

如果你的编译器编译失败,那么不要使用 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;
}

在这里演示。

最新更新