Well that became offtopic rather quickly...
1. `cstring` used to mean "C string", now it means "compatible string", a
weird backronym and the manual needs an update.
2. Whether my example should produce an error or a warning or nothing is
besides the point. The real question is: What do you want destructors for?
File-like stuff? Getting rid of the GC eventually? Reference counting? Optimize
the RC ops introduced by the existing GC? Unique and borrowed pointers? How
much of this lifetime tracking is done at runtime and how much is done at
compile-time? Is the analysis control flow dependent?