可以在包含声明的 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 中进行。