лямбда-выражения constexpr в C++

Visual Studio 2017 версии 15.3 и более поздних версий (доступно в /std:c++17 режиме и более поздних версиях): лямбда-выражение может быть объявлено как constexpr или использовано в константном выражении при инициализации каждого элемента данных, который он записывает или вводит, допускается в константном выражении.

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

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

Лямбда-лямбда неявно constexpr , если результат соответствует требованиям constexpr функции:

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

    constexpr int response = answer(10);

Если лямбда-код неявно или явно constexprпреобразуется в указатель функции, результирующая функция также constexpr:

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

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

См. также

Справочник по языку C++
Объекты функции в стандартной библиотеке C++
Вызов функции
for_each