The motivating example is:
template<class T, class U> class C : public T { U u; ~C() { ... } };Unless an explicit "noexcept" annotation is given, the destructor C::~C() should be "noexcept(true)" if none of the base or member destructors is "noexcept(false)", regardless of the contents of the destructor's function-body.
Add a new paragraph after 12.4 class.dtor paragraph 2:
A declaration of a destructor that does not have an exception-specification is implicitly considered to have the same exception-specification as an implicit declaration (15.4 except.spec).Change in 12.4 class.dtor paragraph 5:
Before the defaulted destructor for a class is implicitly defined, all the non-user-provided destructors for its base classes and its non-static data members shall have been implicitly defined.[ Note: an implicitly-declared destructor has an exception-specification (15.4 except.spec). An explictly defaulted definition has no implicit exception-specification. -- end note ]