стандарту, обьявление лямды внутри функции входит в ее "enclosing block", т.е. лямбда может "видеть" переменные класса, но возможности захватить условное поле "a" без переименования у лямбды же с т.з. языка отсутствует (можно либо захватить this, либо захватить только поле с переименованием), поэтому, по идее, конфликта имен нет
https://godbolt.org/z/GoE4Tvfb8
Стикер
так это и не ошибка. вас просто предупреждают, что вы скрыли тот a, который в классе. переименуйте a внутри лямбды и компилятор успокоится
Это я понимаю, но у кода внутри лямбды нет возможности обратится к полю класса напрямую, поэтому единственный "a", к которому есть доступ -- это a = this->a
https://reviews.llvm.org/D26278 тут что-то похожее убирали, возможно стоит завести им issue с вопросом не стоит ли и на это перестать ругаться
Обсуждают сегодня