为什么以下代码无法编译? 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);
}
我使用&#34; g ++ -c test.cpp -std = c ++ 14&#34;我的GCC版本是&#34; 6.3.0 20170406(Ubuntu 6.3.0-12ubuntu2)&#34;。
答案 0 :(得分:3)
消息是正确的。每个lambda都是不同的类型。将它们视为两种不同的结构,它们都定义operator()
。使用std::function
代替auto
:
void test(bool flag) {
int a = 33;
std::function<int (int)> x = [&a](int size){ return size*3; };
std::function<int (int)> y = [&a](int size){ return size*2; };
yadda(flag?x:y);
}