我们发现类似于以下内容(不要问......):
namespace N {
struct A { struct B; };
}
struct A { struct B; };
using namespace N;
struct ::A::B {}; // <- point of interest
Run Code Online (Sandbox Code Playgroud)
有趣的是,这与VS2005,icc 11.1和Comeau(在线)编译良好,但与GCC失败:
在'{'标记之前,类名的全局限定无效
从C++ 03,附件A,在我看来,像GCC是对的:
class-head
可以由nested-name-specifier
与identifier
nested-name-specifier
不能以全球资格开始(::
)identifier
......还是我忽略了什么?
请考虑以下两个代码段:
#include <iostream>
namespace
{
bool foo = false;
}
bool foo = true;
int main()
{
std::cout << foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
namespace A
{
namespace
{
bool foo = false;
}
bool foo = true;
}
int main()
{
std::cout << A::foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在Snippet A中,foo
里面的用法int main()
是模棱两可的,而在Snippet B中则不然.为什么会这样?
相关:匿名命名空间歧义