Почему мьютекс доступен в теле лямбда-выражения, если его никто явно не захватил?
Я представлю фрагмент кода, где явно используется мьютекс внутри лямбда-выражения. При этом, он, мьютекс, не захватывается, а остаётся доступен, что и вызвало интерес.
class session {
private:
void do_read() {
auto self(shared_from_this());
socket_.async_read_some(
boost::asio::buffer(data_),
[this, self](boost::system::error_code ec, std::size_t length) {
std::lock_guard<std::mutex>g(mtx);
//...
});
}
// One mutex for all sessions
static std::mutex mtx;
};
Почему у программиста есть право явно использовать не захваченный мьютекс в теле лямбда-выражения?