7

C++03 標準 7.3.1.1 [namespace.unnamed] 段落 1: (および C++11 標準も同様の定義を使用)

unnamed -namespace-definitionは、

namespace unique { /* empty body */ }
using namespace unique;
namespace unique { namespace-body }

単に定義に従っているだけではないのはなぜですか?

namespace unique { namespace-body }
using namespace unique;

副次的な質問: MSDNは後者の形式で定義しています。技術的に標準に違反していますか?

4

1 に答える 1

7

あなたはもうこれをすることができませんでした

namespace { typedef int a; ::a x; }

namespace { ... }後続のでは、突然可能になることに注意してください。これは恐ろしく一貫性がありません。

このケースにも注意してください。2 つの異なる有効な結果があります。

namespace A { void f(long); }
using namespace A;

namespace { 
  void f(int);
  void g() {
    ::f(0);
  }
}

ISO C++ では、これは のintバージョンを呼び出しますf。別の定義では、longバージョンを呼び出します。

于 2012-11-29T10:08:29.307 に答える