おそらく興味深いデータ ポイントです。以下をコンパイルすると:
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
明確にするために、これらの 2 行は、私がコンパイルしたソース ファイル全体です。
その時点ではどちらstd
も名前空間として定義されていませんが、g++ は 2 番目についてのみ文句を言います。宣言がない場合、識別子について特別なことは何もno_such_namespace
ないと思います。std
これはg ++のバグであるという@James Kanzeは正しいと思います。
編集:そしてそれは報告されています。(5年前!)
更新: 8 年以上が経過しましたが、まだ誰にも割り当てられておらず、修正もされていません。g++ 4.9.2 で問題が発生します。clang++ 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.
更新: 2021 年 9 月 24 日の時点で、バグ レポートはまだ開いており、バグは g++ 11.2.0 に存在します。2021-07-24 に投稿されたコメントは、g++ がこれについて警告する必要があることを示唆しています。