Мне интересно, почему =
режим захвата по умолчанию запрещает this
в списке захвата выражения lambda С++.
То есть
[=, this]{ }; // error
[&, this]{ }; // OK
Это указано в С++ 11 5.1.2/8.
- Если lambda-capture включает в себя захват-значение по умолчанию, которое является &, идентификаторам в лямбда-захвате не должно предшествовать &.
- Если лямбда-захват включает в себя захват-значение по умолчанию, равное =, лямбда-захват не должен содержать этого и каждый идентификатор, который он содержит должен предшествовать &.
Q: Есть ли какая-либо причина или предыстория этого правила?