The following code exists:
class Member { public: ~Member() noexcept(false) {} }; class A { public: virtual ~A() {} }; class B : public A { public: Member m; };
Error:
main.cpp:13:7: error: looser throw specifier for 'virtual B::~B() noexcept (false)' class B : public A ^ main.cpp:10:11: error: overriding 'virtual A::~A() noexcept' virtual ~A() {} ^
Why is the destructor in class B marked noexcept (false)? It seems that he is somehow getting it from the Member class. It was compiled by g ++ 6.3.
source share