Clang 22 Änderungen bei der Rückgabe temporärer Referenzen?C++

Programme in C++. Entwicklerforum
Anonymous
 Clang 22 Änderungen bei der Rückgabe temporärer Referenzen?

Post by Anonymous »

Ich weiß, dass das folgende Verhalten undefiniert ist, aber ich frage mich, warum meine Version von Clang es überhaupt nicht kompiliert:

Code: Select all

class Registry2
{public:
template 
component_t& getComponent()
{
component_t t;
return t;
}
};

int main(int argc, char* argv[])
{

Registry2 registry;
auto& ref = registry.getComponent();
}
Ich habe:

Code: Select all

-Werror=return-type
-Wno-unused-variable
Flags auf dem Compiler gesetzt, und auf Godbolt kompiliert Clang es nur mit der „Warnung“:

Warnung: Verweis auf den Stapelspeicher, der mit der lokalen Variablen „t“ verknüpft ist
returned [-Wreturn-stack-address]

Bei meinem Compiler, bei dem es sich um Clang 22 handelt, schlägt dies jedoch fehl kompilieren und sagt:

Fehler: Nicht-konstante L-Wert-Referenz auf Typ „int“ kann nicht an einen
temporären Typ „int“ 65 | gebunden werden return t;

Was ist passiert, dass es sich geändert hat? Ist es spezifisch für Clang-Version 22?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post