[Bug c++/53613] New: Cannot override a inline "= default" virtual destructor.
kirbyzhou@sogou-inc.com
gcc-bugzilla@gcc.gnu.org
Fri Jun 8 11:12:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53613
Bug #: 53613
Summary: Cannot override a inline "= default" virtual
destructor.
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: kirbyzhou@sogou-inc.com
[root@djt-17-109-v06 tmp]# cat tover.cpp
struct __cook {
virtual ~__cook() = default;
};
struct __cook1: public __cook {
virtual ~__cook1() = default;
};
struct __cook2: public __cook {
virtual ~__cook2();
};
__cook2::~__cook2() {};
struct __cook3: public __cook {
virtual ~__cook3();
};
__cook3::~__cook3() = default;
[root@djt-17-109-v06 tmp]# g++47 -c -std=gnu++11 tover.cpp
tover.cpp:6:10: error: looser throw specifier for 'virtual __cook1::~__cook1()'
tover.cpp:2:10: error: overriding 'virtual __cook::~__cook() noexcept (true)'
tover.cpp:10:10: error: looser throw specifier for 'virtual
__cook2::~__cook2()'
tover.cpp:2:10: error: overriding 'virtual __cook::~__cook() noexcept (true)'
tover.cpp:15:10: error: looser throw specifier for 'virtual
__cook3::~__cook3()'
tover.cpp:2:10: error: overriding 'virtual __cook::~__cook() noexcept (true)
'
[root@djt-17-109-v06 tmp]# g++ -c -std=gnu++0x tover.cpp
# g++ 4.4.6 works
Workaround: define parent destructor outside the class definition.
[root@djt-17-109-v06 tmp]# cat tover.cpp
struct __cook {
virtual ~__cook();
};
__cook::~__cook() = default;
/*...*/
More information about the Gcc-bugs
mailing list