I couldn't agree more! It's a very bad idea to have ANY using namespace clause in ANY header, since this goes completely against the point of namespaces in the first place.
- URS C. MUFF SYSTEMS ARCHITECT - RESEARCH LAB [EMAIL PROTECTED] - X6360 +1 (303) 894 3360 > -----Original Message----- > From: Samar Lotia [mailto:slotia@;siebel.com] > Sent: Monday, November 04, 2002 3:20 PM > To: '[EMAIL PROTECTED]' > Subject: RE: Proposal Review: Using C++ Namespace > > I would recommend against putting the 'using namespace xxx' in the header > file simply because you end up changing the symbol lookup rules for other > header files that follow you. > > For instance, if I had: > > #include "myheader.h" > #include "xerces_header.h" > > The compiler would not search the xerces namespace for symbols referenced > inline in myheader.h, whereas if I had: > > #include "xerces_header.h" > #include "myheader.h" > > Then the compiler would search the xerces namespace for symbols referenced > inline in myheader.h. > > This does not sound desirable. > > Seems each CPP should have to put the using namespace macro AFTER > including > all header files. Yes it does put the onus on the user, but IMHO is a > better > way of doing things. > > Case in point, none of the C++ standard headers include 'using namespace > std' in any header file. And these are things that are part of the C++ > standard! > > My two cents... > > Samar Lotia > > -----Original Message----- > From: Tinny Ng [mailto:tng-xml@;ca.ibm.com] > Sent: Friday, November 01, 2002 5:58 PM > To: [EMAIL PROTECTED] > Subject: Proposal Review: Using C++ Namespace > > > Hi everyone, > > Based on many users' request, I've looked into the work of implementing > C++ > namespace to Xerces-C++. > > I've reviewed the design in ICU, and also read suggestions from some old > threads (e.g. http://marc.theaimsgroup.com/?t=98019090000001&r=1&w=2, and > http://marc.theaimsgroup.com/?t=97119438300003&r=1&w=2), here is what I am > proposing: > > 1. Define the following macro in XercesDefs.hpp: > > // ----------------------------------------------------------------------- > -- > -- > // Define namespace symbols if the compiler supports it. > // ----------------------------------------------------------------------- > -- > -- > #if defined(XERCES_HAS_CPP_NAMESPACE) > #define XERCES_CPP_NAMESPACE_BEGIN namespace XERCES_CPP_NAMESPACE { > #define XERCES_CPP_NAMESPACE_END } > #define XERCES_CPP_NAMESPACE_USE using namespace > XERCES_CPP_NAMESPACE; > #define XERCES_CPP_NAMESPACE_QUALIFIER XERCES_CPP_NAMESPACE:: > > namespace XERCES_CPP_NAMESPACE { } > namespace xercesc = XERCES_CPP_NAMESPACE; > XERCES_CPP_NAMESPACE_USE > #else > #define XERCES_CPP_NAMESPACE_BEGIN > #define XERCES_CPP_NAMESPACE_END > #define XERCES_CPP_NAMESPACE_USE > #define XERCES_CPP_NAMESPACE_QUALIFIER > #endif > > 2. The XERCES_HAS_CPP_NAMESPACE is defined in each Compiler Definition > file, > e.g. xercesc/util/Compilers/GCCDefs.hpp > > // ----------------------------------------------------------------------- > -- > -- > // Indicate that we support C++ namespace > // Do not define it if the compile cannot handle C++ namespace // > ------------------------------------------------------------------------- > -- > // #define XERCES_HAS_CPP_NAMESPACE > > 3. And XERCES_CPP_NAMESPACE is defined in XercesVersion.hpp > #define XERCES_PRODUCT xercesc > #define XERCES_CPP_NAMESPACE > INVK_CAT3_RAW_NUMERIC_SEP_UNDERSCORE(XERCES_PRODUCT,XERCES_VERSION_MAJOR,X > ER > CES_VERSION_MINOR) > > where the INVK_CAT3... is an intermediate macro which will eventually > create > the namespace name "xercesc_2_1" > > 4. Then in each Xerces-C++ file (both .hpp and .cpp), add > #define XERCES_CPP_NAMESPACE_BEGIN > at the beginning and > #define XERCES_CPP_NAMESPACE_END > at the end > > > > Note: > 1. "using namespace xercesc_2_1;" is coded in XercesDefs.hpp if > XERCES_HAS_CPP_NAMESPACE is defined. So users are not required to modify > their application to pick up this support, unless they use forward > declaration which then need to be properly scoped. > 2. The version number is included in the namespace name. This is to > allow > co-existence of different Xerces-C++ releases on the same system. Such > idea is borrowed from ICU which seems working well. > 3. And the distributed binary packages will then be built with C++ > Namespace, wherever applicable > > > Any comment? > > Thanks! > > Tinny > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
