Hier ist der Code:
Code: Select all
/* 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) ;
}
} ;
Die 'f_bad' lambda, die '&' verwendet, sollte die Variable 's' erfassen, erzeugt jedoch einen Kompiliererfehler Wie in den Code -Kommentaren gezeigt, wenn sie mit GCC kompiliert werden. > Version. < /p>
Ich verbringe einige Zeit damit, tief in die Wälder der C ++ - Spezifikation zu gehen und konnte nicht bestimmen, was der Standard über diesen speziellen Fall aussagt. < /p>
Ich vermute zu diesem Zeitpunkt, dass es in GCC einen Compiler -Fehler gibt. < /p>
Um sicher zu sein Bedingungen.>