C++1z constexprラムダ

C++1zからは、ラムダ式をconstexprとして定義・実行できるようになります。

ラムダ式をconstexprにするには、これまでmutableを付けていたところに、constexprを付けます。

int main()
{
    auto add = [](int x) constexpr { return x + 1; };
    static_assert(add(1) == 2);
}
  • ラムダ式には、constexprとmutableを両方、順不同で指定できます
  • ラムダ式にconstexprを指定した場合、ラムダ式によって生成される関数オブジェクトの関数呼び出し演算子がconstexprになります
  • constexprラムダは、キャプチャを含められます
  • ジェネリックラムダに対してもconstexpr指定ができます
  • ラムダ式によって生成される関数オブジェクトであるクロージャオブジェクトも、constexprになれるリテラル型に分類されるようになります

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。