【发布时间】:2016-05-27 21:55:25
【问题描述】:
namespace fooo {
class Fooo {
public:
int a;
};
}
namespace fooo {
class Test {
public:
Test(Fooo::Fooo *i) {
i->a = 1;
}
};
}
此代码在 clang(任何版本)下都能正常编译,但在 gcc 下编译失败。 谁能解释一下为什么?
编辑: 是的,我知道这里的问题很明显,但为什么 clang 接受它?告诉我这个的人说这是标准中的一个错误,并且有一个缺陷报告。任何人都可以指出实际的 DR 吗?
【问题讨论】:
-
gcc 没告诉你吗?如果编译失败,它通常会显示一条诊断消息。
-
错误:'fooo::Fooo::Fooo' 命名构造函数,而不是类型
-
即使第一个Fooo是错字:错误:在只读对象中分配成员'fooo::Fooo::a'
-
啊,那是在类定义中注入的旧类名。通常,这个 iirc 中的 clang 是错误的,但我不记得具体细节。让我看看能不能找到骗子。
-
抱歉,我删除了 const。