http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57645
Bug ID: 57645
Summary: Explicitly-declared destructor with no exception
specification is always noexcept(true)
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: travis at gockelhut dot com
#include <type_traits>
struct Thrower
{
~Thrower() noexcept(false) { throw 1; }
};
struct Explicit
{
~Explicit() {}
Thrower t;
};
static_assert(!std::is_nothrow_destructible<Explicit>::value, "Explicit");
This will fail on the static_assert in 4.8, in contrast to §15.4.14:
> ..If f is an...destructor...it's implicit exception-specification
> specifies...f has the exception-specification noexcept(true) if every
> function it directly invokes allows no exceptions.
And Thrower::~Thrower is directly invoked according to §12.4.8:
> After executing the body of the destructor and destroying any automatic
> objects allocated within the body, a destructor for class X calls the
> destructors for X’s direct non-variant non-static data members...