【发布时间】:2019-04-29 04:10:10
【问题描述】:
示例代码:
struct X { void f() {} };
typedef X A;
namespace N {
struct A { void g() {} };
};
using N::A;
int main()
{
A a;
a.f();
}
此代码编译正确,A a; 创建一个X,而不是N::A。
标准中的哪些规则涵盖了这种行为?我期待 A a; 会出现模棱两可的错误。如果我将第一个结构命名为 A 而不是 X 并删除 typedef,那么我确实会收到这样的错误。 (g++ 8.3)
【问题讨论】:
-
Clang 声明对
A的引用不明确。
标签: c++ namespaces language-lawyer typedef ambiguous