我一直在尝试找出lambda表达式的返回类型,以了解该函数是否返回void
。
[我的第一个想法是使用std::invoke_result
,但是它没有按预期方式工作,因为它与std::is_same
不兼容,后者需要两种类型。
这是我一直在尝试的
auto lamb = [] ( int x ) { cout << x << endl; };
is_same<(invoke_result<decltype(lamb),int>),void>;
错误是:
trabapply2.cc:32:50: error: template argument 1 is invalid
is_same<(invoke_result<decltype(lamb),int>),void>;
有什么建议吗?
您应删除invoke_result
周围多余的括号,并从type
中获取invoke_result
,并从value
中获取is_same
。 e.g。
is_same<invoke_result<decltype(lamb), int>::type, void>::value // gives true or false
或
is_same_v<invoke_result_t<decltype(lamb), int>, void> // since C++17