AFAIK, С++ 11/14 не позволяет на месте определять новый тип возвращаемого значения при определении лямбда. Однако, похоже, выражение Camba capture lambda С++ 14 по существу создает анонимный тип с одним или несколькими "членами" и оператором(). Итак, почему компилятор не разрешает доступ к захваченным членам из вне лямбда. Мой слабый ум не может справиться с сложностями С++, но звучит ли он как разумное расширение языка? Вот пример.
vector<string> words = { "Stack", "Overflow" };
auto l = [w = words](){}; // almost like a C# anonymous type
cout << l.w[0]; // does not work.