Я понимаю, что правильный способ захвата this (для изменения свойств объекта) в лямбда выглядит следующим образом:
auto f = [this] () { /* ... */ };
Но я интересуюсь следующей особенностью, которую я видел:
class C {
    public:
        void foo() {
            // auto f = [] () { // this not captured
            auto f = [&] () { // why does this work?
            // auto f = [&this] () { // Expected ',' before 'this'
            // auto f = [this] () { // works as expected
                x = 5;
            };
            f();
        }
    private:
        int x;
};
Нечеткость, которую меня путают (и хотелось бы ответить), заключается в следующем:
auto f = [&] () { /* ... */ }; // capture everything by reference
И почему я не могу явно записать this по ссылке:
auto f = [&this] () { /* ... */ }; // a compiler error as seen above.