Jonathan M Davis: > I think that's a total no-go because it would depend on program flow. You're > trying to alter a compile-time property at runtime. All it takes is having > delete within an if statement, and all of a sudden, depending on how your > program runs, the name may or may not be visible.
I don't agree. To test a runtime value you need an if statement, and it creates the scope of its then and else parts, if you remove a variable inside one of those two scopes, x is present again when the then and else scopes are finished. So what's the problem? import std.conv: to; void main(string[] args) { int x = 10; enum int y = 5; // here x can be used if (args.length > 1) { // here x can be used delete x; // here x can't be used float x; // not allowed } else { // here x can be used } // here x can be used static if (y < 2) delete x; // here x can or can't be used according to the compile-time value of y } Bye, bearophile