Class-Deklaration im selben Umfang wie die Verwendung von Deklarationskompilierungen in GCC, jedoch nicht in MSVS

Ist das folgende Programm gemäß dem c ++ - Standard wohlgeformt?

namespace X { class A; }

namespace Y { using X::A; class A {}; }

int main() {}

Ich erhalte mit verschiedenen Compilern unterschiedliche Ergebnisse:

gcc kompiliert es ohne Fehler.visual c ++ gibt Fehler C2888 zurück: 'X :: A': Symbol kann nicht im Namespace 'Y' definiert werden

Ich finde keine Regel im c ++ - Standard, gegen die mein Programm verstößt.

Wenn das Programm gut ausgearbeitet ist, warum gibt Visual Studio einen Fehler aus?

Wenn das Programm nicht wohlgeformt ist, welche Regel im c ++ - Standard hat es verletzt und warum gibt gcc keinen Fehler aus?

Ich versuche nicht, mein Programm kompilieren zu lassen. Ich versuche nur herauszufinden, ob es gemäß dem c ++ - Standard wohlgeformt ist und warum sich die beiden von mir getesteten Compiler unterschiedlich verhalten.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage