我发现有关命名空间搜索的问题.以下简化代码无法编译:
namespace A {
namespace B {
class Test {
};
}
namespace C {
namespace B {
typedef B::Test AnAlias;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨名称空间A::C::B中的Test 没有命名类型.
问题似乎是编译器在命名空间C中看到了命名空间B,并且没有进一步搜索.我本来希望他也会查看命名空间A(这是一个封闭的命名空间)并在那里找到B :: Test.
如果我重命名C::B一切都很好.
如果我有资格,A::B::Test一切都很好.
如果我将typedef直接放在命名空间中,A::C一切都很好.
使用gcc 4.1和intel 12编译器测试了此行为.(均为linux).
编译器是对的吗?