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

时间:2016-05-27 21:55:25

标签: c++ c++11 c++14

namespace fooo {
  class Fooo {
  public:
    int a;
  };
}

namespace fooo {
  class Test {
  public:
    Test(Fooo::Fooo *i) {
      i->a = 1;
    }
  };
}

此代码使用clang(任何版本)编译良好但使用gcc失败。 任何人都可以解释原因吗?

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

1 个答案:

答案 0 :(得分:0)

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

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

令人惊讶的是,clang没有给出错误。