https://issues.dlang.org/show_bug.cgi?id=20235
--- Comment #6 from Dlang Bot <dlang-bot@dlang.rocks> --- dlang/dmd pull request #12162 "Issue 20235 - Simplify fix by not declaring __gate" was merged into master: - 1c681d504f5b696c09d1755bb3630dc1790c61ff by Martin Kinkelin: Issue 20235 - Simplify fix by not declaring __gate Following Martin Kinkelin's comment in PR #12012: > We have the edtor `=> (__gate || edtor)` rewrite. > IIRC, the whole point of this `__gate` is to transfer ownership > of all temporary args requiring destruction to the callee just before the call > (i.e., if all arguments were constructed successfully without throw). > For `extern(D)`, it's up to the callee to destruct the parameter > [which, low-level wise, is either the original argument passed by ref or a moved/blitted instance]. > > So if `callerDestroysArgs == true`, it should suffice to keep the original `edtor` > and not declaring+setting `__gate`. Source: https://github.com/dlang/dmd/pull/12012#event-4259809188 https://github.com/dlang/dmd/pull/12162 --