by Guest » 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:
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_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.>
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:
[code]/* 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) ;
}
} ;
[/code]
Die [b] 'F_OK' [/b] lambda mit der expliziten Referenzaufnahme des [b] '[/b] funktioniert einwandfrei.
Die [b] 'f_bad' [/b] lambda, die [b] '&' [/b] 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.>