Benötigen Sie Klärung, wie Sie durch Referenz in C ++ rekursiver Lambda erfassen können
Posted: 27 Jan 2025, 05:23
Während des Schreibens einer Gleitrechnung, die zwischen den unter GCC 14.2.0 für X86 und ARM 6.22 für Cortex-M zusammengestellten Programme geteilt wird > 'this Auto &&' Abgeordnet 'This' Feature.
Hier ist der Code:
Die 'F_OK' lambda mit der expliziten Referenzaufnahme des ' funktioniert einwandfrei.
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.>
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.>