struct Thing { this(int* i) { ptr = i; (*ptr)++; } ~this() { (*ptr)--; } T opCast(T : bool)() { return false; } int* ptr; } Thing makeThing(int* p) { return Thing(p); } void main() { int i; { if (auto t = makeThing(&i)) // destructor not called { } } assert(i == 0); }