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

Reply via email to