可以在包含声明的 namespace 的 namespace 中定义 namespace 成员:


void f();

namespace N { void ::f() {} }       // illegal for definition

namespace N { void ::f(); }         // what about redeclaration?

可以在包含声明的 namespace 的 namespace 中定义类:


struct A;

namespace N { struct ::A {}; }      // illegal for definition

namespace N { struct ::A; }         // what about redeclaration?

对于成员函数定义和静态数据成员定义,我们也有相同的规则。

所以我的问题是,在不包含原始声明的 namespace 中,重新声明(未定义)是否合法?

最佳答案

关于struct ::A;[dcl.type.elab]/1使您的声明格式错误:



我在功能案例中没有发现任何问题; [dcl.meaning]/1确实允许:



但是,GCC和Clang都坚持认为,作为定义的重新声明必须在封闭的 namespace 中进行。

09-10 05:22
查看更多