¿Usar el espacio de nombres hace que se oculte el nombre?

Considere el siguiente código:

namespace C {
    class X {};
}

namespace A {
    class X {};

    namespace B {
        using namespace C;

        X x;
    }
}

Esperaba el tipo dex serC::X debido a lausing namespace directiva, pero en su lugar ambosVS2010 y en líneaLLVM / Clang resolución del compiladorX dentro del espacio de nombresB serA::X. Cambiar la directiva de uso con una declaración de uso (using C::X), entonces resuelveC::X como se esperaba.

La norma dice sobre el uso de directivas [7.3.4.2]:

Una directiva de uso especifica que los nombres en el espacio de nombres nominados se pueden usar en el ámbito en el que aparece la directiva de uso después de la directiva de uso. Durante la búsqueda de nombres no calificados (3.4.1), los nombres aparecen como si estuvieran declarados en el espacio de nombres adjunto más cercano que contiene la directiva using y el espacio de nombres nominado.

Mi lectura de esto es queC::X debe aparecer como si estuviera declarado dentro del espacio de nombresBocultando efectivamenteA::X. ¿Qué sección (s) de la norma están detrás de esta inconsistencia entre el uso de directivas y el uso de declaraciones? ¿Hay alguna forma de ocultar un nombre de un ámbito externo mediante una directiva de uso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta