examples c++ lambda language-lawyer c++17 constexpr

lambda examples c++



Acceso a la variable constexpr dentro de la expresión lambda sin capturar (1)

En el siguiente ejemplo, puedo acceder a la variable constexpr x desde dentro de la lambda y sin capturarla explícitamente. Esto no es posible si x no está declarado como constexpr .

¿Hay reglas especiales que se aplican a constexpr para capturar?

int foo(auto l) { // OK constexpr auto x = l(); auto y = []{return x;}; return y(); // NOK // auto x2 = l(); // auto y2 = []{ return x2; }; // return y2(); } auto l2 = []{return 3;}; int main() { foo(l2); }


¿Existen reglas especiales que se apliquen a constexpr para capturar / acceder?

Sí, constexpr variables constexpr podrían leerse sin capturar en lambda :

Una expresión lambda puede leer el valor de una variable sin capturarla si la variable

  • tiene un tipo de enumeración o integral no volátil y se ha inicializado con una expresión constante, o
  • es constexpr y trivially copy constructible.