Có mã sau:Destructor trong lớp có nguồn gốc đánh dấu là noexcept (false)
class Member
{
public:
~Member() noexcept(false) {}
};
class A
{
public:
virtual ~A() {}
};
class B : public A
{
public:
Member m;
};
Lỗi này là:
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() {}
^
Tại sao destructor trong lớp B được đánh dấu là noexcept (false) ? Có vẻ như nó bằng cách nào đó lấy nó từ lớp Member. Nó được biên soạn bởi g ++ 6.3.