Is not needed because structs are inherently scope. I'm sure experienced D programmers do this all the time when they want something done on exit from a scope, but I never had, and maybe there are others who haven't, particularly if coming from a C++ 'use classes for everything' background.
import std.stdio; bool glob; struct Sentinel { void function() doit; bool already; this(void function() f) { doit = f; already = false; } ~this() { if (!already) { writeln("Doing it now"); doit(); } else writeln("Won't bother"); } void dontBother() { already = true; } } void reset() { glob = false; } void main(string[] args) { glob = true; { Sentinel s = Sentinel(&reset); writeln("Doing stuff in the scope"); if (args.length >= 2 && args[1] == "db") s.dontBother(); } writeln(glob); }