【发布时间】:2021-10-23 18:00:57
【问题描述】:
这里是示例代码
#include <iostream>
template<typename T>
T foo(T(*fp)())
{
return fp();
}
int main()
{
std::cout<<foo([]->int{ return 1; });
}
当我编译上面的代码时,编译器说它不能推导出模板参数, 但我已经指定了 lambda 的返回类型。
【问题讨论】:
-
您是否尝试过在
[]之前添加+(明确转换lambda -> 函数指针)? -
我看到 g++ 和 clang++ 的另一个问题:显式返回类型。应要求在
->int之前显式使用();所以foo(+[]()->int{ return 1; });。否则,你可以避免显式返回类型(它是从return 1;推导出来的),所以foo(+[]{ return 1; });