【发布时间】:2016-03-23 02:34:29
【问题描述】:
考虑一下这个简短的 sn-p:
struct B {
B() = default;
explicit B(B const& ) { }
};
struct D : B { };
int main() {
try {
throw D{};
}
catch(B ) {
}
}
gcc 接受此代码,clang 认为它格式错误:
main.cpp:17:13: error: no matching constructor for initialization of 'B'
catch(B ) {
^
谁是对的?
【问题讨论】:
-
另外,也许两者都是对的..
-
@xaxxon 我怀疑这样的事情是未指定的。要么它应该是有效的,要么它应该是无效的。无论哪种方式,异常都很奇怪。
-
嗯,如果您尝试抛出
B,GCC 会正确拒绝它,但如果您尝试抛出D,则不会。
标签: c++ gcc exception-handling clang language-lawyer