一個可能有趣的數據點。當我編譯如下:
using namespace std;
using namespace no_such_namespace;
與G ++ 4.5.2,我得到:
c.cpp:2:17: error: ‘no_such_namespace’ is not a namespace-name
c.cpp:2:34: error: expected namespace-name before ‘;’ token
無論std
也不no_such_namespace
已經被定義爲在該點命名空間,而G ++只抱怨第二。我沒有認爲在沒有聲明的情況下,標識符std
有任何特殊之處。我認爲@James Kanze是正確的,這是g ++中的一個bug。
編輯:(!5年前)And it's been reported.
更新:現在是8年多了,仍然沒有被分配給任何人,更不用說固定。 g ++ 4.9.2出現問題。鐺++ 3.5沒有,但它發出了std
和警告致命錯誤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.
這段代碼是寫在源文件還是頭文件?也許它是由另一個聲明名稱空間「std」的文件包含的。 –
這是在源文件中,而不是頭文件。這是一個很好的理由澄清! – templatetypedef
clang ++給出了一個警告:using指向隱式定義的名稱空間'std'; –