【发布时间】:2020-10-08 21:38:06
【问题描述】:
我试图理解为什么这段代码无法编译:
void test_fff()
{
auto f1 = [](int x) {return x;};
decltype(f1) f2 = [](int y) {return y;};
}
这是我得到的编译错误:
错误:要求从 'test_fff()::
' 转换为非标量类型 'test_fff():: ' 177 | decltype(f1) f2 = [](int y) -> int {return y;};
我正在使用带有 -std=c++17 的 g++ 10.2.0
但是,这段代码编译得很好:
void test_fff()
{
FFF<decltype(2)>::foo(2);
std::function<int (int)> f1 = [](int x) {return x;};
decltype(f1) f2 = [](int y) {return y;};
}
两者有什么区别?
【问题讨论】:
-
每个 lambda 都是不同的类型;
auto f1 = []{}; decltype(f1) f2 = []{};也不起作用,因为第一个[]{}和第二个[]{}是不同的类型。