Использование пространства имен вызывает скрытие имени?

Рассмотрим следующий код:

namespace C {
    class X {};
}

namespace A {
    class X {};

    namespace B {
        using namespace C;

        X x;
    }
}

Я ожидал типx бытьC::X из-заusing namespace директива, но вместо обоихVS2010 и онлайнLLVM/Clang разрешение компилятораX в пространстве именB бытьA::X, Изменение директивы using с помощью объявления (using C::X), то это решитC::X как и ожидалось.

Стандарт говорит об использовании директив [7.3.4.2]:

A using-directive specifies that the names in the nominated namespace can be used in the scope in which the using-directive appears after the using-directive. During unqualified name lookup (3.4.1), the names appear as if they were declared in the nearest enclosing namespace which contains both the using-directive and the nominated namespace.

Мое чтение этого таково, чтоC::X должен выглядеть так, как если бы он был объявлен в пространстве именBэффективно скрываетсяA::X, Какие разделы стандарта стоят за этим несоответствием между использованием директив и использованием объявлений? Есть ли способ скрыть имя из внешней области с помощью директивы using?

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

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