
Le samedi 09 juin 2007 à 14:03 -0400, Gennadiy Rozental a écrit :
Can anyone explain why unnamed namespace is a problem?
Inline functions referring to the content of an unnamed namespace will break the one-definition rule, when their header is included several times. Undefined behavior ensues. The following example should make it clear: // h.hpp namespace { int a; } inline int f() { return ++a; } // a.cpp #include "h.hpp" void g() { f(); } // b.cpp #include "h.hpp" void g(); int main() { g(); return f(); } Which value does this program return? Depending on the compiler and on the level of optimization, it could be either 1 or 2. If you use a named namespace instead, the behavior becomes deterministic and the returned value is necessarily 2. Best regards, Guillaume