C++ での constexpr ラムダ式

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