问题

我一直在尝试找出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周围的多余括号,并从invoke_result中获取type,并从is_same中获取value.例如

 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
 

LIVE

  相同标签的其他问题

c++lambdatypesc++17