[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