[C++/66443] virtual base of abstract class

Jason Merrill jason@redhat.com
Mon Aug 3 03:44:00 GMT 2015


On 08/01/2015 07:31 PM, Nathan Sidwell wrote:
> Ok, this patch fixes things up.  The previous version was a little too
> lax, extending the logic of DR1611 to all synthesized functions.
> However, this broke virtual synthesized dtors, in that an abstract
> class's synthesized dtor's exception specification would not take
> account of any virtual base dtor exception specs.  This would mean that
> a non-abstract derived class's synthesized dtor might end up with a
> throwing exception spec (because the virtual base's dtor did), and that
> would be looser than the exception spec on the abstract base's
> non-callable synthesized dtor.  And that fails the virtual overriding
> checks.

It seems to me that DR 1658 ignores vbases of abstract classes for 
determining whether a destructor is deleted, but says nothing about 
exception specifications.

DR 1351 specifically ignores vbases of abstract classes for determining 
the exception specification of a constructor, but only for constructors.

So I think that for destructors we want to walk the base, but pass in a 
fake delete_p.

Why the check for inherited_parms?  I would think that inheriting 
constructors would be handled like other ctors.

Jason



More information about the Gcc-patches mailing list