C++奇怪的命名空间查找行为

C++ strange namespace lookup behavior

本文关键字:查找 命名空间 C++      更新时间:2023-10-16
namespace fooo {
  class Fooo {
  public:
    int a;
  };
}
namespace fooo {
  class Test {
  public:
    Test(Fooo::Fooo *i) {
      i->a = 1;
    }
  };
}

这段代码在 clang (任何版本)中编译良好,但在 gcc 中失败。谁能解释为什么?

编辑:是的,我知道这里的问题有点明显,但为什么 clang 接受它?告诉我这个的人说这是标准中的一个错误,并且有缺陷报告。任何人都可以指出实际的DR吗?

来自 gcc 的错误消息准确地告诉您问题所在:

t.cpp:11:16: error: ‘fooo::Fooo::Fooo’ names the constructor, not the type
     Test(const Fooo::Fooo *i) {
                ^
令人

惊讶的是,Clang没有给出错误。