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,这可能是错误的。