With using namespace
I make the whole contents of that namespace directly visible without using the namespace qualifier. This can cause problems if using namespace
occurs in widely used headers - we can unintendedly make two namespaces with identical classes names visible and the compiler will refuse to compile unless the class name is prepended with the namespace qualifier.
Can I undo using namespace
so that the compiler forgets that it saw it previously?
Not to my knowledge... But as a rule I only use "using namespace" in .cpp files.
No, C++ Standard doesn't say anything about "undo". The best you are allowed to do is to limit scope of
using
:But unfortunately
using namespace Ximpl
will bring all names fromstd
namespace as well.As others said, you can't and the problem shouldn't be there in the first place.
The next-best thing you can do is bring in your needed symbols so that they are preferred by the name look-up:
In some cases you can also wrap the offending includes with a namespace:
The closest, that I'll try to use in header files is following:
after all, defines are #undef -able. There are 2 problems: 1. it is ugly 2. separate #define and #undef for each name from the corresponding namespace are used
No, but you can tell your coworkers that you should never have a
using
directive or declaration in a header.