Я хотел создать лямбда следующим образом:
auto l1 = condition ?
[](){ return true; } :
[number](){ return number == 123; };
Однако я получил ошибку:
operands to ?: have different types ‘main()::<lambda()>’ and ‘main()::<lambda()>’
Очевидно, что типы кажутся одинаковыми. Я думал, что захват number
только в одном из lambdas может быть проблемой, но я получаю для них ту же ошибку:
//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 make sure:
auto l3 = condition ?
[number](){ return number != 123; } :
[number](){ return number == 123; };
Я знаю, что могу сделать это иначе (ниже), но мне интересно, в чем причина такого поведения. Он был скомпилирован с включенным GCC6.3.1, С++ 14.
//compiles
auto l4 = condition ?
[](const int){ return true; } :
[](const int number){ return number == 123; };