ラムダを返すラムダの定義

知らなかったので覚書。

[ソース]

#include <iostream>

int
main(){
    using result_type = void(*)();
    using func_type = result_type(*)();

    // 戻り値型を定義しないとエラー
//  func_type f = []{
    func_type f = []()->result_type{
        return []{
            std::cout << "hello, world" << std::endl;
        };
    };
    f()();

    return 0;
}

[出力]

hello, world

なるほど、戻り値型を定義すればよかったんですね。

[コンパイラ]

  • g++ (GCC) 4.7.0 20120218 (experimental)
  • clang++ (LLVM) 3.1 20120306(trunk)