【发布时间】:2017-05-24 19:21:43
【问题描述】:
为什么下面的代码不能编译? g++ 输出错误信息:
test.cpp: In function ‘void test(bool)’:
test.cpp:11:15: error: operands to ?: have different types ‘test(bool)::<lambda(int)>’ and ‘test(bool)::<lambda(int)>’
yadda(flag?x:y);
~~~~^~~~
这对我来说意义不大,因为错误消息中给出的两种类型似乎是相同的。我正在使用以下代码:
#include <functional>
void yadda(std::function<int(int)> zeptok) {
zeptok(123);
}
void test(bool flag) {
int a = 33;
auto x = [&a](int size){ return size*3; };
auto y = [&a](int size){ return size*2; };
yadda(flag?x:y);
}
我使用“g++ -c test.cpp -std=c++14”编译,我的 GCC 版本是“6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2)”。
【问题讨论】:
-
独立的 lambda 有自己独立的实现,因此它们被视为独立的类型,即使它们碰巧具有相同的签名。
-
....听起来很合理,但错误消息不应该反映这一点吗?目前它说,对于某些“A”,A 与 A 不同。