May 10, 2013 Where should the destruction of aggregate members take place? | ||||
---|---|---|---|---|
| ||||
a) In the so-called "whole dtor" which calls the dtors of all members including the dtor declared (if any). The attributes of the "whole dtor" are deduced. b) Everything takes place in the dtor declared (if any). If the dtor is pure/nothrow/safe, it is guaranteed that the object can be destructed purely/without throwing/safely. This will break existing code. ----- struct S { ~this() { } } struct SX { S s; pure ~this() { } } ----- a) Compiles. b) Error: S.s.~this is impure Both behaviors are available on github: a) https://github.com/D-Programming-Language/dmd/pull/2006 b) https://github.com/D-Programming-Language/dmd/pull/2003 You can apply this to postblit, too. |
May 10, 2013 Re: Where should the destruction of aggregate members take place? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Henning Pohl Attachments:
| 2013/5/11 Henning Pohl <henning@still-hidden.de>
> a) In the so-called "whole dtor" which calls the dtors of all members including the dtor declared (if any). The attributes of the "whole dtor" are deduced.
>
> b) Everything takes place in the dtor declared (if any). If the dtor is pure/nothrow/safe, it is guaranteed that the object can be destructed purely/without throwing/safely. This will break existing code.
>
> -----
> struct S { ~this() { } }
> struct SX { S s; pure ~this() { } }
> -----
>
> a) Compiles.
> b) Error: S.s.~this is impure
>
> Both behaviors are available on github:
> a) https://github.com/D-**Programming-Language/dmd/pull/**2006<https://github.com/D-Programming-Language/dmd/pull/2006>
> b) https://github.com/D-**Programming-Language/dmd/pull/**2003<https://github.com/D-Programming-Language/dmd/pull/2003>
>
> You can apply this to postblit, too.
>
Until 2.062, dmd has been behaved as a) for destructors, but current git
head is accidentally changed to b).
I think it is a regression.
Pull#2006 will change back the behavior to a), but pull#2003 doesn't.
Kenji Hara
|
Copyright © 1999-2021 by the D Language Foundation