我对析构函数和noexcept有点困惑。我的理解是,在C++11中,任何析构函数,包括用户定义的,都是隐式的noexcept(true),即使我们从它throw。如果出于某种原因想要这样做,就必须显式地指定noexcept(false)。
我看到的恰恰相反--在GCC 4.7.2中,用户定义的析构函数,无论类和析构函数有多原始,都是隐式的noexcept(false)。这里我漏掉了什么?用户定义的析构函数有没有隐藏的陷阱?
发布于 2013-03-31 01:55:07
这是一个known bug (归功于发现错误报告的OP ),似乎在GCC 4.8.0中已经修复了。例如,下面的静态断言将在GCC 4.7.2上触发,但不会在GCC 4.8.0上触发:
struct X
{
~X() { };
};
int main()
{
X x;
// This will not fire even in GCC 4.7.2 if the destructor is
// explicitly marked as noexcept(true)
static_assert(noexcept(x.~X()), "Ouch!");
}https://stackoverflow.com/questions/15721544
复制相似问题