I always included the namespace or relative path in the include guard, because only the header name alone has proven to be dangerous.
For example, you have some large project with the two files somewhere in your code
/myproject/module1/misc.h
/myproject/module2/misc.h
So if you use a consistent naming schema for your include guards you might end up with having _MISC_HPP__
defined in both files (very funny to find such errors).
So I settled with
MYPROJECT_MODULE1_MISC_H_
MYPROJECT_MODULE2_MISC_H_
These names are rather long, but compared with the pain of double definitions it is worth it.
Another option, if you don't need compiler/platform independence you might look for some #pragma once stuff.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…