Код: Выделить всё
/* Compiled with --std=c++23 option */
struct Foo
{
int s = 1 ;
void zook (void)
{
auto f_ok = [ & s = s ] (this auto && f , int x) -> void // ok
{
if (x < 10) f (x + s) ;
} ;
auto f_bad = [ & ] (this auto && f , int x) -> void // error: invalid use of non-static data member 'Foo::s'
{
if (x < 10) f (x + s) ;
} ;
f_ok (1) ;
f_bad (1) ;
}
} ;
Лямбда 'f_bad', использующая '&', должна захватывать переменную 's', но генерирует ошибку компилятора как показано в комментариях к коду при компиляции с использованием GCC.
Компилятор ARM принимает обе версии и генерирует один и тот же двоичный файл, но компилятор GCC жалуется на версию 'f_bad'.
Я трачу немного время углублялся в спецификации C++ и не смог определить, что говорит стандарт об этом конкретном случае.
На этом этапе я подозреваю, что в GCC есть ошибка компилятора.< /p>
По порядку чтобы быть уверенным, мне нужно знать, что стандарт C++23 определяет в отношении захвата лямбда-выражений в этих условиях.
Если кто-нибудь может пролить свет на это и/или, возможно, указать на соответствующую часть спецификации, буду признателен.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ive-lambda
Мобильная версия