Declaração de classe no mesmo escopo que o uso de compilações de declaração no GCC, mas não no MSVS

O programa a seguir está bem formado de acordo com o padrão c ++?

namespace X { class A; }

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

int main() {}

Estou obtendo resultados diferentes com diferentes compiladores:

O gcc o compila sem erros.O visual c ++ fornece o erro C2888: 'X :: A': o símbolo não pode ser definido no espaço para nome 'Y'

Não encontro nenhuma regra no padrão c ++ que meu programa viole.

Se o programa é bem formado, por que o visual studio comete um erro?

Se o programa não estiver bem formado, que regra no padrão c ++ ele violou e por que o gcc não comete um erro?

Não estou tentando fazer meu programa compilar. Só estou tentando descobrir se está bem formado de acordo com o padrão c ++ e por que os dois compiladores que testei se comportam de maneira diferente.

questionAnswers(2)

yourAnswerToTheQuestion