Initialisierung der statischen Variablen mit sich selbst

Betrachten Sie folgendes Codebeispiel:

#include <iostream>

static int bar = bar;

int main()
{
    int foo = foo;
    std::cout << "foo = " << foo << std::endl;
    std::cout << "bar = " << bar << std::endl;
}

Ich erhalte folgende Compiler-Warnung:

main.cpp: In function 'int main()':
main.cpp:7:15: warning: 'foo' is used uninitialized in this function [-Wuninitialized]
     int foo = foo;
               ^

Ausgabe:

foo = 0
bar = 0

Ich habe diese Warnung erwartet, da foo einheitlich verwendet wird. Anstelle von 0 kann 'foo' alles sein. Die Selbstzuweisung ist nicht definiert.

Aber warum wird die Selbstvergabe von 'bar' nicht gewarnt? Ist diese Zuordnung von "Balken" definiert oder undefiniertes Verhalten und warum?

Ich weiß, statische Variablen von elementaren Datentypen werden mit '0' initialisiert, aber in diesem Fall wird die Variable 'bar' während ihrer Initialisierung verwendet. Ich frage mich, ob dies definiertes Verhalten ist und die '0' die erwartete Ausgabe ist. (Was erklären würde, dass keine Compiler-Warnung auftritt).

Link zum Live-Beispiel

Antworten auf die Frage(1)

Ihre Antwort auf die Frage