A wild and probably bad idea:
Make it possible to declare variables as non-usable. Like this:
void f(!string filename) { } //OK
void f(!string filename) { write(filename); } //Throws error void f(!string filename) { string filename; } //Throws error
and of course:
foreach(my_mapping; !string name; string value) werror("%O\n", value);
I guess it just adds complexity with no real benifits. It can maybe be good to have in a (huge) function to make sure a global variable isn't used anywhere in it.