【发布时间】:2012-07-16 01:50:46
【问题描述】:
以下代码在gcc-4.7.1下不能编译,而是在clang-3.2下编译。哪一个遵循 C++11 标准?
struct X {
virtual ~X() = default;
};
struct Y : X {
virtual ~Y() = default;
};
gcc-4.7.1 抱怨:
looser throw specifier for 'virtual Y::~Y()'
error: overriding 'virtual X::~X() noexcept(true)'
显然,gcc-4.7.1 认为 X 的默认析构函数不是 nothrow,但 Y 的默认析构函数不是 nothrow。为什么是这样?任何人都可以参考标准中的正确位置吗?谢谢。
我在 stackoverflow 上看到了类似的问题,但没有看到参考标准的答案。
【问题讨论】:
-
如果您的代码与问题中的代码完全相同,则很可能是编译器中的错误。
-
仅供参考 g++ 快照 20120708 正确编译代码。
-
很好的问题,今天在尝试在 Debian g++4.7 上移植某些东西时遇到了这个问题