不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?



Clang和GCC在这个问题上有不同的意见:

使用 g++ 时打印">

result2",但使用 clang++ 时打印的是"result1"。

我知道 g++ 认为g()抛出的A是不一样的A是主要的.cpp。
但是,clang++有什么问题吗?

版本:
G++: 7.4.0 喇叭: 10.0.0

主.cpp:

#include <iostream>
namespace {
struct A {};
}
extern void g();
int main()
{
try {
try {
g();
} catch (A) {std::cout << "result1n";}
} catch (...) {std::cout << "result2n";}
}

其他.cpp:

namespace {
struct A {};
}
void g() { throw A(); }

这些名称在这里A内部联系;它们不可能在不同的翻译单元中引用相同的东西。 在这种情况下,GCC 是正确的;一些实现使用名称来实现 RTTI,这可能是错误的。

最新更新