--- import std.stdio; void delegate() del; abstract class A { void f(int i) in { writeln("A.f.in: i = ", i); } body { } // no closure void g(int i) in { writeln("A.g.in: i = ", i); } body { int x; del = { ++x; }; } // closure } final class B: A { override void f(int i) in { writeln("B.f.in: i = ", i); } body { int x; del = { ++x; }; } // closure appears override void g(int i) in { writeln("B.g.in: i = ", i); } body { } // closure disappears } void main() { auto b = new B(); b.f(107); b.g(108); } --- Output: --- A.f.in: i = 909192741 A.g.in: i = 10428304 --- Also see Issue 6417.
https://github.com/D-Programming-Language/dmd/pull/4788
*** Issue 13339 has been marked as a duplicate of this issue. ***
*** Issue 9897 has been marked as a duplicate of this issue. ***
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/47d9320e73b7fc6e95ef6bb9d9b571ab8a4548d8 fix Issue 9383 - Wrong context for contracts if closure [dis]appears in override function https://github.com/D-Programming-Language/dmd/commit/8e8781489d7fdcfe486020644ed31b2f8d774d8e Merge pull request #4788 from 9rnsr/fix9383 Issue 9383 - Wrong context for contracts if closure [dis]appears in override function
Commits pushed to dmd-cxx at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/47d9320e73b7fc6e95ef6bb9d9b571ab8a4548d8 fix Issue 9383 - Wrong context for contracts if closure [dis]appears in override function https://github.com/dlang/dmd/commit/8e8781489d7fdcfe486020644ed31b2f8d774d8e Merge pull request #4788 from 9rnsr/fix9383