【发布时间】:2018-07-02 00:17:03
【问题描述】:
我想通过以下方式创建一个 lambda:
auto l1 = condition ?
[](){ return true; } :
[number](){ return number == 123; };
但是,我得到了错误:
operands to ?: have different types ‘main()::<lambda()>’ and ‘main()::<lambda()>’
显然,类型似乎相同。我想,仅在一个 lambda 表达式中捕获 number 可能是个问题,但我得到了同样的错误:
//check if capturing number in both lambdas would help
auto l2 = condition ?
[number](){ return true; } :
[number](){ return number == 123; };
//maybe the first lambda capture was optimised out? let's make sure:
auto l3 = condition ?
[number](){ return number != 123; } :
[number](){ return number == 123; };
我知道我可以通过其他方式(如下)做到这一点,但我想知道这种行为的原因是什么。它使用 GCC6.3.1 编译,启用了 C++14。
//compiles
auto l4 = condition ?
[](const int){ return true; } :
[](const int number){ return number == 123; };
【问题讨论】:
标签: c++ c++11 lambda c++14 language-lawyer