Updating the using keyword was specifically for templates, and (as was pointed out in the accepted answer) when you are working with non-templates using and typedef are mechanically identical, so.
In other word, if you know that the initialization of a variable in using may throw a particular exception, i wrap it with try-catch.
Similarly, if within using body something may happen, which is not directly.
The problem with putting using namespace in the header files of your classes is that it forces anyone who wants to use your classes (by including your header files) to also be 'using' (i. e.
Using calls dispose() after the using -block is left, even if the code throws an exception.
So you usually use using for classes that require cleaning up after them, like io.
Either way, when the using block is exited (either by successful completion or by error) it is closed.
Although i think it would be better to organize like this because it's a lot easier to see what is.