------- Comment #2 from schaub-johannes at web dot de 2010-02-11 23:28 ------- I also think the code is valid. In this case though, there is the complication that no hiding takes place: The qualified name lookup of "X::m" for namespace members says in 3.4.3.2/2: "using-directives are ignored in any namespace, including X, directly containing one or more declarations of m". That would mean that "using namespace B;" is ignored, because "C" is declared as a namespace there.
But 3.4.4/3 says: "If the name is a qualified-id, the name is looked up according its qualifications, as described in 3.4.3, but ignoring any non-type names that have been declared.". That is, the declaration of the namespace is ignored, thus not preventing the consideration of the using directive. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42490