struct 和 int 之间的 clang 重新定义不一致
Redefinition inconsistency in clang between struct and int
以下程序用clang编译时没有报错:
namespace X {
struct i {};
}
namespace Y {
using X::i;
struct i {};
}
int main() {}
让我们使用 int 而不是 struct,然后我们得到:
namespace X {
int i;
}
namespace Y {
using X::i;
int i;
}
int main() {}
本程序用clang编译时出现重定义错误
程序之间的唯一区别是使用的实体类型(struct 或 int),但一个编译没有错误,另一个给出重新定义错误。
这是否表示 clang 中存在错误?在使用声明时,标准可能不明确什么是重新定义。但是编译器不应该一致地做出解释吗?
可以在这里编译程序:
正如 Igor Tandetnik 所说,由于 [basic.scope.declarative]/4,它的格式不正确并且 clang 中存在错误。
该错误现已确认并修复。参见:https://llvm.org/bugs/show_bug.cgi?id=24033
以下程序用clang编译时没有报错:
namespace X {
struct i {};
}
namespace Y {
using X::i;
struct i {};
}
int main() {}
让我们使用 int 而不是 struct,然后我们得到:
namespace X {
int i;
}
namespace Y {
using X::i;
int i;
}
int main() {}
本程序用clang编译时出现重定义错误
程序之间的唯一区别是使用的实体类型(struct 或 int),但一个编译没有错误,另一个给出重新定义错误。
这是否表示 clang 中存在错误?在使用声明时,标准可能不明确什么是重新定义。但是编译器不应该一致地做出解释吗?
可以在这里编译程序:
正如 Igor Tandetnik 所说,由于 [basic.scope.declarative]/4,它的格式不正确并且 clang 中存在错误。
该错误现已确认并修复。参见:https://llvm.org/bugs/show_bug.cgi?id=24033