A perhaps interesting data point. When I compile the following:
using namespace std;
using namespace no_such_namespace;
with g++ 4.5.2, I get:
c.cpp:2:17: error: ‘no_such_namespace’ is not a namespace-name
c.cpp:2:34: error: expected namespace-name before ‘;’ token
To be clear, those two lines are the entire source file I compiled.
Neither std
nor no_such_namespace
has been defined as a namespace at that point, but g++ complains only about the second. I don't think there's anything special about the identifier std
in the absence of a declaration of it. I think @James Kanze is right that this is a bug in g++.
EDIT: And it's been reported. (5 years ago!)
UPDATE: Now it's more than 8 years, and still hasn't been assigned to anyone, much less fixed. g++ 4.9.2 exhibits the problem. clang++ 3.5 doesn't, but it issues a warning for std
and a fatal error for no_such_namespace
:
c.cpp:1:17: warning: using directive refers to implicitly-defined namespace 'std'
using namespace std;
^
c.cpp:2:17: error: expected namespace name
using namespace no_such_namespace;
^
1 warning and 1 error generated.
UPDATE: As of 2021-09-24, the bug report is still open and the bug exists in g++ 11.2.0. A comment posted 2021-07-24 suggests that g++ should warn about this.
std
. – Epistaxis