2013/5/11 Henning Pohl <henn...@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