When "this" is captured by a lambda, does it have to be used explicitly?

It's completely standard and has been since lambdas were introduced in C++11.

You do not need to write this-> there.


It is standard and has been this way since C++11 when lambdas were added. According to cppreference.com:

For the purpose of name lookup, determining the type and value of the this pointer and for accessing non-static class members, the body of the closure type's function call operator is considered in the context of the lambda-expression.

struct X {
    int x, y;
    int operator()(int);
    void f()
    {
        // the context of the following lambda is the member function X::f
        [=]()->int
        {
            return operator()(this->x + y); // X::operator()(this->x + (*this).y)
                                            // this has type X*
        };
    }
};