(Siguiendo a esta pregunta :)
void foo() { constexpr const auto my_lambda = [](int z) { return z+1; }; } Aparentemente, my_lambda "no es estático". ¿En qué sentido no es estático, aparte de que no se define oficialmente como tal? ¿Por qué no debería ser implícitamente estático, viendo cómo parece cumplir con la definición ?
¿En qué sentido no es estático?
No es estático en el sentido de que no tiene una duración de almacenamiento estática. Tiene duración de almacenamiento automático.
Para la mayoría de los propósitos, no importa si la duración del almacenamiento es estática o no porque la inicialización y la destrucción del objeto son triviales y el almacenamiento no se usa en absoluto. Aún así, esto demuestra una diferencia importante:
auto* foo() { constexpr const auto my_lambda = [](int z) { return z+1; }; return &my_lambda; // dangling pointer } auto* foo_static() { static constexpr const auto my_lambda = [](int z) { return z+1; }; return &my_lambda; // OK }