Expresiones lambda de constexpr en C++

Visual Studio 2017 versión 15.3 y posteriores (disponible en modo /std:c++17 y versiones posteriores): una expresión lambda se puede declarar como constexpr o usarse en una expresión constante cuando la inicialización de cada miembro de datos que captura o introduce se permite dentro de una expresión constante.

    int y = 32;
    auto answer = [y]() constexpr
    {
        int x = 10;
        return y + x;
    };

    constexpr int Increment(int n)
    {
        return [n] { return n + 1; }();
    }

Una expresión lambda es implícitamente constexpr si su resultado cumple los requisitos de una funciónconstexpr:

    auto answer = [](int n)
    {
        return 32 + n;
    };

    constexpr int response = answer(10);

Si una expresión lambda es implícita o explícitamente constexpr y la convierte en un puntero de función, la función resultante también es constexpr:

    auto Increment = [](int n)
    {
        return n + 1;
    };

    constexpr int(*inc)(int) = Increment;

Consulte también

Referencia del lenguaje C++
Objetos de función en la biblioteca estándar de C++
Llamada a función
for_each