C++14で導入された汎用ラムダキャプチャ(generalized lambda capture)と、コピー不可かつムーブ可能オブジェクトの扱いについてメモ。 汎用ラムダキャプチャ構文でムーブキャプチャしたstd::unique_ptr型の変数up1を、そのラムダ式中でさらに変数up2へムーブしようとするとコンパイルエラーを引き起こす。 // C++14以降 #include <memory> auto up0 = std::make_unique<int>(42); auto lm = [up1 = std::move(up0)] { auto up2 = std::move(up1); // NG: ill-formed }; ラムダ本体は暗黙にクロージャ型(closure type)の const メンバ関数、つまり前掲例ではvoid ClosureType::operator()(