私の本にはこう書かれています。
戻り型 return void を指定しない単一の return ステートメント以外のものを含む関数本体を持つラムダ。
でもこれは:
auto f = []{
int i=0; i++;
return std::string("foo");
};
std::cout << f() << std::endl;
実際には「foo」をコンパイルして出力しますが、そのラムダ expr には複数の return ステートメントがあるため、「-> std::string」を戻り値の型として手動で指定していないため、void を返す必要があります。
何が起きてる?
Clang 3.2に基づいて、最新のXcode 4.6でAppleのコンパイラを使用しています。
clang --バージョン
Apple LLVM バージョン 4.2 (clang-425.0.24) (LLVM 3.2svn ベース) ターゲット: x86_64-apple-darwin12.2.0 スレッド モデル: posix