O uso do namespace causa a ocultação de nomes?

Considere o seguinte código:

namespace C {
    class X {};
}

namespace A {
    class X {};

    namespace B {
        using namespace C;

        X x;
    }
}

Eu estava esperando o tipo dex ser estarC::X devido aousing namespace directiva, mas em vez disso ambosVS2010 e onlineLLVM / Clang resolução do compiladorX dentro do namespaceB ser estarA::X. Alterar a diretiva using com uma declaração using (using C::X), então resolveC::X como esperado.

A norma diz sobre o uso de diretivas [7.3.4.2]:

Uma diretiva using especifica que os nomes no namespace nomeado podem ser usados ​​no escopo no qual a diretiva using aparece após a diretiva using. Durante a consulta de nome não qualificada (3.4.1), os nomes aparecem como se fossem declarados no namespace delimitador mais próximo que contém tanto a diretiva using como o namespace nomeado.

Minha leitura disso é queC::X deve aparecer como se declarado dentro do namespaceB, efetivamente escondendoA::X. Quais seções do padrão estão por trás dessa inconsistência entre o uso de diretivas e o uso de declarações? Existe alguma maneira de ocultar um nome de um escopo externo por uma diretiva usando?

questionAnswers(1)

yourAnswerToTheQuestion