This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/53613] New: Cannot override a inline "= default" virtual destructor.
- From: "kirbyzhou at sogou-inc dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 08 Jun 2012 11:12:33 +0000
- Subject: [Bug c++/53613] New: Cannot override a inline "= default" virtual destructor.
- Auto-submitted: auto-generated
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;
/*...*/