Объявление класса в той же области, в которой используется объявление, компилируется в GCC, но не в MSVS.

Правильно ли сформирована следующая программа в соответствии со стандартом c ++?

namespace X { class A; }

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

int main() {}

Я получаю разные результаты с разными компиляторами:

GCC компилирует его без ошибок.Visual C ++ выдает ошибку C2888: «X :: A»: символ не может быть определен в пространстве имен «Y»

В стандарте c ++ я не нахожу никаких правил, которые бы нарушала моя программа.

Если программа правильно сформирована, почему Visual Studio выдает ошибку?

Если программа не правильно сформирована, какое правило в стандарте c ++ она нарушила и почему gcc не выдает ошибку?

Я не пытаюсь заставить мою программу компилироваться. Я просто пытаюсь выяснить, правильно ли он сформирован в соответствии со стандартом c ++ и почему два протестированных мной компилятора ведут себя по-разному.

Ответы на вопрос(2)

Ваш ответ на вопрос