Considere el siguiente código:La captura lambda causa un error de tipos de operandos incompatibles?
main()
{
bool t;
...
std::function<bool (bool)> f = t ? [](bool b) { return b; } : [](bool b) { return !b; }; // OK
std::function<bool (bool)> f = t ? [t](bool b) { return t == b; } : [t](bool b) { return t != b; }; // error
}
cuando se compila con Clang 3.1, la asignación de la no captura de lambda funciona mientras el uno con capturas falla:
main.cpp:12:36: error: incompatible operand types ('<lambda at main.cpp:12:38>' and '<lambda at main.cpp:12:71>')
std::function<bool (bool)> f2 = t ? [t](bool b) { return t == b; } : [t](bool b) { return t != b; }; // error
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
¿Por qué la captura de la misma variable hace que el 2 lambdas para ser de tipos incompatibles?
Gracias por la explicación detallada. No sabía que se implementan de manera diferente. Tiene sentido ahora. –